Java知识点
JDK、JRE、JVM
- JDK:JAVA 开发工具包,为了写程序
- JRE:java运行环境,包含java虚拟机(JVM)和Java程序所需的核心类库等
0.Java知识点
三条主线
1.类和类的结构
属性、方法、构造器,代码块、内部类
2.面向对象的三大特征
封装性、继承性、多态性
封装性:权限修饰符修饰类和类的内部结构,体现可见性的大小
继承性:
多态性:
3.关键字
先有类,后有对象。
1.关于this
1.this可以用来修饰:属性、方法、构造器
2.this:当前对象this.age(当前对象加点(.))对象后面不是属性就是方法 对象.(属性 or 方法)
3.属性和方法都是类中的,对象调用属性或者方法
形参和属性同名,会有就近原则
- 属性和形参不同名的时候:属性和形参可以区分开
- 属性和形参同名时:
会有就近原则
把age赋给了自己,与属性age无关
this详解
2.int和integer的关系
摩尔投票法
3.RAM和ROM
两者都是存储器。断电时,RAM的数据小事,ROM可以保持;RAM的速度比ROM快
RAM通常作为操作系统或其他正在运行程序的临时存储介质(也可以称作为系统内存),可以在任何时候读写,但是当电源关闭时RAM不能保留数据,如果需要保存数据,则需要把数据写入到长期存储器中,即硬盘。
ROM相当于PC机上的硬盘,用来存储和保存数据,不能随意更新,但是在任何时候都可以读取。
4.JAVA在程序运行时的内存分配(对象的内存解析)
链接: 参考.
java程序在运行时,在内存(ROM)中划分5片空间进行数据的存储,分别是1:寄存器。2:本地方法区。3:方法区。4:栈。5:堆。
最重要的是堆和栈
堆:是运行时的数据区,类的对象从堆中分配空间。通过new等指令建立,通过垃圾回收器来销毁。优势在于可以动态的分配内存空间,需要多少内存空间不必事先告诉编译器,因为在运行时是动态分配的。但是缺点是,由于需要在运行时动态分配内存,所以存取速度较慢。
栈:存放一些基本数据类型的变量(byte,short,int,long,float,double,boolean,char)和对象的引用
栈:主要存放局部变量,定义在方法中的
堆:主要存放对象实例,new出来的(包括类对象以及数组对象,字符串对象这种),真实的创建对象的实体都在堆对象中
方法区:加载的类信息,常量,静态变量
代码解析:
第一行:new了一个对象,new的对象实体都存储在堆中,对象实体有一个首地址值(十六进制表示 ),然后通过“等号=”操作将右边数据赋值到左边(赋过来的是一个地址),p1实际上是定义在main方法中的,是一个局部变量,存储在栈中。类中有三个属性,属性存储在堆空间中,在造好的对象中,属性有值(没有赋值的即为默认值)
第四行:new了一个对象,重新在堆空间中造了一个对象,包括实体和首地址值。将地址值赋给栈空间中的p2(p2是定义在main方法中的,是一个局部变量,在栈中),通过地址值,栈空间中的p2对象指向堆空间中的person实体
第五行:p3是p1赋值的地址值,p1存储的是什么,就传什么值,p1存储的是地址值,所以传给p3的也是地址值,顺着地址值找到了堆空间中的结构,p3不是新创建的对象,是新声明的变量,p1和p3指向堆空间中的同一个对象实体,p3将age属性修改之后,如果p1再去调用age属性,属性值也改变了,因为是同一个对象实体。
如果创建了一个类的多个对象,多个对象是独立的拥有一套类的属性
5.变量
局部变量:在方法中的变量都是局部变量,没有默认值(所以需要提前定义好),存储在栈中
成员变量(也叫属性)field:在类中,方法之外,有默认值,存储在堆中
静态变量:在方法区中
相同点:
1.定义变量的格式:数据类型 变量名 = 变量值
2.先声明,后使用
3.变量都有其对应的作用域
不同点:
1.在类中声明的位置不同(变量的声明:前面带一个类型的:String food)
- 属性(成员变量):直接定义在类的一对{}内
有默认值,存储在堆中。 - 局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量 - 形参
2.关于权限修饰符的不同
- 属性:可以在声明属性时,指明其权限,使用权限修饰符
- 常用的权限修饰符:private、public、缺省、protected;(没有写的就表示缺省),权限表示被调用时候的可见性。
- 局部变量:不可以使用权限修饰符
3默认初始化值的情况 - 属性:类的属性,根据其类型,都有默认初始化值。
整型(byte、short、int、long):0
浮点型(float、double):0.0
字符型(char):0
布尔型(boolean):false
引用数据类型(类、数组、接口):null - 局部变量:没有默认初始化值:意味着局部变量在调用前需要被初始化赋值——显式赋值(烙饼删掉会报错)
特别的:形参在调用时,我们赋值即可
形参调用
4.在内存中加载的位置:
属性:加载到堆空间中(非static的)
局部变量:加载到栈空间
属性:存储在堆空间中,在造好的对象里面
属性:类成员变量不全都是属性,只有能够访问到的成员变量才是属性,也就是成员变量必须有set和get方法,一般来说,set/get方法名,去掉set/get后,将剩余部分首字母小写得到的字符串就是这个类的属性。
1.属性的名字不是由成员变量决定的。通常set方法和get方法的名字是set或者get加上成员变量的名字,成员变量的首字母要变成大写。而属性的名字就是去掉set或者get,然后把首字母变成小写。从这两个命名规则可以看出,通常属性名与成员变量的名字是一致的。但是,如果在写set方法和get方法的时候,没有按照默认的规则写,则属性名字和成员变量名字就一样了
6.形参实参
形参:意义是给属性赋值,是一个标识符。
7.类的结构
- 属性
- 方法
- 构造器:作用是创造对象,如果没有显式的定义类的构造器的话,则系统默认提供一个空参的构造器;定义构造器的格式:权限修饰符 类名(形参列表){};初始化对象;一个类中可以定义多个构造器,彼此构成重载;一旦显式的定义了类的构造器之后,系统就不再提供默认的空参构造器。
Person p = new Person();
//Person()是一个构造器,空参构造器
//在类中class Person
public Person(String n){
name = n;
}
8.javabean的使用
定义:是一种Java语言写成的可重用组件(1)类是公共的(2)有一个无参的公共的构造器,方便造对象(3)有属性,且有对应的get、set方法
public class Customer{
private int id;
private String name;
//提供一个空参构造器,反射的方式造对象
public Customer(){
}
public void setId(int i){
id = i;
}
public int getId(){
return id;
}
public void setName(String n){
name = n;
}
public String getName(){
return name;
}
collection接口
List接口
- ArrayList
- LinkedList
- Vector
set接口:存储无序的、不可重复的数据,没有额外定义新的方法,使用的都是collection中声明过的方法。
无序性不等于随机性。
- HashSet:作为set接口的主要实现类
- LinkedHashSet:
- TreeSet
包括方法:
add()方法
Map接口
与collection并列
1. 数据类型
整数类型
- 声明long型变量,必须以l或者L结尾
- 常用int
浮点类型 - 常默认为double型
- 声明float型常量,需要加f或F
- float表示数值的范围比long还大
字符型 - 一个字符是2个字节
- 用一对单引号
- 字符内部只能写一个字符