------<a target=_blank href="http://www.itheima.com" target="blank" se_prerender_url="complete">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
类
类的定义:
类是指一类事物,它们有类似的属性和行为。例如:宝马,奔驰是属于一个“车”的类,它们具有相同的属性如:名称,价钱,车的结构等;和相同的行为:能够在路上奔跑等等。
类的成员:
类中的成员一般分为成员变量和成员方法,其中还有一些代码块,静态代码块。
成员的修饰符:
Public:public使得被修饰的变量或者函数能够被除本类以外的类调用
Private:而private修饰的变量或者函数就不能
Protected:
Static:静态修饰符。
Static修饰的变量或者函数会优先于其他变量,函数加载。在类的内存分配中会提到。
类的使用方法:
定义好一个类之后,我们可以通过创建一个类的对象来对这个类的属性和方法进行配置和使用。例如:
class Page {
int num = 3;
String string=”EN”;
public show() {
System.out.println("纸张的数目:" + num);
System.out.println("纸张的字体:" + string);
}
public class Object_Oriented {
public static void main(String[] args) {
Page page1 = new Page();
}
}
类中内存的分配情况:
现在分析一下在创建一个类和对象后,内存是如何分配。
1.引用对象page1会在栈中分配到内存
2.对象Page在堆中分配到内存,而且Page中的成员变量也在堆中得到了内存。
3.堆为Page对象分配地址,将地址赋值给引用对象page1
4.page1指向0x1324地址
那么,如果在变量中出现修饰符static的时候,内存该如何分配。
Static的特点:
1.Static修饰的变量和方法是优先加载的。在类加载的时候加载
2.Static修饰的变量和方法可以用类名直接调用,而不需要对象。
3.Static修饰的变量和方法会在类的对象中共享使用。
Static的使用注意:static修饰的方法不能定义非静态的变量或者方法,因为static是相对类的对象之前加载到内存的。而所有的非静态方法和变量要基于类的对象下使用。这样,先到的方法处理后来的函数,变量是不合理的。
用static修饰int之后,int会在方法区中分配到内存,而在新建多个对象时候就不需要再加载int了,因为int作为共享变量,被多个对象一起使用,而对象特有的属性就加载到堆中配置。这样可以节省了内存空间。
类的对象实例化过程:
当一个类存在静态代码区和构造代码区的时候,对象的实例化过程是这样的:
1.加载类到内存中
2.静态代码区的初始化(只执行一次)
3.在堆中分配内存给对象
4.对象属性赋默认值
5.构造代码区初始化
6.构造函数赋值
7.在栈中分配内存给引用对象
8.引用对象指向对象的堆地址
类中需要注意的事项:
1.匿名对象调用类的方法有意义,调用类的非静态成员变量没有意思
2.类中的成员变量与局部变量不同,成员变量会自动初始化
3.类之中构造函数的调用用this(),而且要放在函数中的第一行
4.静态方法中不能够有非静态的变量或者函数
5.类变量(静态变量)与成员变量的区别:
i. 加载时间不同
1. 类变量在类加载的时候加载
2. 成员变量在创建对象时候加载
ii. 存储的位置不同
1. 类变量存储在方法区里面
2. 成员变量存储在堆里面
iii. 生命周期不同
1. 类变量直到类销毁时候消失
2. 成员变量在对象销毁时候消失