赞
踩
目录
说明:模板(类)可以设定参数(成员:属性和方法)==> 生成实体(对象)==> 传递参数 ==> 访问实体,调用参数。
举例:手机图纸(类)可以设定尺寸和功能 ==> 生成华为手机(对象)==> 尺寸为12寸,智能识别功能 ==> 查看华为手机的说明,就能知道尺寸为12 和 智能识别功能。
结论:类就是模板,对象就是通过模板而生成的
类就是数据类型,对象就是变量名
对象的 = 号 右侧的赋值 | 变量的 = 号 右侧的赋值 |
---|---|
创建对象[new](类似赋值常量值) | 常量 |
对象名(类似赋值) | 变量(同类型 or 可转型) |
创建方式:[访问修饰符] class 类名 { }
代码说明:类的创建细节
- class Cat{ } //类可以创建在任何类的上方 or 下方,不影响参数传递
-
- public class Demo { } //源文件只能存在(一个)public 和 (多个)默认
-
- public class Fish{ } //这样会报错(只能有一个public)
-
- class Dog{ }
创建对象的常用说法:创建对象;创建实例化;实例化对象
直接创建:类名 对象 = new 类名();
先声明,后使用:类名 对象 ;对象 = new 类名();
匿名对象:new 类名();
代码说明:对象在类中作为成员创建,实际上是属性
- class Test {
- // ★ 细节:在类中可以直接创建对象,看似对象实际上是属性
- // ★ 注意:只有直接创建的方式可以在类中创建
- static Test a = new Test(); //可以创建自身的类对象
- Demo b = new Demo(); //可以创建非自身的类对象
- }
-
- public class Demo {
- /* ★ 在main(有static)方法中调用在类中直接创建的对象(属性)的要求 ==> 由a说明
- * 1、对象(属性)必须带有 static 的关键字
- * 2、在方法内直接用静态调用方式
- * */
- public static void main(String[] args) {
- System.out.println(Test.a); //静态调用方式:类名.对象名【实际上是调用属性】
-
- }
-
- /* ★ 在(非static)方法中调用在类中直接创建的对象(属性)的要求 ==> 由b说明
- * 1、对象(属性)不能带有 static 的关键字
- * 2、在方法内必须创建对象后,才能代用
- * */
- public void mthod() {
- Test test = new Test();
- System.out.println(test.b);
- }
- }

代码说明:对象通常创建在main方法中 or 非属性成员的成员中,此处以main方法举例
代码说明:普通对象和匿名对象的使用区别
- class Test{
- int num = 0;
- public void funt(){
- System.out.println(++num); //每次执行方法,输出自增num
- }
- }
-
- public class Demo {
- public static void main(String[] args) {
-
- // ★ 结论:匿名对象,每次执行都算是第一次执行,不保存数据
-
- //普通对象:执行会存储值
- Test test = new Test();
- test.funt(); //1
- test.funt(); //2
-
- //匿名对象:执行时不会存储值
- new Test().funt(); //1
- new Test().funt(); //1
- }
- }

JVM的内存由栈空间、堆空间、方法区(元空间)组成
- 栈空间:放置引用、方法栈等,利用引用指向堆中地址
- 堆空间:放置数据的地址
- 方法区:放置真实数据(实际值)
在JDK1.8后,方法区从堆空间中剥离出来,并将原来的方法区变成元空间,堆空间存放地址,元空间内有存放实际值,指向堆空间的地址(方法区变成元空间,用于存放实际值和加载类信息)
创建类与对象后,运行时在JVM的内存机制流程图
流程分析
代码实现
- public class Demo {
- public static void main(String[] args) { //<== 调试点
- //创建对象
- Cat cat = new Cat();
- System.out.println(cat); //空间地址:Cat@16b98e56
-
- System.out.println(cat.name); //输出默认值:小白(在Cat@493:Cat.name = "小白”)
- System.out.println(cat.color); /* 注意:必须通过调用才能得知*/
-
- //对象Cat的属性值
- cat.name = "小花";
- cat.age = 12;
- cat.color = "花色";
- System.out.println(cat.name + " " + cat.age + " " + cat.color);
- }
- }
-
- class Cat{ //当创建对象运行时,类只会加载一次
- String name = "小白"; //初始化
- int age; //未初始化,则值为默认值
- String color;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。