一、关键字与保留字

return关键字的使用

  • 1.使用范围:使用在方法体中
  • 2.作用:① 结束方法

    1. 针对于有返回值类型的方法,使用"return 数据"方法返回所要的数据
    2. 针对于有返回值类型的方法,使用"return 数据"方法返回所要的数据。
  • 3.注意点:return关键字后面不可以声明执行语句。(就是执行到return 后面的语句就会再执行了)

this关键字的使用

【细看:https://www.bilibili.com/video/BV1Kb411W75N?p=233&spm_id_from=pageDriver
【我的理解:在同一个类里面,我们setXxx(String age){…},里面的形参名,和类属性重名了。我们就可以用this来区别类的属性和形参。】
【我的理解:在同一个类里面,有多个重载的构造器,不同构造器里面的逻辑重复了,就可以使用this来调用构造器。】

  • 1.this可以用来修饰、调用:属性、方法、构造器
  • 2.this修饰属性和方法:

    this理解为:当前对象** 当前正在创建的对象**

    • 2.1 在类的方法中,我们可以使用”this.属性”或”this.方法”的方式,调用当前对象属性或方法。但是,通常情况下,我们都选择省略”this.”。特殊情况下,如果方法的形参和类的属性同名时,我们必须显式的使用”this.变量”的方式,表明此变量是属性,而非形参。
    • 2.2 在类的构造器中,我们可以使用”this.属性”或”this.方法”的方式,调用当前正在创建的对象属性或方法。但是,通常情况下,我们都选择省略”this.”。特殊情况下,如果构造器的形参和类的属性同名时,我们必须显式的使用”this.变量”的方式,表明此变量是属性,而非形参。
    1. this调用构造器
      • ① 我们在类的构造器中,可以显式的使用”this(形参列表)”方式,调用本类中指定的其他构造器
      • ② 构造器中不能通过”this(形参列表)”方式调用自己
      • ③ 如果一个类中有n个构造器,则最多有 n - 1构造器中使用了”this(形参列表)”
      • ④ 规定:”this(形参列表)”必须声明在当前构造器的首行
      • ⑤ 构造器内部,最多只能声明一个”this(形参列表)”,用来调用其他的构造器

package关键字的使用

  • 1.为了更好的实现项目中类的管理,提供包的概念
  • 2.使用package声明类或接口所属的包,声明在源文件的首行
  • 3.包,属于标识符,遵循标识符的命名规则、规范(xxxyyyzzz)、“见名知意”
  • 4.每”.”一次,就代表一层文件目录。
  • 补充:同一个包下,不能命名同名的接口、类。

    1. 不同的包下,可以命名同名的接口、类。

import关键字的使用

import:导入

    1. 在源文件中显式的使用import结构导入指定包下的类、接口
    1. 声明在包的声明和类的声明之间
    1. 如果需要导入多个结构,则并列写出即可
    1. 可以使用”xxx.*”的方式,表示可以导入xxx包下的所有结构
    1. 如果使用的类或接口是java.lang包下定义的,则可以省略import结构
    1. 如果使用的类或接口是本包下定义的,则可以省略import结构
    1. 如果在源文件中,使用了不同包下的同名的类,则必须至少有一个类需要以全类名的方式显示。
    1. 使用”xxx.*”方式表明可以调用xxx包下的所有结构。但是如果使用的是xxx子包下的结构,则仍需要显式导入
    1. import static:导入指定类或接口中的静态结构:属性或方法。

super关键字的使用

1.super理解为:父类的 2.super可以用来调用:属性、方法、构造器 3.super的使用:调用属性和方法

  • 3.1 我们可以在子类的方法或构造器中。通过使用”super.属性”或”super.方法”的方式,显式的调用父类中声明的属性或方法。但是,通常情况下,我们习惯省略”super.”
  • 3.2 特殊情况:当子类和父类中定义了同名的属性时,我们要想在子类中调用父类中声明的属性,则必须显式的使用”super.属性”的方式,表明调用的是父类中声明的属性。
  • 3.3 特殊情况:当子类重写了父类中的方法以后,我们想在子类的方法中调用父类中被重写的方法时,则必须显式的使用”super.方法”的方式,表明调用的是父类中被重写的方法。

4.super调用构造器

  • 4.1 我们可以在子类的构造器中显式的使用”super(形参列表)”的方式,调用父类中声明的指定的构造器
  • 4.2 “super(形参列表)”的使用,必须声明在子类构造器的首行!
  • 4.3 我们在类的构造器中,针对于”this(形参列表)”或”super(形参列表)”只能二选一,不能同时出现
  • 4.4 在构造器的首行,没有显式的声明”this(形参列表)”或”super(形参列表)”,则默认调用的是父类中空参的构造器:super()
  • 4.5 在类的多个构造器中,至少有一个类的构造器中使用了”super(形参列表)”,调用父类中的构造器

image.png

instanceof关键字的使用

a instanceof A: ① a instanceof A:判断对象a是否是类A的实例。如果是,返回true;如果不是,返回false。 ② 如果 a instanceof A返回true,则 a instanceof B也返回true.其中,类B是类A的父类。 ③ 要求a所属的类与类A必须是子类和父类的关系,否则编译错误。

