首页 > 其他 > 详细

类与对象的全面细节

时间:2021-05-18 23:06:24      阅读:23      评论:0      收藏:0      [点我收藏+]

类与对象 全面细节

类声明的变量被称为 对象

类包括两点 变量 (体现对象的属性) 和 方法(方法可以对类给出的变量进行操作,即算法)

变量

实例变量,类变量,局部变量

实例变量即定义在类中的8种基本类型变量 int x char y double z ( new对象之后 实例变量才会被分配内存存储 实例变量才会被默认初始值 0 null 0.0)

类变量 关键字 static int(char)(double) 变量名

( 这里引申一下 标识符 命名规则 标识符由 数字 字母 下划线 美元符组成 数字不能是第一位)

类变量 在类加载到内存中 便会存储 但实例变量是不会存储的直到有第一个对象的建立才会加载。

小结 1.不同对象的实例变量互不相同互不干涉(存储地址不同),

       2. 所有对象共享类变量(加载类时 类变量便被安排空间存储,所以多个对象共用类变量,其中一个对象改变类变量的值,其他对象的类变量值也改变)                      // static  x=0;
        3. 通过类名直接访问 类变量     students.x;   无需new对象;
        4. 该类没有创建对象,那么该类的实例变量不会被分配内存 也就是说我们只是写出逻辑结构 内存没用写入

局部变量 在方法内部定义的变量 作用域只能在方法内部 (局部变量没有默认值,如需运算 需给局部变量赋值)

构造方法

构造方法必须与它所在的类的类名相同 students(){}; // 构造方法没有类型 任何有类型的同名方法都不能称为构造方法

如果类中没有编写构造方法,那么程序会默认一个构造方法

可以自定义一个构造方法 但如果你定义了自己的构造方法 还想使用默认构造方法 那就需要声明出来

如果类中定义了一个或者多个构造方法 ,那么java不提供默认的构造方法,在该情况下 使用 class students = new students(); 默认构造方法是违法的

用类声明的变量称为对象 当程序创建对象的时候 需要使用类的构造方法 class students = new students();

创建对象

使用 new运算符 和构造方法为声明的对象分配变量,即创建对象 class students = new students();

new students() 两个作用

1.为各个成员变量分配内存 并且默认初始值

2.new计算出索引 进行赋值给对象 (new students();值是一个索引 也就是地址)

当只声明对象 而不定义 class students; 那students只是个空对象 (运行会报错)

重要结论 一个类声明的两个对象如果有相同的索引 那么二者就具有完全相同的变量

students A,B;

A B两者有不同的索引 所以二者各有各自的实例变量(尽管实例变量相同 但存放地址不同,所以互不干涉)

简而言之 不同对象的实例变量互不相同 —— 分配给 不同对象的实例变量占有不同的内存空间,改变其中一个对象的实例变量不会影响其他对象的实例变量。

但 当 进行赋值的时候如 A=B; A便得到B的索引 所以二者就具有完全相同的变量 改变A中变量的值,B对应的变量的值也改变。

也就是说 如果对象的类型相同 ,那么也可以进行赋值运算。


有实例变量和类变量之区分 那么也有实例方法和类方法的区分

1.

int a(){ }; // 实例方法

static int b(){}; // 类方法 static 写在返回类型前

2.

当类的字节码文件加载到内存中时,类的实例方法不会被分配入口地址,只有该类声明定义一个对象时,类中的实例方法才会被分配地址。 注意 当我们创建第一个对象时,类中的实例方法被分配地址,当再创建对象时,实例方法不再分配地址,也就是说 实例方法地址是被所有对象共享的(类变量是被对象共享的,这个实例方法的地址也是)(实例方法,也称函数,函数名就是地址。这样就好理解了)

3.

同理类变量 类方法当类被加载时就已经分配好入口地址了。 类方法不仅可以被定义的所有对象使用,也可以直接通过类名调用。

再次强调注意 实例方法不能通过类名调用,只能通过对象调用。

4.

和实例方法不同的是,类方法不可以操作实例变量,这是因为在类创建对象之前,实例变量还没有分配内存 这也是类方法中不能用this的原因。



类与对象的全面细节

原文:https://www.cnblogs.com/nieyejun/p/14782509.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!