Java学习笔记11_类与对象详解(二)_20200407

本文深入探讨了Java中对象作为方法参数的传递机制,通过多个示例解释了对象的引用和复制过程。同时,详细讲解了Java中引用类型的数据初始化,包括默认值的概念。此外,还介绍了对象初始化的多种方式,如变量声明时初始化、使用构造器、代码块等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第11章 类与对象详解(二)

06 对象作为方法参数

11.6.01 例一


  1. 在这里插入图片描述
    1 ) person类
public class Cat {
	private String name;
	private int age;
	
	//构造器的快捷键Alt +Shift + s
	public Cat(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
		
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}

在这里插入图片描述
2 )

public class Day096 {
	public static void modify1(Cat c) {
		c.setAge(3);
	}
		
	public static void main(String[] args) {
		Cat c = new Cat("mm",2);
		System.out.println(c.getAge()); //2
		modify1(c);//将c的值(c引用的对象的地址)拷贝给形式参数c
		System.out.println(c.getAge());//3
		
	}
}

在这里插入图片描述

11.6.02 例二

在这里插入图片描述

  1. Person类
public class Cat {
	private String name;
	private int age;
	
	//构造器的快捷键Alt +Shift + s
	public Cat(String name, int age) {
		//super();
		this.name = name;
		this.age = age;
	}
		
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}

在这里插入图片描述
2 ) 主方法

public class Day096 {
	public static void modify1(Cat c) {
		c.setAge(3);
	}
	
	public static void modify2(Cat c) {
		c = new Cat("nn",5);
	}
		
	public static void main(String[] args) {
		//c是对象变量,它引用对象
		Cat c = new Cat("mm",2);
		System.out.println(c.getAge()); //2
		//将实际参数c的值(c引用的对象的地址)拷贝给形式参数c
		//这样实际参数c和形式参数c引用同一个对象		
//		modify1(c);//将c的值(c引用的对象的地址)拷贝给形式参数c
//		System.out.println(c.getAge());//3
		modify2(c);
		System.out.println(c.getName());//mm   调用这个对象的getName方法
		System.out.println(c.getAge());//2
	}
}

在这里插入图片描述

例3

1 ) Person类

public class Cat {
	private String name;
	private int age;
	
	//构造器的快捷键Alt +Shift + s
	public Cat(String name, int age) {
		//super();
		this.name = name;
		this.age = age;
	}
		
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}

2在这里插入图片描述

2 ) 主方法

public class Day096 {
	public static void modify1(Cat c) {
		c.setAge(3);
	}
	
	public static void modify2(Cat c) {	
		c = new Cat("nn",5);
		System.out.println(c.getName());//nn
		System.out.println(c.getAge());//5
	}
		
	public static void main(String[] args) {
		//c是对象变量,它引用对象
		Cat c = new Cat("mm",2);
//		System.out.println(c.getAge()); //2
		//将实际参数c的值(c引用的对象的地址)拷贝给形式参数c
		//这样实际参数c和形式参数c引用同一个对象		
//		modify1(c);//将c的值(c引用的对象的地址)拷贝给形式参数c
//		System.out.println(c.getAge());//3
		modify2(c);
		System.out.println(c.getName());//mm   调用这个对象的getName方法
		System.out.println(c.getAge());//2
				
	}
}

在这里插入图片描述

07 引用类型的初始值(默认值)


1) 创建Bar方法

public class Bar {
	//基本类型
	byte b;
	short s;
	char c;
	int i;
	long l;
	float f;
	double d;
	boolean bool;
	//引用类型
	String str;
	int[] arr;
}

在这里插入图片描述
2) 创建主方法


public class Day097 {
	public static void main(String[] args) {
		int a;
//		System.out.println(a);//编译错误
		
		
		Bar bar = new Bar();
		System.out.println(bar.b);//0
		System.out.println(bar.s);//0
		System.out.println(bar.c);//空
		System.out.println(bar.i);//0
		System.out.println(bar.l);/0
		System.out.println(bar.f);//0.0
		System.out.println(bar.d);//0.0
		System.out.println(bar.bool);//false
		//引用类型的默认值都是null
		System.out.println(bar.str);//null
		System.out.println(bar.arr);//null
		
	}

}

在这里插入图片描述

tips:
复默认界面
Windows–>Perspective–> Reset Perspective

08 对象初始化

java中对象的初始化有三种方式:
在变量声明时初始化,使用构造器,使用非静态代码块;

在变量声明时初始化(例一)

1)创建Coo类

public class Coo {
	private String name = setDefaultName(); //声明变量的时候赋值
	private int age = 20; //声明变量的时候赋值
//	public static int COUNT;
	
	private String setDefaultName() {
		System.out.println("setDefaultName()被调用");
		return "defaultName";
		
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
			
}

在这里插入图片描述
2 ) 创建主类

public class Day098 {
	public static void main(String[] args) {
		Coo c = new Coo();
		System.out.println(c.getName());
		System.out.println(c.getAge());
	}
}

在这里插入图片描述

使用构造器(例二)

1 ) 使用构造器
在Coo类中,添加使用构造器(Alt + Shift + s -->选择Generate Constructor using Fields )
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
2)主类

public class Day098 {
	public static void main(String[] args) {
		Coo c = new Coo("张三",21);
		System.out.println(c.getName());
		System.out.println(c.getAge());
	}
}

