学前简述

学习方法

  • 为什么学?

    • 技术控?
    • 项目需求?
    • 作业要求?
  • 方法?

    • 现有技术能解决?
    • 现有技术能完美解决?
  • 新技术和知识点?

    • 根据需求有针对点的学习
  • 怎么学?

    • 基本原理和基本语法(不考虑细节,快速过一遍),不要先考虑细节,因为细节永无止境

    • 快速入门(基本程序)

    • 熟悉后,再考虑细节

历史信息

  • 1995年,Java诞生。

  • 目前属于甲骨文公司所有

  • 目前用的最多的版本是8和11

语言特点

  • 面对对象(oop)

  • 可移植性高

  • 解释性语言
    解释性语言:编译后的程序需要解释器执行,如python、Java、PHP。
    编译性语言:编译后的程序可以直接执行,如C/C++

开发工具

软件

  • editplus、 notepad++
  • Sublime Text
  • IDEA
  • eclipse

选择

初学者建议用集成度低的软件,培养代码感。例如Sublime。

做项目的时候,建议使用IDEA与eclipse这些集成度高的软件,会更方便进行项目开发。

运行机制

Java能运行起来全靠各个平台的JVM(Java虚拟机)

JVM特点

  • 包括在JDK中,通过安装不同版本的JDK来安装
  • 不同的OS具有不同的JVM
  • JVM为Java程序的运行提供透明服务,即程序编译后,运行的时候屏蔽了不同操作系统的差异性。

JDK(Java开发工具)

  • 包括JRE和Java开发工具
  • 开发者使用,编译程序

JRE(Java运行环境)

  • 包括JVM和Java核心类库

  • 用户端使用,运行程序

配置环境变量

原因

  • 看错误现象
  • 当前执行程序的目录下没有可供使用的编译器,OS会去查询path路径。为了能够最大效率的使用Java,所以要配置环境变量。

image-20240709083724792

用户变量只针对某一个用户,这里就是只针对zpx用户,而系统变量是针对所有用户,即所有用户都可以用。如果电脑只供一个用户使用,其实两者就没有差别了。

Java入门

程序示例

以下是一个经典的Hello程序代码的示例

1
2
3
4
5
6
7
8
9
//创建一个public公有类Hello
public class Hello{
//创建一个主函数
public static void main(String[] args){
//编写打印字符串的代码块
System.out.println("Hello world!");
// ;(冒号)表示该代码语句结束
}
}

image-20240709085638984

在编译之前一定要改变程序的编码格式,因为cmd默认编译程序是gbk编码,但是有中文的代码一般是utf-8格式,所以在编写完程序后,一定记得要改变程序的编码格式。

之后还要进行程序的编译和执行,语句及效果如下图所示:

image-20240709090503459

1
2
flowchart LR
A[.java文件]-- javac命令 -->B[.class文件]-- java命令 -->C[执行结果]

注意事项

  • 一个源文件只能有一个public类,其他类不限制;
    并且如果源文件中有一个public类,则源文件必须以该类命名。

  • 在编译后,每一个类都会生成一个.class文件。

  • Java程序入口是main()方法,一般我们规定是

    1
    public static void main(String[] args){}
  • main()方法也可以在非public类中

转义字符

字符 功能
\t 制表符
\n 换行符
\\ 输出“\”(类似于计网数据链路层)
\r 回车

==注意:==换行是另起一行,回车是同一行从头开始。

要学会去看报错信息,一般情况下报错信息有助于我们修改代码,完善代码。

注释

  • 单行注释:利用“//”后面跟的是注释
  • 多行注释:“/**/“,在两个*中间夹的就是注释,这个可以用作多行

image-20240709103243312

  • 文档注释:

image-20240709103358169

文档注释的用处很多,这个在之后可以多加留心注意。

代码规范

  • 类、方法注释用javadoc方式

  • 适当的缩进和空格

  • 实际工作中的文件格式是utf-8

  • 每行最多不要超过80字符

  • 代码编写符合==次行风格==(笔者推荐,笔者常用)和==行尾风格==

数据类型

变量

用于存储数据的命名存储位置,每个变量都有一个特定的类型。类型决定了变量能存储的种类以及该数据能进行的操作

加运算

下边是进行加运算时候的代码及结果

image-20240709152913192

数据类型

  • 基本数据类型

    • 数值型

      • 整数类型(byte[1],short[4],int[4],long[8])
      • 浮点类型(float[4],double[8])
    • 字符型(char[2])

    • 布尔型(boolean[1])

  • 引用数据类型

    • 接口
    • 数组

整数类型

类型 字节 范围
byte 1 -128~127
short 4 -(215)~215-1
int 4 -(231)~231-1
long 8 -(263)~263-1
  • Java的数据类型长度不受OS的影响,保持了Java的可移植性
  • 除非不得已,一般用int
  • 1byte = 8bit

浮点型

类型 存储空间 范围
单精度float 4字节 -3.403E38 ~ 3.403E38
双精度double 8字节 -1.798E308 ~ 1.798E308

浮点数 = 符号位 + 阶码(指数) + 尾数(精度)

  • 不受OS影响,存储空间固定
  • Java默认浮点型常量是double,声明float类型时,常量后必须跟‘f’或者’F‘
1
2
3
4
5
6
7
8
9
10
11
12
13
//创建一个公有类
public class PlusSum{
public static void main(String[] args){
float num1 = 1.1; //报错,Java默认常量是double
float num2 = 1.1f; //对
double num3 = 1.1; //对
double num4 = 1.1f; //对,double存储空间大于float

double num5 = .123; //相当于0.123
double num6 = 5.12e2; //= 5.12*10的平方
double num7 = 5.12E2; //= 5.12/10的平方
}
}
  • 2.7与8.1/3相近,并不是相等。

字符型

  • char的本质是整数,整数代表的Unicode码(统一编码表)
  • 用单引号包括
  • char可以运算
  • 不同规则的编码格式,对文件大小有一定的影响;不同编码的文件进行转换会出现乱码的情况
    如gbk(字母1字节,汉字2字节), utf-8(字母1字节,汉字3字节), unicode(字母与汉字均为2字节), big5(存放繁体字)

布尔型

  • 只有true和false两个值
  • 不能用非0或0表示布尔类型(C可以)

类型转换

类型==自动==转换

  • 低精度能向高精度进行自动转换

9fdec834061bff58e592761f969b6a4

  • 当有多个数据类型进行运算的时候,系统首先将所有数据转换为存储空间最大的数据类型
  • (byte,short)无法与char互相转换
  • boolean不参与类型自动转换

image-20240710100423129

  • short, char, byte参与的运算会自动转换为int类型

==强制==转换

  • 高精度转为低精度,会造成数据的损失或溢出

image-20240710101312091

  • 强转符号只对最近的数据有效

image-20240710101547953

练习题

bf8ff483d366bbad8e6c55df1b6ed12

base2string

  • 基本数据类型与字符串进行转换的时候用的是各个数据类的方法

image-20240710103834339

作业小结

1418f768421f26daab16cc888f7e906

504327c383e8cd4f9478f2cfbae5e37

2197809533c4cfb06d2bab253d0d2ba

1
2
3
4
5
6
7
8
9
10
11
12
// HomeWork4.java
public class HomeWork4{
public static void main(String[] args){
String name = "张三";
int age = 20;
double score = 95.6;
char gender = 'female';
String hobby = "music";
System.out.println("姓名\t年龄\t成绩\t性别\t爱好\n"+
name+"\t"+age+"\t"+score+"\t"+gender+"\t"+hobby);
}
}