Java学习笔记
一、Java的内存需要划分为5个部分:
1、栈(Stack):存放的都是方法中的局部变量。 //自动释放
局部变量:方法的参数,或者是方法{}内部的变量
作用域:一旦超出作用域,立刻从栈内存当中消失。
2、堆(Heap):凡是new出来的东西,都在堆当中。 //程序员手动清除释放,由JAVA虚拟机中垃圾回收器清除
堆内存里面的东西都有一个地址值:16进制
堆内存里面的数据,都有默认值。规则:如果是整数,默认为0 浮点数默认为0.0 字符默认为.. 布尔值默认为false 引用类型默认为null
简言之是:在堆中创建了一个数组或对象后,在栈中创建一个特殊变量,特殊变量指向堆中数组或对象的首地址值,以便访问堆中的数据
3、方法区: 存储.class相关信息,包含方法的信息
4、本地方法栈:与操作系统相关
5、寄存器:与CPU相关
ps: 方法区的函数要执行,必须使它入栈
example如上:(9月7日解读!!!)
二、Java面向对象oop
2.1 类和对象
类包括属性和行为,例如:猫--> 属性:名字、体重、年龄、颜色 行为:走、跑、叫 类名更像是我们要实现的目标
成员变量(属性):
string name; //猫姓名
int age; //猫年龄
成员方法(行为)
public void eat() {} //成员函数不加static
对象:是一类事物的实例,是具体的(类是一类事物的描述,是抽象的)
封装性:1、方法就是一种封装
2、关键字private也是一种封装
封装就是将一些细节信息隐藏起来,对于外界不可见
this关键字:当方法的局部变量和类的成员变量重名时,根据就近原则,优先使用局部变量
这时候就可以用this.name指向当前对象的变量
构造函数:分为无参构造函数、全参构造函数,不设返回值
只有java.lang下的内容不需要导入
Scanner sc = new Scanner (System.in); //system.in表键盘输入
匿名对象每次都相当于是新建,适用于只需要使用一次的对象
字符串常量池:双引号直接写的字符串在常量池中,新建的不在,但同在堆中!
静态static关键字!
final关键字:1、修饰参数时,只允许被赋一次值,不能被修改;如果是方法成员参数,则是在生命周期内无法被改变!
2、修饰方法时,表示该方法不能被覆盖
3、修饰类时,表示该类无法被继承(2,3要谨慎使用)