一、关键字与保留字
return关键字的使用
- 1.使用范围:使用在方法体中
2.作用:① 结束方法
② 针对于有返回值类型的方法,使用"return 数据"方法返回所要的数据
② 针对于有返回值类型的方法,使用"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.变量”的方式,表明此变量是属性,而非形参。
- this调用构造器
- ① 我们在类的构造器中,可以显式的使用”this(形参列表)”方式,调用本类中指定的其他构造器
- ② 构造器中不能通过”this(形参列表)”方式调用自己
- ③ 如果一个类中有n个构造器,则最多有 n - 1构造器中使用了”this(形参列表)”
- ④ 规定:”this(形参列表)”必须声明在当前构造器的首行
- ⑤ 构造器内部,最多只能声明一个”this(形参列表)”,用来调用其他的构造器
package关键字的使用
- 1.为了更好的实现项目中类的管理,提供包的概念
- 2.使用package声明类或接口所属的包,声明在源文件的首行
- 3.包,属于标识符,遵循标识符的命名规则、规范(xxxyyyzzz)、“见名知意”
- 4.每”.”一次,就代表一层文件目录。
补充:同一个包下,不能命名同名的接口、类。
不同的包下,可以命名同名的接口、类。
import关键字的使用
import:导入
- 在源文件中显式的使用import结构导入指定包下的类、接口
- 声明在包的声明和类的声明之间
- 如果需要导入多个结构,则并列写出即可
- 可以使用”xxx.*”的方式,表示可以导入xxx包下的所有结构
- 如果使用的类或接口是java.lang包下定义的,则可以省略import结构
- 如果使用的类或接口是本包下定义的,则可以省略import结构
- 如果在源文件中,使用了不同包下的同名的类,则必须至少有一个类需要以全类名的方式显示。
- 使用”xxx.*”方式表明可以调用xxx包下的所有结构。但是如果使用的是xxx子包下的结构,则仍需要显式导入
- 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(形参列表)”,调用父类中的构造器
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为同种类型。不同会编译报错。