==符号使用
(1)如果比较的是基本数据类型,比较两个变量保存的数据是否相等(不一定类型一致,除了boolen类型)
(2)引用数据类型:比较两个对象的地址值是否相等,即两个引用是否指向同一个对象实体
equals()方法的使用
只能适用于引用数据类型
Object类中定义的equals方法和==的作用是相同的,但是Object类的一些子类,如String、Date,File等子类重写了equals方法,重写后比较的是两个对象的“实体内容”是否相同
包装类和基本数据类型的转换
自动装箱:基本数据类型转换为包装类
自动拆箱:包装类转化为基本数据类型
基本数据类型和包装类转换为String类型
调用String重载的valueOf(Xxx,xxx);
String类型转换为基本数据类型和包装类
调用包装类的parseXxx()方法
数组也是Object类的一个子类
给Integer赋值的范围在-128~127范围内,可以直接使用数组中的元素,不用再去new了,目的:提高效率
static关键字:静态的
特点:
随着类的加载而加载
优先于对象存在
修饰的成员,被所有对象所共享
访问权限允许时,可不创建对象,直接被类调用
static修饰属性:静态变量
1、属性、按照是否使用static修饰,分为静态属性和非静态属性(实例变量)
实例变量:创建多个对象的时候,每个对象都有独立的拥有一套类中的非静态属性,当我们修改了一个对象的时候,其他对象的相同属性值不会被修改
静态变量:创建多个对象的时候,多个对象共享同一个静态变量,当我们修改了一个对象的时候,其他对象的相同属性值也会被修改
其他的说明:
(1)静态变量会随着类的加载而加载,可以通过类.静态变量的方式来调用
(2)静态变量的加载要早于对象的创建
(3)在内存中只有一份,存在于方法区的静态域中
2、方法
通过“类。静态方法”来调用
静态方法中只能调用静态的方法或属性
非静态方法,及可以调用非静态的方法或属性,也可以调用静态的方法或属性
怎么判断一个属性要不要用static?
看属性是不是被多个对象共享的,不会随着对象的不同而不同
怎么判断一个方法要不要用static?
(1)操作静态的属性的方法,通常设置为static
(2)工具类中的方法
单例的设计模式
概念:采取一定的方法保证在整个系统中,对某个类只能存在一个对象实例
区分饿汉式和懒汉式
饿汉式:
好处:线程安全
坏处:加载时间过长
懒汉式
好处:延长对象的创建
坏处:线程可能不安全,可以调优
//饿汉式
class Bank{
//1.私有化类的构造器
private Bank(){
}
//2.内部创建类的对象
//4.要求此对象也必须声明为静态的
private static Bank instance = new Bank();
//3.提供公共的静态的方法,返回类的对象
public static Bank getInstance(){
return instance;
}
}
/*
- 单例模式的懒汉式实现
*/
public class SingletonTest2 {
public static void main(String[] args) {
Order order1 = Order.getInstance();
Order order2 = Order.getInstance();
System.out.println(order1 == order2);
}
}
class Order{
//1.私有化类的构造器
private Order(){
}
//2.声明当前类对象,没有初始化
//4.此对象也必须声明为static的
private static Order instance = null;
//3.声明public、static的返回当前类对象的方法
public static Order getInstance(){
if(instance == null){
instance = new Order();
}
return instance;
}
}
代码块
类的成员之四:代码块(或初始化块)
*
-
- 代码块的作用:用来初始化类、对象
-
- 代码块如果有修饰的话,只能使用static.
-
- 分类:静态代码块 vs 非静态代码块
-
- 静态代码块
-
>内部可以有输出语句
-
>随着类的加载而执行,而且只执行一次
-
>作用:初始化类的信息
-
>如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行
-
>静态代码块的执行要优先于非静态代码块的执行
-
>静态代码块内只能调用静态的属性、静态的方法,不能调用非静态的结构
-
- 非静态代码块
-
>内部可以有输出语句
-
>随着对象的创建而执行
-
>每创建一个对象,就执行一次非静态代码块
-
>作用:可以在创建对象时,对对象的属性等进行初始化
-
>如果一个类中定义了多个非静态代码块,则按照声明的先后顺序执行
-
>非静态代码块内可以调用静态的属性、静态的方法,或非静态的属性、非静态的方法
*/
对象赋值的顺序
对属性可以赋值的位置:
- ①默认初始化
- ②显式初始化/⑤在代码块中赋值
- ③构造器中初始化
- ④有了对象以后,可以通过"对象.属性"或"对象.方法"的方式,进行赋值
- 执行的先后顺序:① - ② / ⑤ - ③ - ④
本文章为本人复习面向对象所写,主要参考了尚硅谷的课程