【Java学习笔记12】面向对象Part Ⅱ:Java语言的基本元素——类和对象

一、类和对象的概念

类(Class)对象(Object) 是面向对象的核心概念。

类是对一类事物的描述,是抽象的、概念上的定义。

对象是实际存在的该类事物的每个个体,因而也称为实例(instance)。

可以理解为:类 = 抽象概念的人;对象 = 实实在在的某个人 ;面向对象程序设计的重点是类的设计,而类的设计,其实就是类的成员的设计

万事万物皆对象的理解:

  1. 在Java语言范畴中,我们都将功能、结构等封装到类中,通过类的实例化,来调用具体的功能结构
  2. 涉及到Java语言与前端Html、后端的数据库交互时,前后端的结构在Java层面交互时,都体现为类、对象。

二、Java类及类成员

现实世界的生物体,大到鲸鱼,小到蚂蚁,都是由最基本的细胞构成的。同理,Java代码世界是由诸多个不同功能的类构成的。常见的类的成员有:

  • 属性(filed,又称为成员变量、域、字段)
  • 方法(method,又称为成员方法、函数)

三、类和对象的创建

3.1 Java自定义类的创建

语法格式:

修饰符 class 类名 {
    属性声明;
    方法声明;
}

创建Java自定义类的步骤:

  1. 定义类(考虑修饰符、类名)
  2. 编写类的属性(考虑修饰符、属性类型、属性名、初始化值)
  3. 编写类的方法(考虑修饰符、返回值类型、方法名、形参等)

代码范例:

//1.定义类(考虑修饰符、类名) 
class Person{
	
	//2.编写类的属性(考虑修饰符、属性类型、属性名、初始化值) 
	String name;
	int age = 1;
	boolean isMale;
	
	//3.编写类的方法(考虑修饰符、返回值类型、方法名、形参等)
	public void eat(){
		System.out.println("人可以吃饭");
	}
	
	public void sleep(){
		System.out.println("人可以睡觉");
	}
	
	public void talk(String language){
		System.out.println("人可以说话,使用的是:" + language);
	}
	
}

3.2 对象的创建和使用

如果想要使用2.3.1节中创建的类,首先需要将2.3.1中的类实例化,也即创建类的对象。实例化完成以后,才能访问其成员。

创建对象语法格式:

类名 对象名 = new 类名(); 

访问对象成员(包括属性和方法)语法格式:

对象名.对象成员;

代码范例:

public class PersonTest {
	public static void main(String[] args) {
		//创建Person类的对象
		Person p1 = new Person();
		//Scanner scanner = new Scanner(System.in);
		
		//调用对象的结构:属性、方法
		//调用属性:“对象.属性”
		p1.name = "Tom";
		p1.isMale = true;
		System.out.println(p1.name);
		
		//调用方法:“对象.方法”
		p1.eat();
		p1.sleep();
		p1.talk("Chinese");
	}
}

如果创建了一个类的多个对象,对于类中定义的属性,每个对象都拥有独立的一套副本属性(非static的)且互不干扰,意味着:如果我们修改一个对象的属性a,则不影响另外一个对象属性a的值。上述代码新创建一个p2对象:

		Person p2 = new Person();
		System.out.println(p2.name);//null
		System.out.println(p2.isMale);//false

		//将p1变量保存的对象地址值赋给p3,导致p1和p3指向了堆空间中的同一个对象实体。
		Person p3 = p1;
		System.out.println(p3.name);//Tom
		p3.age = 10;
		System.out.println(p1.age);//10

类的访问机制:

  • 在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。 (例外:static方法访问非static,编译不通过。)
  • 在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中定义的成员。

四、对象的内存解析

对于以下代码:

class Car{
    String color = "red";
    int num = 4;
    void show(){
        System.out.println("color="+color+"..num="+num);
    }
}
class CarTest {
    public static void main(String[] args) {
        //①
        Car c1 = new Car(); //建立对象c1
        Car c2 = new Car(); //建立对象c2
        //②
        c1.color = "blue"; //对对象的属性进行修改
        c1.show(); //使用对象的方法
        c2.show();
    } 
}

①时内存状态:

在这里插入图片描述
②时内存状态:

在这里插入图片描述
说明:

  • 引用类型的变量,只可能存储两类值:null 或 地址值(含变量的类型)。
  • 字符串常量其实是存放在字符串常量池中,此处做简单处理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值