Java 基础部分

P18

一、基础知识细节

  1. 编译java代码 : javac HelloWorld.java

  2. main方法是JVM规定的,程序就是从这个位置执行的,程序的入口

  3. public class 和class的区别

P19 public class和class的区别

  1. 一个java源文件中可以生成多个源文件 ;

  2. 编译后,一个class对应生成一个class字节码文件

image-20240223111209337
  1. 如果一个类是public的,那么这个类名要和文件名保持一致,如果不一致就会报错。

  2. 一个java文件里,public class可以没有,如果有也只能有一个。

  3. 每个类里面都可以写入口main函数 ,执行只需要 java 类名

    在实际的开发中,入口只能有一个

image-20240223111722726

JAVA基础语法

一、标识符

凡是有权利自己起名的都是标识符,比如类名等

①在Java中,标识符是用来给变量、方法、类和包等命名的字符序列。

②标识符的长度没有限制,但是建议使用有意义的、简洁的标识符,以提高代码的可读性和可维护性。

标识符可以标识什么

①变量名

②方法名

③类名、接口名、枚举名、注解名

④包名

⑤常量名

⑥……

标识符命名规则

①标识符可以由字母、数字、下划线(_)和美元符号($)组成,不能含有其他符号。(java支持全球所有语言,所以这里的 字母 指的是任何一个国家的文字都可以)

②标识符不能以数字开头。

③标识符不能是Java中的关键字,如public、class、void等。

④标识符是区分大小写的,即Foo和foo是两个不同的标识符。

⑤标识符的长度没有限制,但是Java建议使用有意义的、简短的标识符。

标识符命名规范

①见名知意

②驼峰式命名方式

③类名、接口名、枚举、注解:首字母大写,后面每个单词首字母大写。(StudentService,UserService)

④变量名和方法名:首字母小写,后面每个单词首字母大写。(doSome,doOther)

⑤常量名:全部大写,每个单词用下划线连接。(LOGIN_SUCCESS,SYSTEM_ERROR)

⑥包名:全部小写

二、关键字

Java关键字是Java编程语言中预定义的具有特殊含义的单词,这些单词不能被用作标识符,而是在语法中有特定的用法和限制。

Java关键字有哪些

①Java关键字都是小写的。

②abstract, assert, boolean, break, byte, case, catch, char, class, continue, default, do, double, else, enum, extends, final, finally, float, for, if, implements, import, instanceof, int, interface, long, native, new, package, private, protected, public, return, short, static, strictfp, super, switch, synchronized, this, throw, throws, transient, try, void, volatile, while(50)

③Java保留字:goto,const(虽然没有在java中用到,但是不能用)

三、字面量

①字面量指的是在程序中直接使用的数据,字面量是Java中最基本的表达式,不需要进行计算或转换,直接使用即可。

就是数据

Java中有哪些字面量

①整数型:10、-5、0、100

②浮点型:3.14、-0.5、1.0

③布尔型:true、false

④字符型:’a’、’b’、’c’、’1’、’2’、’国’

⑤字符串型:”Hello”、”World”、”Java”、”你好呀”

加号运算符 +

①作用1:求和(当加号两边都是数字时进行求和运算)

②作用2:字符串拼接(当加号==两边有任意一边是字符串类型==时会进行字符串拼接,结果还是一个字符串)

image-20240223113100144

image-20240223113232992

image-20240223113303115

四、变量

①变量是内存当中的一块空间。是计算机中存储数据最基本的单元。

②变量三要素:

  • l数据类型(决定空间大小)【int, double, String】
  • l变量名(只要是合法的标识符即可)
  • l变量值(变量中具体存储的数据)

③变量的声明、赋值、访问

  • lint i; // 声明一个整数型的变量,起名i
  • li = 100; // 给变量i赋值100
  • lSystem.out.println(i); // 访问i变量:读操作
  • li = 200; // 访问i变量:改操作【给变量i重新赋值200】

生命周期就是从内存开辟到内存释放

变量分类

①局部变量

在方法体里面定义的变量

②成员变量

在类里面,不是在方法体里面定义的;

==对于成员变量来说,如果没有手动赋值,系统会自动赋默认值。==0.false,null

  1. 静态变量

    ​ //

    1
    static int a;
  2. 实例变量

五、数据类型

image-20240223124717592

image-20240223124824008

关于默认值:Java语言中变量必须先声明,再赋值,才能使用。对于局部变量来说必须手动赋值,而对于成员变量来说,如果没有手动赋值,系统会自动赋默认值。

1.整数型详解

  1. 整数型字面量一般默认是int,所以在定义long的时候,需要在字面量的后面加上“L/l”