在这里插入图片描述

使用代码块(例三)

1)

public class Coo {
	private String name = setDefaultName(); //声明变量的时候赋值
	private int age = 0; //声明变量的时候赋值
//	public static int COUNT;
	
	private String setDefaultName() {
		System.out.println("setDefaultName()被调用");
		return "defaultName";		
	}
	
	
	public Coo(String name, int age) {
		System.out.println("Coo构造被调用");
		this.name = name;
		this.age = age;
	}
	
	{
		System.out.println("代码块执行");
		name = "李四";
		age = 22;
	}
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
			
}

在这里插入图片描述

2 ) 主类

public class Day098 {
	public static void main(String[] args) {
		Coo c = new Coo("张三",21);
		System.out.println(c.getName());
		System.out.println(c.getAge());
	}
}

在这里插入图片描述

使用非静态代码块(例四)

1 ) Coo类

public class Coo {
	private String name = setDefaultName(); //声明变量的时候赋值
	private int age = 0; //声明变量的时候赋值
//	public static int COUNT;
	
	private String setDefaultName() {
		System.out.println("setDefaultName()被调用");
		return "defaultName";		
	}
	
	
	public Coo(String name, int age) {
		System.out.println("Coo构造被调用");
		this.name = name;
		this.age = age;
	}
	
	{
		System.out.println("代码块执行");
		name = "aa";
		age = 18;
	}
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
			
}

在这里插入图片描述
2 ) 主类

public class Day098 {
	public static void main(String[] args) {
		Coo c1 = new Coo("张三",21);
		System.out.println(c1.getName());
		System.out.println(c1.getAge());
		
		Coo c2 = new Coo("李四",22);
		System.out.println(c2.getName());
		System.out.println(c2.getAge());
	}
}

在这里插入图片描述

使用静态代码块(例五)

1 )


public class Coo {
	private String name = setDefaultName(); //声明变量的时候赋值
	private int age = 0; //声明变量的时候赋值
	
	//类变量
	public static int COUNT;
	
	private String setDefaultName() {
		System.out.println("setDefaultName()被调用");
		return "defaultName";		
	}
		
	public Coo(String name, int age) {
		System.out.println("Coo构造被调用");
		this.name = name;
		this.age = age;
	}
		
	//非静态代码块
	//非静态代码块在创建对象的时候执行
	//非静态代码块用来初始化实例字段
	{
		System.out.println("代码块执行");
		name = "aa";
		age = 18;
	}
	
	//静态代码块
	//静态代码块在类被加载时执行
	//每个类只被加载一次,因此静态代码块只执行一次
	//静态代码块用来初始化静态字段
	//不能访问实例字段
	static{
		System.out.println("静态代码块");
	}
		
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
			
}

在这里插入图片描述

2 )
在这里插入图片描述


***tips:

------import
ctrl + shift + o

------open type
ctrl+shift+T

------Alt + Shift + s -->选择Generate Constructor using Fields 使用字段生成构造

------Alt + Shift + s --> 选择Generate Getters and Setters(get/set)

------显示程序运行窗口 Windows->show View->console

------默认的运行窗口
Prolems/javadoc/Declaration/Console

------还原默认界面
Windows–>Perspective–> Reset Perspective


练习

  1. 定义一个Person类,有4个属性,String name,int age,String school,char gender。
    进行数据封装,并对setter的参数进行验证。
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package com.day10;

class Person{
	private String name;
	private int age;
	private String school;
	private char gender;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		if(age <= 0 || age > 120 ){
			System.out.println("非法的年龄");
		}else{
			this.age = age;
		}
	}
	public String getSchool() {
		return school;
	}
	public void setSchool(String school) {
		this.school = school;
	}
	public char getGender() {
		return gender;
	}
	public void setGender(char gender) {
		if(gender == '男' || gender == '女' ) {
			this.gender = gender;
		}else{
			System.out.println("非法的性别");
		}
	}
	
	
}
public class Day101 {
	public static void main(String[] args){
		Person p  = new Person();
		p.setAge(20);
		p.setName("小华");
		p.setSchool("清华");
		p.setGender('女');
		System.out.println(p.getAge());
	}

}

  1. 编写一个类Triangle,有2个属性,边长base和高height,进行数据封装,
    编写一个TriangleManager类,
    定义一个方法public static void getArea(Triangle t)计算三角形的面积,定义主方法测试运行。
package com.day10;

public class TriangleManager {
	public static double getArea(Triangle t) {
		return t.getBase() * t.getHeight() / 2;
	}
	
	public static void main(String[] args) {
		Triangle t = new Triangle(10, 20);
		System.out.println(getArea(t));
	}

}

class Triangle {
	private int base;
	private int height;
	
	///ALt + Shift + s, 生成getter和setter方法
	public int getBase() {
		return base;
	}


	public void setBase(int base) {
		this.base = base;
	}


	public int getHeight() {
		return height;
	}


	public void setHeight(int height) {
		this.height = height;
	}

	//ALt + Shift + s, 生成构造器
	public Triangle(int base, int height) {
		this.base = base;
		this.height = height;
	}
	
	
}

在这里插入图片描述


***tips
1) 怎么改class的名字
选中,单右–> Refactor -->Rename
如图:
在这里插入图片描述

2)
去掉void,即可。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值