1.
写的三个Java类在磁盘上存在,只是编译的java,在text文件中,其他文件会伴随编译
javac调用jdK,
2.关于内存和文件
硬盘上存储文件,文件只存在硬盘上,硬盘只存文件,内存解析,内存中存的是方法和变量,硬盘存文件,并不是所有的文件都在内存中
把.class信息放在放入内存中进行解析,
那个大的方块是内存,程序所占的区域是一定的,一个用的其他就不能用了,Java所占的空间很大,很多块空间
进程之间是相互隔离的
Java通过申请数组来占用内存空间,说占用多少空间,就是申请了多少数组,一般程序申请空间利用的是数组,但是程序的内存一般比实际申请的内存要大
将来面试要考内存分成了五大区:方法区、栈、堆、计数器、本地方法栈,意思就是将整个大的数组分为了五大区,不管什么语言到内存中就变成了C语言,计算机只能识别C语言,Java虽然转成了C但是操作系统还是不认识,最后必须换成操作系统属性的语言,利用本地方法栈进行翻译,只有这个时候才能运行,语言一样的程序不一定能调用,程序的运行就是操作系统的调用,操作系统最终在硬件运行,任何程序在电脑的运行,最终体现在硬件上,操作系统内核提供方法,只有翻译成操作系统内核的方法,才能操作硬件,驱动才能认识
,所以不管任何语言都要有本地方法栈这个环节,可能名字叫法不一样,但是必须有这个环节
本地方法栈的作用:把自定义的C转换成操作系统内核的C,这样才能进行驱动
方法区:一部分存的是静态信息,一部分存的是类信息,如图test类,person类:有age、name、height等变量 CAR有speed、price、name此一部分是类常量池,
类信息刚进入内存是先存在方法区。
在test中有一个主方法main,没有加static是非静态的方法
此图相当于设计图纸,无法对设计图纸上的东西进行操作,
凡是加上static的就已经被造出来了,从图纸变成了实物,被造出来意思就是可以进行操作=直接调用
但如果是非静态的,不可以被直接操作,不是静态的还是在图纸上不能进行操作,加上静态标记的可以直接被调用,不加的不能被调用
方法在栈中执行,主方法的执行拷贝一份压入栈中,方法的执行相当于一个入栈的过程,方法本身就是一个栈,
在主方法申明X1变量
将不是静态的放入到堆中,在主方法创建了两个变量,然后放在堆中造成了一个个体,
类与对象的关系,在堆中创造一个一个的个体,new出来的对象,new就是生产对象,生产的对象一定在堆中
方法在栈中,方法产生的对象在堆中,只要是非静态的不管是属性还是对象在每个方法里面都有一份
方法被调用相当于拷贝一份入栈,主栈最上面是运行状态,主方法停止运行,执行完就出栈,
字符串不可变类型,每次都要申请
主方法最后一个出栈
/////////////////
线程的本质就是线程栈,所以在栈这个区域就是线程,线程的组成元素就是一个个的方法
在内存图上的画法:w1的值和w1是在一块的,因为int是基本类型,基本类型的内存空间是一定的所以可以提前申请内存空间,所以它的值是可伴随的,
但是引用类型的的内存空间是不确定的所以不能提前申请空间所以值是不可伴随的。
如果是基本类型的,变量和值挨在一块
引用类型的值会发生变动,变化的空间是现申请的,引用类型的大小是不确定的,没有办法和基本类型伴随一样,引用类型改变自己的值就是改变自己的指向,但是如果是内部的小的修改值的话就不修改指向,int类型的数组也是引用类型
堆是内存中最大的
字符串的引用方式
string[] w4 ={”qqq" "www" "eee"},字符串不可改变
等于前是引用类型:改变指向
等于前是基本类型:在原地址修改
黑的和上面白色的对应的内存图
浅拷贝:保持相同的指向
copyof的作用:指定字符数组复制取出的指定长度的内容
arrays是进行排序
arraysto直接输出数组
每一个对象都有tostring
被static修饰的方法可以用类名.调用
非静态方法得先产生对象才可以被调用,依托对象来进行调用,非静态方法依托对象来被调用,没有对象不能够被调用,就类似于图纸了
tostring方法是非静态方法
tostring必须依托对象存在
localdate.of也是自定义方法
相当于xx=new Person.of()
更改器和访问器
private类型
前面是private后面蓝色就不可以直接用了,就报错了
通过两种方法来修改age此时就可以了,这个public公共方法就是访问器
把这个方法注释掉,那么上面的方法就变成了只读,不能修改,
访问器不做处理,private string name一点都不安全
访问器设置为只读,就是只想读不想改,下面这个图就是访问器为只读的状态
然后开始换了一个
蓝色部分是代码块,语法是合理的
上面的蓝色部分都可以被访问器访问到,return是等于的意思,相当于是拷贝了一份
被static修饰的只能存在一份
静态的可以被对象调用也可以被类名调用
访问器如果面对引用类型只读的话根本不安全