变量名第一个单词首字母小写,其余单词首字母大写
java 区分大小写,price Price 是不同变量
变量名可以字母、下划线(_)、美元符号($)开头,其余不可。
-
数据类型:
-
自动类型转换满足特定条件:
- 目标类型能与原类型兼容,如 double 可以兼容 int,但是 char 无法兼容 int
- 目标类型大于原类型,如 double 类型长度为 8 字节,int 类型为 4 字节。所以 double 类型的变量可以直接存放 int 类型,但反过来不行。
-
强制类型转换:
- 语法: (数据类型)数值
double avg1=75.8;
int avg2=(int)avg1;
但注意,这种强制转换会直接截断小数位,造成数据丢失!
- 语法: (数据类型)数值
常量名一般是大写字符!
- 单行注释://
- 多行注释: /* 开头,*/ 结尾
- 文档注释: /** 开头,*/ 结尾
-
比较运算符:
、<、>=、<= 只能操作数值
- ==、!= 可以操作数值类型,也可以操作引用类型
-
逻辑运算符:
短路现象:
- ( one > two ) && ( one < three ) 中,如果能确定左边 one > two 运行结果为 false , 则系统就认为已经没有必要执行右侧的 one < three 啦。
- 同理,在( one > two ) || ( one < three ) 中,如果能确定左边表达式的运行结果为 true , 则系统也同样会认为已经没有必要再进行右侧的 one < three 的执行啦!
- 条件运算符(?:)也称为三元运算符:
语法形式:
- 布尔表达式 ? 表达式1 : 表达式2
- 运算符优先级:
1 的优先级最高,11 的优先级最低
- 数组:
scores = new int[5]
names = new String[5]
int[] scores = new int[5];
int[] scores = {78,91,84,68}
int[] scores = new int[]{78,91,84,68}
- 将数组排序:
Arrays.sort(scores);
- 将数组转换成字符串:
Arrays.toString(scores);
-
foreach for 语句的特殊简化版本
void 表示如果方法不返回任何值,则任何值类型指定为 void;
如果方法具有返回值,则需要指定返回值的类型,并且在方法体中使用 return 语句返回值。-
Java 中无参无返回值方法的使用:
- 方法名主要主要命名的规范,一般采用第一个单词首字母小写,其他单词首字母大写。
- Java 中无参带返回值方法的使用:
-
调用带返回值的方法时需要注意,由于方法执行后会返回一个结果,因此在调用返回值方法时一般都会接收其返回值并进行处理。
-
Java 中带参无返回值方法的使用:
-
Java 中带参带返回值方法的使用:
重载:
-
如果一个类中包含了两个或两个以上方法名相同、方法参数的个数、顺序或类型不同的方法,则称为方法的重载
- static 使用之静态变量:
-
被 static 修饰的成员称为静态成员或类成员。属于整个类所有。
-
静态方法:
静态方法可以直接调用同类中的静态成员(也可以用创建类的对象,通过对象来访问,推荐用类名调用的方式),不能直接调用非静态成员。
如果希望在静态方法中调用非静态变量,通过对象来访问非静态对象-
在普通成员方法中,则可以直接访问同类的静态和非静态变量
-
静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。
-
通过初始化块进行数据赋值:
静态初始化块只在类加载时后执行且只执行一次
静态初始化块只能给静态变量赋值,不能初始化普通的成员变量
- 程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。
-
封装:
-
访问修饰符:
-
成员内部类:
- 外部类不能直接使用内部类的成员和方法(可先创建内部类的对象,通过内部类的对象来访问)
-
如果外部类和内部类具有相同的成员变量和方法,内部类默认访问自己的成员变量和方法,如果要访问外部类的成员变量,可以使用 this 关键字:
-
静态内部类:
- 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问
- 创建静态内部类对象时,不需要外部类的对象,可以直接 内部类 对象名 = new 内部类()
-
方法内部类:
-
方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。
注意:由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和static 修饰符。
-
重写:
语法规则:
- 返回值类型
- 方法名
- 参数类型及个数
- 这些都要与父类继承的方法相同,才叫重写
- 继承的初始化顺序:
- 初始化父类再初始化子类
- 先执行初始化对象中属性,再执行构造方法中的初始化
-
final 关键字:
-
super 关键字:
- 在对象内部使用,可以代表父类对象。
- 访问父类属性 super.age
- 访问父类方法 super.eat()
- 子类的构造过程当中必须调用其父类的构造方法
Object类:如果没有继承父类,默认继承 Object 类
-
- toString() 方法:
- 在 Object 类里面定义 toString() 方法的时候返回的对象的哈希 code 码(对象地址字符串)
- 可以通过重写 toString() 方法表示出对象的属性
-
- equals() 方法:
- 比较的时对象的引用是否指向同一块内存地址(一般情况下比较两个对象时比较她的值是否一致,所以要进行重写)
- 多态(继承时多态实现的基础):
- 对象的多种多态:
- 引用多态:
- 父类的引用可以指向本类的对象
- 父类的引用可以指向子类的对象
- 方法多态:
- 创建本类对象时,调用的方法为本类方法
- 创建子类对象时,调用的方法为子类重写的方法或者继承的方法
- 引用类型转换:
- 向上类型转换(隐式/自动类型转换),是小类型到大类型的转换;
- 向下类型转换(强制类型转换),是大类型到小类型。会有数据溢出,有风险
- instanceof 运算符,来解决引用对象的类型,避免类型转换的安全性问题。
-
接口:
-
Java 中的异常抛出:
- 自定义异常:
class 自定义异常类 extends 异常类型{
}
- 字符串:
String 类位于 java.lang 包,默认导入所有程序。
-
创建 String 对象的方法:
-
- String 的不变性:
String 对象创建后便不能被修改,是不可变的。所谓的修改其实是创建了新的对象,所指向的内存空间不同。
- String 的不变性:
- 运行结果:
true
false
false
欢迎来到:爱慕课
注意:
- 通过 String s1="爱慕课"; 声明了一个字符串对象, s1 存放了到字符串对象的引用。
然后通过 s1="欢迎来到:"+s1; 改变了字符串 s1 ,其实质是创建了新的字符串对象,变量 s1 指向了新创建的字符串对象- 一旦一个字符串在内存中创建,则这个字符串将不可改变。如果需要一个可以改变的字符串,我们可以使用
StringBuffer
或者StringBuilder
。- 每次
new
一个字符串就是产生一个新的对象,即便两个字符串的内容相同,使用 ”==” 比较时也为false
,如果只需比较内容是否相同,应使用equals()
方法
-
String 常用方法:
-
- 字符串 str 中字符的索引从0开始,范围为 0 到 str.length()-1
- 使用 indexOf 进行字符或字符串查找时,如果匹配返回位置索引;如果没有匹配结果,返回 -1
- 使用 substring(beginIndex , endIndex) 进行字符串截取时,包括 beginIndex 位置的字符,不包括 endIndex 位置的字符(类似于 Python 切片)
- StringBuilder 类:
- StringBuilder 和 StringBuffer 类基本相似,不同之处在于 StringBuffer 是线程安全的,而 StringBuilder 则没有实现线程安全的功能,所以性能略高。
- 一般情况下,如果需要创建一个内容可变的字符串对象,应优先考虑使用
StringBuilder
类。 -
常用方法:
在下面的示例代码中,创建了 StringBuilder 对象,用来存储字符串,并对其做了追加和插入操作。这些操作修改了 str 对象的值,而没有创建新的对象,这就是 StringBuilder 和 String 最大的区别。
-
包装类:
- 包装类主要提供了两大类方法:
- 将本类型和其他基本类型进行转换的方法
- 将字符串和本类型及包装类互相转换的方法
-
包装类的常用方法:
- 基本类型和包装类之间的转换:
JDK1.5 引入自动装箱和拆箱的机制后,包装类和基本类型之间的转换就更加轻松便利了。
装箱:把基本类型转换成包装类,使其具有对象的性质,又可分为手动装箱和自动装箱
拆箱:和装箱相反,把包装类对象转换成基本类型的值,又可分为手动拆箱和自动拆箱
- 基本类型和字符串之间的转换:
- 基本类型转换成字符串的三种方法:
- 使用包装类的 toString()
- 使用 String 类的 valueOf()
- 用一个空字符串加上基本类型,得到的就是基本类型数据对应的字符串
- 字符串转换成基本类型有两种方法:
- 调用包装类的 parseXxx 静态方法
- 调用包装类的 valueOf() 方法转换为基本类型的包装类,会自动拆箱
- 使用 Date 和 SimpleDateFormat 类表示时间:
- 使用 format() 方法将日期转换为指定格式的文本
- 使用 parse() 方法将文本转换为日期:
注意:
1.调用 SimpleDateFormat 对象的 parse() 方法时可能会出现转换异常,即 ParseException ,因此需要进行异常处理
- 使用 Date 类时需要导入 java.util 包,使用 SimpleDateFormat 时需要导入 java.text 包
- Calendar 类的应用:
(更推荐使用 Calendar 类进行时间和日期的处理)
- java.util.Calendar 类是一个抽象类,可以通过调用 getInstance() 静态方法获取一个 Calendar 对象,此对象已由当前日期时间初始化,即默认代表当前时间,如 Calendar c = Calendar.getInstance();
- Calendar 类提供了 getTime() 方法,用来获取 Date 对象,完成 Calendar 和 Date 的转换,还可通过 getTimeInMillis() 方法,获取此 Calendar 的时间值,以毫秒为单位
- Math 类操作数据:
-常用方法:
-
集合与数组的对比:
泛型不能用基本类型,要用强制转换成包装类。
Map 接口:
-
HashMap 类:
- Comparable 默认比较规则
-
Comparator 临时比较规则
- Java 集合框架:
- Collection 接口
- Collections 工具类
- Map 接口
- Comparator 接口
- Comparable 接口