目录
环境:Windows+idea2021+jdk17
才疏学浅,欢迎批评指正
一、Static
static 叫做静态,可以修饰成员变量、成员方法(均按照有无static修饰分为两类)
成员变量:
类变量(静态成员变量): 有static修饰,的属于类,在计算机里只有一份,会被类和类
的所有对象共享。(new 出来的就是对象)
实例变量(非静态成员变量):无static修饰,属于对象
(理解:类是集合,类中元素值有共同特征,故类变量用来存储这些共同特征。故类变量被共享。调用方法:类名 . 类变量名,也可以通过 对象 . 类变量名。与类一起加载一次,后再不也不能创建;
对象是类中的一个元素,他除了那些共性还有他自己的特征。实例变量就用来存储他自己与众不同的那些征,所以被每个对象自己独有。调用方法:对象 . 实例变量名。随着对象的创建儿创建,随着对象的消灭而消灭)
成员方法:
类方法(静态成员方法):在方法类型前加static。有static修饰的成员方法属于类,同变量,类方法也被类和类的所有对象共享
调用方法:类名 . 类方法名 又或是对象名 . 类方法
实例方法(非静态成员方法):无static修饰的成员方法,属于对象
调用方法:对象名 . 实例方法
(我的理解:同上面,方法是对象的行为。类方法就是 ,类中对象所共有的行为,所以通过对象和通过类都能调用类方法,一类一起加载一次,后不再加载
实例方法理解成是一些对象所特有的行为,同实例变量的理解)
口诀:静态成员只能访问静态成员
二、零碎
1、类内的方法叫成员方法,类内方法外的变量叫成员变量。
2、idea中复制光标所在行内容到下一行的快捷键是:ctrl+D
3、类编译运行的时候主类的字节码文件会先进栈,main方法进方法区
4、被私有的对象、方法或构造方法只能在其所在的类中调用
5、类有5个组成部分:成员变量、构造器、方法、代码块、内部类
6、设计模式就是具体问题的最有解决方案
三、代码块
1、静态代码块:static{}
使用场景:完成类的初始化 例如给类变量的初始化(多用于给复杂类型的静态变量初始化(复杂是指引用数据类型)
被调用的时机:在类加载的时候自动执行,同类一起只加载一次
(理解:算是类的默认配置,在类的创建之初,通过这种方式配置)
2、实例代码块:{}
被调用的时机:每次创建对象时执行实例代码块,在构造器之前执行
(理解:算是实例对象的默认配置,把该对象那些构造函数共有的东西放进来,从而优化代码)
四、工具类
特点:
方法为类方法(优点:不需要new就能直接执行)
构造器私有(不能被new )
(即:想要调用工具来中的方法只能通过类名 . 方法名 调用)
好处:
调用方便,提高了开发效率。不让创建对象,节省内存。
五、单例设计模式
单例设计模式要解决的问题是:确保一个类只有一个对象
好处:
在有些业务场景下,使用单例模式,只创建一个对象,可以避免内存浪费。
步骤:
1、把类的构造器私有
2、定义一个类变量记住类的一个对象
3、提供一个类方法,返回该对象
两种单例模式:饿汉式、懒汉式
饿汉式:拿对象的时候已经创建好了(用空间换时间)
public class A{
private static A a = new A();
private A(){}
public static A getObject(){
return a;
}
}
懒汉式:用到类对象的时候才创建(用时间换空间)
public class A {
private static A a;
private A() {}
public static A getObject() {
if (a == null) {
a = new A();
}
return a;
}
}
这是自己调整的懒汉设计模式,这个合适吗?会更优化嘛?
public class A {
private static A a;
private A() {}
static {
a = new A();
}
public static A getObject() {
return a;
}
}
懒汉式单例设计模式能这样写嘛,这样会不会比写判断语句更优化一点