九.类和对象(1) 对象的存储+构造方法+构造代码块+局部变量和成员变量比较

17.类和对象

类:对一切相似事物的统称,用来描述事物的特征和行为

对象:一个具体的实体,是真实存在的,是类的一个具现

举例: 人 是一个类 我 是一个具体的人,是一个对象

特征(属性):描述事物的一些属性,如人的身高,体重等,是静态的

行为(方法):是事物的一些动作,如吃饭,睡觉等,是动态的

17.1类的声明

class Person{
	//属性
	String name;
	int age;
	
	//方法
	public void eat(){
	System.out.println("今天吃花菜")}

}

17.2对象的创建

对象就是类衍生出来的一个实体,类相当于一个模子,对象就是模子造出来的东西

对象的意义:为了执行属性的赋值和方法的调用的

对象创建在main函数中,是为了在主函数中执行对象的代码

格式: 类名 对象名 = new 类名();

17.3创建的实体类和测试类在同一个文件中

  1. 实体类 : 正常定义的类

  2. 测试类: 包含main主函数的类,只有一个,用于调用各实体类生成对象,调用对象

  3. 一个文件中只能存在一个有public的类,当实体类和测试类在同一个文件中时,只有测试类能有public修饰

  4. 文件名字以测试类的类名来命名

package com.qfedu.a_class;

//注意事项:实体类和测试类写在同一个文件中的时候,实体类不能带public修饰符
class Pig {
	String name;
	double weight;//体重
	char sex;//性别
	
	public void eat () {
		System.out.println("猪吃白菜!!!");
	}
	public void sleep () {
		System.out.println("猪睡觉打呼噜");
	}
}
 class Demo3 {
	public static void main(String[] args) {
		//创建对象
		Pig pig = new Pig();
		pig.name = "大黄";
		pig.weight = 100.1;
		pig.sex = '公';
		System.out.println(pig.name + pig.weight + pig.sex);
		pig.eat();
		pig.sleep();
	}

}

17.4构造方法(构造器)

目的:为了初始化对象,可以对对象的属性进行赋值

​ 决定了怎么去new一个新类的对象的格式【重要】

  1. 对象创建其实是new的构造器
  2. 系统会自动创建一个默认的隐藏的无参构造器,当自己主动定义了构造器后,默认的构造器会消失[即定义了有参构造器后就不能再使用系统默认的无参构造器,可以手动再新建一个无参构造器]
17.4.1无参构造器

如果没有手动创建构造器,系统默认会创建一个

public 类名() {
    初始化条件;
}
package com.qfedu.b_constructor;

class Dog {
	String name;
	int age;
	public Dog () {
		System.out.println("嘻嘻哒");
		name = "大黄";
		age = 12;
	}
	
}
public class Demo2 {
	public static void main(String[] args) {
		//当new Dog()的时候就会去自动调用无参构造方法去执行无参构造方法中的方法体
		Dog dog = new Dog();
		dog.name = "旺财";
		dog.age = 3;
		//打印的是旺财和3 为啥没有打印大黄和12 因为无参构造先执行了
		//后面赋的值就会覆盖掉初始化的值
		System.out.println(dog.name);
		System.out.println(dog.age);
		
	}

}
17.4.2有参构造器
public 类名 (参数) {
	初始化条件;
}
class Cat {
	String name;
	String kind;
	int age;
	
	public Cat() {
		
	}
	//和下面的有参构造一模一样!!!
//	public Cat (String kind) {
//		this.kind = kind; 
//	}
	//声明一个有参构造方法
	public Cat (String name) {
		this.name = name;
	}
	//带有三个参数 构造方法
	public Cat (String name, String kind, int age) {
		this.name = name;
		this.age = age;
		this.kind = kind;
	}
	
	
}
public class Demo3 {

	public static void main(String[] args) {
		Cat cat = new Cat("狗蛋");
		
		System.out.println(cat.name);
		//new对象的时候依据构造方法来创建对象
		Cat cat1 = new Cat("毛蛋", "波斯", 3);
		System.out.println(cat1.name);
		System.out.println(cat1.age);
		System.out.println(cat1.kind);
		//一旦写了有参构造方法以后,默认的无参构造方法就没有了
		Cat cat2 =  new Cat();
		cat2.name = "Tom";
		cat2.age = 4;
		cat2.kind = "蓝猫";
	}
}

17.5对象在内存中的存储

栈:存的八大基本数据类型数据,对象的名称也存在栈中,内容是一个地址值,指向堆

堆:对象的全部数据
在这里插入图片描述

17.6构造代码块【了解】

开发中已经不用了

以后会讲静态代码块

格式:

{
	语句体
}

注意:

  1. 构造代码块要写在实体类中
  2. 构造代码块和构造器都是实例化一个对象时执行的,同时存在时,都会执行,构造代码块优先级高,先执行

17.7局部变量和成员变量

区别成员变量局部变量
定义位置类的大括号里(属性)方法体中,代码块内
作用描述对象特征存储数据
初始化值根据不同数据类型有默认值使用时必须赋值
内存堆中栈中
作用域整个类当前的方法中
权限修饰符可以用不能用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值