使用情境:为了避免在向下转型时出现ClassCastException的异常,我们在向下转型之前,先进行instanceof的判断,一旦返回true,就进行向下转型。如果返回false,不进行向下转型。 如果 a instanceof A返回true,则 a instanceof B也返回true. 其中,类B是类A的父类。


二、标识符

命名规则:

  • a~z A~Z 0~9 _ $
  • 不能数字开头
  • 不能关键字、保留字
  • 严格区分大小写
  • 不能包含空格

如果不遵守,编译不通过,编译报错。。。


命名规范:

  • 包名:都小写xxyyzz
  • 类名、接口名:XxxYyyZzz
  • 变量名、方法名:xxxYyyZzz
  • 常量名:XXX_YYY_ZZZ

尽量“见名知意”
不遵守编译可以通过,建议这样,约定俗成。。。


三、变量

必须包含:变量类型、变量名xxxYyyZzz、存储的值
定义变量的格式:数据类型 变量名 = 变量值;
两步:1.声明什么数据类型 2.赋值
变量必须先声明后使用。没声明直接使用编译报错,不可以在同一个作用域内重复定义同名变量编译报错,在不同作用域使用变量编译报错。


四、数据类型

基本数据类型(8种):整型 byte(2字节)-128~127 \ short(2字节) \ int(4字节) \ long(8字节)必须以”l或者L“结尾
浮点型float(4字节)必须以”f或者F“结尾 \ double
字符型char (1字符=2字节)
‘’ 必须只能写一字符,不能为’ ‘,’A’、’1’、’坤’,如果写’AB’编译不通过编译报错,写’ ‘编译报错。
布尔型boolean 只能取两者之一:true false
引用数据类型:类class
接口interface
数组[]
字符串String


基本数据类型的运算规则:

不包括boolean。
1.自动类型提升:byte、char、short—>int—>long—>float—>double
结果自动小向大提升,特别地byte、char、short之间的运算结果是int
2.强制类型转换:自动类型提升的逆运算


问题:

long l=123;不是说long类型必须以”l或者L“结尾吗,为什么可以编译通过?
答:默认123为 int 型,long l = 123,就是 自动类型提升 转换为long 型,可以编译通过。如果 long l1 = 122222222222;这时的整数过大,就会编译报错,必须要以”l或者L“结尾。

float f = 12.3;//编译失败,为什么long可以,float失败了,必须要加必须以”f或者F“结尾?
答:12.3默认为 double 型,所以自动类型提升失败了。可以写为float = (float)12.3;就可以了。或者老实写 float f = 12.3F; 。

为什么下面这两个编译失败?
byte b = 12;
byte b1 = b +1 ;//编译失败
float f = b + 12.3;//编译失败
答:整型常量默认类型为 int 型。浮点型常量,默认为 double 型。不符合自动类型提升,第一个 1 默认为 int 型,相加后 b1 为 int 型;第二个 12.3 默认为 double 型,相加后 f 为 double 型。


String类型:””

引用数据类型,不是基本数据类型。
声明String类型变量时,使用一对””。
可以和8种基本数据类型变量做运算,且运算只能是:连接运算:+。
运算的结果都是String类型。

String = 123;//编译错误,因为String必须使用 “”


进制与进制之间的转换(了解)

  • 二进制binary:0 1,以0b或者0B开头

最高位为符号位1为负数0为正数。正数的原码、反码、补码都一样,负数原码除符号取反->反码,反码加1->补码。

  • 十进制decimal:0~9
  • 八进制octal:0~7,以数字0开头
  • 十六进制hex:0~9~A~F,以0x或者0X开头

计算机底层都是以补码存储。


五、运算符

5.1 算术运算符

正号+ 负号- 加+ 减- 乘* 除/ 取模% 字符串连接+
(前:先+1,后取值)++ (前)—
(后:先取值,后+1)++ (后)—
++、—,分成两步走,但都是一体的,都要执行,就是操作的步骤不同。
short n = 10;
short n = n+1;//编译报错,1 默认 int型,n 为 short型,n+1为 int 型所以报错。


5.2 赋值运算符

符号 =支持连续赋值 += -= *= /= %=
short n = 10;
n = n+2;//编译报错,理由同上。
n +=2;//12,运行成功,不会改变变量原本的数据类型。


5.3 比较运算符(关系运算符)

相等于== 不等于!= 大于> 小于< 大于等于>= 小于等于<=
检查是否是类对象instanceof
结果都为true或者false


5.4 逻辑运算符

逻辑与& 逻辑或| 逻辑非! 短路与&& 短路或|| 逻辑异或^
操作的都是 Boolean型的变量。
区分& 与 &&: 两者运算结果相同。&两边都运算,&&从左往右运算,左边出现false就不再计算右边的。
逻辑异或^:相同为false,不同为true。异或异或,不一样就是true。
开发中推荐使用:短路。


5.5 位运算符(了解)

左移<< 右移>> >>> & | ^ ~
操作的都是整性的数据。
<<:在一定范围内,每向左移 1 位,就乘以 2 。
>>:在一定范围内,每向右移 1 位,就除以 2 。


5.6 三元运算符

(条件表达式)?表达式1:表达式2

  • 条件表达式为true,运算后的结果是表达式1;
  • 条件表达式为false,运算后的结果是表达式2;
  • 表达式1和表达式2为同种类型。不同会编译报错。