面向对象高级
文章目录
前言
学习的总体框架
一、Static
(1)
(2)具体应用:static修饰的变量是每个对象公用的,如果一个对象中对该变量进行改变,那么所有的也都随之改变。而对于成员变量,则是每个对象所有的。类变量可以直接通过类名.变量的方式来进行引用,而实例变量则不能这个样子。
(3)计算机中的执行原理
首先这段程序在虚拟机中的运行过程为:
先将Test类提到方法区中,再将test类中的main方法放在栈中,接着执行main方法的第一行代码,碰到学生类。,将学生类加载到方法区中,接着检查这个学生类里边是否有类变量,发现有,则会与类一起加载。因此这个学生类中的类变量name加载到堆内存中。进而扫描到“袁华”将堆内存中的name修改为“袁华”。
再往下走有个学生对象S1,他有一个学生对象age,由于是新建的对象,因此在堆内存中加载一片区域存放对象,先通过S1地址寻找堆内存中的对象是否有name对象,没有就往下走找到学生类,找到学生类之后才找到类对象name,改名马冬梅。
二、类变量(static修饰成员变量)的应用场景
三、static修饰成员方法
1.成员方法的分类
2、成员方法的执行原理
首先将test类提取到方法区中来执行,然后将test类中的main方法提取到方法区中来执行,执行main方法时会将学生类也加载到方法区,通过学生类来调用类方法printHelloWord
接下来创建学生对象s,会在main方法里边存入该对象在堆中的地址,堆中存该对象的变量值,此时该学生对象如果要调用printHelloWord方法,需要先找到该对象的变量,通过堆中变量存贮的地址来找到类,进而找到类方法。
3、总结
4、main()方法详解
(String[] args)main方法中可以传递一些参数。
5、static修饰成员方法的应用场景
util类存放的是一些工具类,里边可以放一些通用的工具类来优化架构
举例:
myUtil.java
package advance.util;
import java.util.Random;
public class myUtil {
public static String createCode(int n){
String code=" ";
String data="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
Random r =new Random();
for (int i = 0; i <n ; i++) {
int index =r.nextInt(data.length());
//根据索引去全部字符中提取该字符
code+=data.charAt(index);
}
return code;
}
}
loginDemo.java
package advance.util;
public class loginDemo {
public static void main(String[] args) {
System.out.println(myUtil.createCode(4));
}
}
6、总结
例如在myUtil中添加
private myUtil(){}
7.static注意事项
8.static应用
为什么要在静态代码块中进行赋值,而不是直接定义变量时赋值的原因是因为当一个类比较复杂的时候,我们在静态代码块中赋值更加方便
实例代码块:
9.单例设计模式
饿汉式单例:
如果是经常要用这个对象,就做成饿汉式,如果不经常就是懒汉式