java学习第二十五天

本文深入探讨了Java中的类与对象的概念,通过实例展示了如何创建和使用对象,包括对象在内存中的表示、属性的定义和访问、以及对象的内存分配机制。强调了面向对象编程在数据管理中的优势,并提供了编译错误的解决示例。同时,分析了对象的赋值行为及其对内存的影响,帮助读者理解Java内存结构和对象生命周期。
摘要由CSDN通过智能技术生成

目录

目录

类与对象

一、引出

二、概述和快速入门

类与对象关系示意图

例子

 编译错误记录

三、对象在内存中的存在形式

四、属性/成员变量的注意事项和细节说明

五、如何创建对象

六、如何访问属性

七、类和对象的内存分配机制(重要)​

java内存的结构分析

八、创建对象流程分析

九、对象机制练习



类与对象

一、引出

用现有知识解决养猫问题

缺点:不利于数据管理,效率低

引出新技术

二、概述和快速入门

类与对象关系示意图

类:把所有猫的属性提取出来形成一个类

int是java提供的数据类型

类也是数据类型,是我们自定义的数据类型

例子

public class Object01{
	//编写一个mian方法
	public static void main(String[] args){
		/*
		张老太养了两只猫猫:一只名字叫小白,今年 3 岁,白色。
		 还有一只叫小花,今年 100 岁,花色。 请编写一个程序,
		  当用户输入小猫的名字时, 就显示该猫的名字, 年龄, 颜色。
		   如果用户输入的小猫名错误, 则显示 张老太没有这只猫猫。
		 */
		
		//使用OOP面向对象解决
		//实例化一直猫【创建一只猫对象】
		//new Cat()  创建一只猫
		//Cat cat1 = new Cat();把创建的猫赋给cat1
		Cat cat1 = new Cat();
		//Scanne myScanner = new Scanner(System.in);与上述语句类似
		cat1.name = "小白";
		cat1.age = 3;
		cat1.color = "白色";
		cat1.weight = 4;

		//创建第2只猫
		Cat cat2 = new Cat();
		cat2.name = "小花";
		cat2.age = 100;
		cat2.color = "花色";
		cat2.weight = 5;

		//怎么访问对象的属性
		System.out.println("第一只猫信息" + cat1.name + " " + cat1.age + " " 
			+ cat1.color + " " + cat1.weight);
		System.out.println("第一只猫信息" + cat2.name + " " + cat2.age + " "
			+ cat2.color + " " + cat2.weight);
	}
}


//使用面向对象的方式解决养猫问题
//定义一个猫类 Cat->自定义的数据类型
class Cat{
	//属性
	String name;//名字
	int age;//年龄
	String color;//颜色
	double weight;//体重


}

通过以上代码可以得出:

1) 类是抽象的, 概念的, 代表一类事物,比如人类,猫类.., 即它是数据类型.
2) 对象是具体的, 实际的, 代表一个具体事物, 即 是实例.
3) 类是对象的模板, 对象是类的一个个体, 对应一个实例

 编译错误记录

文件object01.java,编译时提示 错误: 需要 class、interface、enum 或 record
public calss Object02{

原因:public class 打错,打成public calss

三、对象在内存中的存在形式

String是引用数据类型,根据jvm的规则,其数据默认被保存在方法区的常量池中

四、属性/成员变量的注意事项和细节说明

1) 属性的定义语法同变量, 示例: 访问修饰符 属性类型 属性名;
       访问修饰符: 控制属性的访问范围
有四种访问修饰符 public, proctected, 默认, private 

2) 属性的定义类型可以为任意类型, 包含基本类型或引用类型(数组,对象)
3)默认值:遵守数组规则 int 0, short 0, byte 0, long 0, //整数型都是0

                      float 0.0,double 0.0,//浮点型是0.0

                      char \u0000, boolean false, String null

代码说明:

public class PropertiesDetail{
	//编写一个main方法
	public static void main(String[] args){
		//创建一个Person对象
		person1是对象名,
		//new Person()创建的对象空间(数据)才是真正的对象
		Person p1 = new Person();
		//对象的属性默认值,同数组
		System.out.println("\n当前这个人的信息");

		System.out.println("age=" + p1.age + " name=" + p1.name + " sal=" + p1.sal 
							+ " gender=" + p1.gender +" isPass=" + p1.isPass);

	}
}
class Person{
	int age;
	String name;
	double sal;
	char gender;
	boolean isPass;
}

关键知识点:
  p1 是对象名(对象引用)  类比:人名

new Person() 创建的对象空间(数据) 才是真正的对象 类比:这个人本身


五、如何创建对象

1) 先声明再创建
Cat cat ; //声明对象 cat
cat = new Cat(); //创建
2) 直接创建
Cat cat = new Cat();


六、如何访问属性

对象名.属性名;
cat.name ;
cat.age;
cat.color;


七、类和对象的内存分配机制(重要)

 对象的赋值也是引用赋值,赋的是地址(类似数组)

只要是数据空间一定会有一个地址


java内存的结构分析

1) 栈: 一般存放基本数据类型(局部变量)
2) 堆: 存放对象(比如Cat cat, 数组等)
3) 方法区: 常量池(常量, 比如字符串), 类加载信息(属性信息、方法信息)

八、创建对象流程分析

一、在方法区加载类信息(属性信息/方法信息),只加载一次

二、 在堆中分配新空间,默认p.name为null,p.age为0

三、把地址赋给p,p就指向对象

四、对象属性的指定初始化0→10;null→jack

九、对象机制练习

 

public class Object04{
	//编写一个main方法
	public static void main(String[] args){
		Person a = new Person();
		a.age = 10;
		a.name = "小明";
		Person b;
		b = a;
		System.out.println(b.name);
		b.age = 200;
		b = null;
			System.out.println(a.age);
			System.out.println(b.age);
	}
}
class Person{
	int age;//属性或者成员变量或者field(字段)
	String name;
}

        输出结果

 内存分析

 总结:1)由于对象是引用赋值,所以当执行b=a时,b和a指向同一地址,因此任何一方变化都会影响另一方

        2)当b = null时,就表示b是一个空值,不指向任何地址,所以编译后输出会报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值