image-20240223125508845

2.自动类型转换

小容量的可以转大的,在Java中,对于基本数据类型来说,小容量是可以直接赋值给大容量的,这被称为自动类型转换。

==byte < short < int < long < float < double==

image-20240223134152096

3.强制类型转换

需要大容量转小容量

①Java中大容量是无法直接转换成小容量的。因为这种操作可能会导致精度损失,所以这种行为交给了程序员来决定,当然这种后果自然是程序员自己去承担。因此在代码中需要程序员自己亲手加上强制类型转换符,程序才能编译通过

②强制类型转换时,底层二进制是如何变化的?原则:砍掉左侧多余的二进制。

③强制类型转换时,精度可能会损失,也可能不会损失,这要看具体的数据是否真正的超出了强转后的类型的取值范围。如下图:水可能溢出,也可能不会溢出,这要看真实存放的水有多少

④请推算结果:byte b = (byte)150;

image-20240223134219863

4.byte

当整数字面量没有超出byte的范围

①在Java中有这样一个规定,==当整数型字面量没有超出byte的范围:可以直接赋值给byte类型的变量。==

byte b = 127; // 这是允许的

很显然,这是一种编译优化。同时也是为了方便程序员写代码。

②如果超出了范围,例如:

byte b = 128; // 编译报错

这样就会报错,需要做强制类型转换,例如:

byte b = (byte)128;

它的执行结果你知道吗?可以尝试推算一下

③在整数类型中,除了byte有这个待遇之外,short同样也是支持的。也就是说:如果整数型字面量没有超出short取值范围时,也是支持直接赋值的。

5.数据类型运算

两个int类型做运算:两个int类型的数据做运算,最终的结果还是int类型

多种数据类型混合运算:

a.在Java中,多种数据类型混合运算时,各自先转换成容量最大的类型,再做运算

byte a = 100;

int b = 200;

long c = 300L;

long d = a + b + c;

你可以测试一下,如果d变量是int类型则编译器会报错

b.byte和short混合运算(byte+byte、short+short)的时候,各自先转换成int再做运算,最后的结果是int,不能用short
c.byte a = 10/3 ,这个是在编译的时候就得到结果了

编译后的class文件中直接就是byte a = 3

d.byte a = 10; byte b = 3; byte c = a/b 这个是运行的时候才得到结果的。

编译的阶段只能知道a/b的结果是int类型,不知道最后的结果是多少。

6.浮点型

浮点型字面量默认被当做double

①Java中,浮点型字面量默认被当做double类型,如果要当做float类型,需要在数字后面添加 F 或 f。

image-20240223142425166

==float f = 3.0; // 编译报错==

==报错原因是:3.0默认被当做double类型,大容量无法直接赋值给小容量。如何修改:==

==float f = 3.0F;==

==float f = (double)3.14;==这个是强制类型转换

②另外,可以通过以下程序的输出结果看到,double精度高于float:

double d = 1.5656856894;

System.out.println(d);

float f = 1.5656856894F;

System.out.println(f);

③浮点型数据两种表示形式

第一种形式:十进制

double x = 1.23;

double y = 0.23;

double z = .23;

第二种形式:科学计数法

double x = 0.123E2; // 0.123 * 10的平方

double y = 123.34E-2; // 123.34 / 10的平方

浮点型数据存储原理

①符号位:0表示整数。1表示负数。

②指数位:比如小数0.123E30,其中30就是指数。表示0.123 * 10的30次幂。所以也有把指数位叫做偏移量的。最大偏移量127。

③尾数位:浮点数的小数部分的有效数字。例如:0.00123,那么尾数位存储123对应的二进制。

④从浮点型数据存储原理上可以看到,二进制中的指数位决定了数字呈指数级增大。因此float虽然是4个字节,但却可以表示比long更大的数值。因此float容量比long的容量大。

image-20240223142930629

①一旦有浮点型数据参与运算得出的结果,一定不要使用“==”与其它数字进行“相等比较”

浮点型数据在计算机底层计算的是近似值,

7.字符型

①占用两个字节,0~65535,和short容量相同,但char可以取更大的整数

②单个字符,使用单引号括起来,不能是多个字符

③可以保存一个汉字

④char c = ‘’; 这是不允许的

⑤char c = ‘\u0000’; 这表示一个空字符,也是char的默认值。\u0000是一个Unicode码。

⑥空字符与空格字符是不同的。空字符表示什么也没有。空格字符表示一个空格。****

字符编码

乱码产生的原因在于,在编码和解码的时候没有用同一个码表