JVM类加载和静态存储
来源:互联网 发布:张国荣死亡之谜 知乎 编辑:程序博客网 时间:2024/06/06 02:13
静态的,那就是最优先的
修饰当中,总有几个骚东西
如果说public,protected,default(friendly,就是没有修饰符啦)定义的是访问权限范围的话
static定义的就是优先级了
想要创建对象,先查户口,看看老爹(继承父类),再看看老妈(接口)
追到老祖宗,查遍户口本了,才开始到你
创建对象可不是构造方法开头的,如果你这么以为,那就错了
操作语句不能在类级别直接写,那是不被允许的
但是加个大括号就可以了,这个东西还排在构造之前
public class Client {public Client(){System.out.println("create");}{System.out.println("construct");}}看起来有点骚,这个无名氏有点腻害
这个是构造代码块
如果说finalize是临死前的最后一句遗言
构造方法是受精孕育生命
构造代码块就是小蝌蚪在冲刺了
创建对象时一定会先走这一步,可以测试一下
public class Client {private static String name;public Client(){//name = "judas";}{name = "godme";}public String getName(){return name;}public static void main(String args[]){Client client = new Client();System.out.println(client.getName());//godme}}放开注释
public class Client {private static String name;public Client(){name = "judas";}{name = "godme";}public String getName(){return name;}public static void main(String args[]){Client client = new Client();System.out.println(client.getName());//judas}}
可以知道两点:
1. 构造代码块可以执行
2. 构造方法会覆盖,说明构造方法在构造代码块之后
如果是那种一开始就必须赋值的基本属性的话,不防在构造代码块中进行赋值,这种是很保险的
小蝌蚪既然开始摇摆了,那前面也必须static来进行放闸
正如需要查遍户口验明正身,了解一切,在最初的时候JVM也会先解析你
加载就是这样一个过程
构造代码块,构造方法,正如名称,构造
每次创建对象的时候,这些方法都会执行一次
但是加载过程只会有一次,此时执行的就是静态代码块
public class Client {private static String name;public Client(){//name = "judas";}static{name = "godme";}public static String getName(){return name;}public static void main(String args[]){System.out.println(Client.getName());}此时,没有默认的赋值,没有构造来出发,也没有外部的注入
这就是加载时候默认出发的方法
用static修饰的变量,都会被存放在JVM的静态内存中,也会优先被加载
毕竟放闸了才会有以后
1. 查户口
1. 静态代码块
2. 静态代码块
3. 构造代码块
4. 构造方法
5. 开始你的程序
加载到的时候就会执行,所以哪怕是你没用到的类,继承了他或者他的子类,他也会还阳那么一会会
但是,这个静态的东西都必须在类里面定义么
这种好东西使用范围必定是广泛的,如果真的只在类里面定义,没有一个方便的方式,那也废了
public class Client {public static void main(String args[]){System.out.println(System.getProperty("name"));}public static void set(){System.setProperty("name", "godme");}}这样不就好了,同时一个程序,通过静态存储区就可以进行相互的数据交流了
数组,集合当然也可以,不过局限太大了
感觉不到的话,比较一下
public class Client {public static void main(String args[]){set(3,5);calc();int ans = get();System.out.println(ans);}public static void set(int a, int b){System.setProperty("a", a+"");System.setProperty("b", b+"");}public static void calc(){String astring = System.getProperty("a");String bstring = System.getProperty("b");int a;int b;if(astring == null && bstring == null){astring = "0";astring = "0";}a = Integer.valueOf(astring);b = Integer.valueOf(bstring);System.setProperty("ans", (a+b)+"");}public static int get(){return Integer.valueOf(System.getProperty("ans"));}}通过一个中介,三个部分都只是孤立的完成自己的操作,却组装出了一个实用的方法
不过这种只是JVM自己提供的存储机制,工业上这种交互式的缓存可以用redis
不同于Oracle或MySQL的专注持久化存储,在快速的数据交互情景下,redis快速的存取更获得青睐
好比设置的键值,redis中不同表的划分,让不同的线程来进行处理,再转移到下一个表,接收下一步的处理
这种阶段式,集中式的处理,会更方便,更高效
- JVM类加载和静态存储
- jvm和类加载
- 动态加载类和静态加载类
- JVM核心之 JVM运行和类加载全过程
- JVM核心之JVM运行和类加载全过程
- 深入浅出JAVA类加载和JVM
- Java - 类加载器 和 JVM
- JVM运行和类加载过程
- JVM生命周期和类加载机制
- JVM虚拟机和类加载机制
- JVM > 类加载的时机和过程
- JVM虚拟机和类加载器
- JVM虚拟机和类加载器
- 【JVM】类加载、连接和初始化过程
- JVM运行和类加载全过程
- jvm内存管理和类加载
- JVM内存管理和类加载系统
- JVM生命周期和类加载机制
- java中的匿名类用法
- gdb 常用调试命令
- Maven实战(一) eclipse构建maven的web项目
- 52-IO流(文件切割) 53-IO流(文件合并)
- Microsoft.ace.oledb.12.0 没有在本机注册
- JVM类加载和静态存储
- 第二周小结
- 2017zufe院赛 最后三题题解
- 概率统计-描述性统计量
- 拷贝文件、文件夹、创建文件夹、删除文件夹操作
- Maven实战(二)--setting.xml详解
- java web的前世今生
- 论坛换页html、css
- 使用zsh的十大优点