【JAVA杂货铺】一文带你走进面向对象编程|构造方法调用 | 代码块分类| 期末复习系列 | (中3)

🌈个人主页: Aileen_0v0
🔥系列专栏:Java学习系列专栏
💫个人格言:”没有罗马,那就自己创造罗马~”

回顾

上次,我们学习了关于Java面向对象编程的构造方法,以及关键字this在构造方法/实例化对象中的使用,若有遗忘点击👉🔗http://t.csdnimg.cn/WV7pH

本节我们`来学习,代码块,tostring以及继承 

那还等什么,直接进入主题吧~

如何调用构造方法:

 通过构造对象进行构造方法的调用,对应自己想调用的构造方法,看构造方法的参数个数进行传参.

上面main函数利用创建的对象person1调用的是无参构造方法

代码块 

代码块分类

package lecture1;


class Person{
	private String name;
	private int age;
	private static int count;
	
	//构造方法 - 总是和类名相同,且无返回值
	//当没有构造方法的时候,编译器会自动提供一个,不带参数的构造方法
	//构造方法作用:实例化一个对象
	//构造方法1:
	public Person() {
		//this("🐖🐖",1);
		System.out.println("Person<init>");
		//this("林🐖🐖");

	}

	
	//构造方法2:
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
		System.out.println("Person<String,int>");
	}
	

	
	{
//		this.name = "zhangfei";
//		count = 99;
		System.out.println("实例代码块......作用:访问普通成员变量");
	}
	
	static{
//		this.name = "zhangfei";//牢记:静态不能访问非静态的数据成员
//		count = 99;
		System.out.println("静态代码块......");
	}

	
	public static void func() {
		count = 99;
//		this.name = "caocao";
	}
	
	//构造方法3:
	public Person(String name) {
		
	}
	
	public void eat() {
		System.out.println(this.getName());
		System.out.println(this.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;
	}
	
	//@Override
	public String toString() {
		return "Person{" +
				"name='" + name + '\'' +
				",age="  + age +
				"}";
	}
}
public class TestDemo {
	public static void main(String[] args) {
		Person person1 = new Person();
		System.out.println("======================");
		Person person2 = new Person();
		
	}

运行结果

根上面代码的运行结果我们可以得到以下结论: 

代码块打印顺序:

静态的方法 和 静态的 成员 不依赖对象.—我们可以通过类名进行访问.

如果静态方法里面访问 实例成员变量, 那么 这个实例成员变量是依赖对象的,但静态方法不依赖. 

重要的事情说三遍:

静态里面不能有非静态数据成员!!!

静态里面不能有非静态数据成员!!!

静态里面不能有非静态数据成员!!!

package lecture1;

class Person{
	private String name;
	private int age;
	public static int count;
	
	static{
//		this.name = "zhangfei";//牢记:静态不能访问非静态的数据成员
		count = 99;
		System.out.println("静态代码块......");
	}
	
	//构造方法 - 总是和类名相同,且无返回值
	//当没有构造方法的时候,编译器会自动提供一个,不带参数的构造方法
	//构造方法作用:实例化一个对象
	//构造方法1:
	public Person() {
		//this("🐖🐖",1);
		System.out.println("Person<init>");
		//this("林🐖🐖");

	}

	
	//构造方法2:
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
		System.out.println("Person<String,int>");
	}
	

	
	{

		System.out.println("实例代码块......");
	}
	


	
	public static void func() {
		count = 99;
//		this.name = "caocao";
	}
	
	//构造方法3:
	public Person(String name) {
		
	}
	
	public void eat() {
		System.out.println(this.getName());
		System.out.println(this.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;
	}
	
	//@Override
	public String toString() {
		return "Person{" +
				"name='" + name + '\'' +
				",age="  + age +
				"}";
	}
}
public class TestDemo {
	public static void main(String[] args) {
		System.out.println(Person.count);
		
	}

对比上面运行结果,左边打印出的count值为99,右边为0,我们可以得出:

如果代码块都是静态的, 那么打印结果 和定义的前后顺序有关

匿名对象

匿名对象就是没有名字的对象,每次使用只能使用一次

没有引用的对象称为匿名对象
匿名对象只能在创建对象时使用
如果
一个对象只是用一次,后面不需要用了,可以考虑使用匿名对象

package lecture1;


class Person{
	private String name;
	private int age;
	
	static{
//		this.name = "zhangfei";//牢记:静态不能访问非静态的数据成员
		count = 99;
		System.out.println("静态代码块......");
	}
	public static int count = 0;
	
	//构造方法 - 总是和类名相同,且无返回值
	//当没有构造方法的时候,编译器会自动提供一个,不带参数的构造方法
	//构造方法作用:实例化一个对象
	//构造方法1:
	public Person() {
		System.out.println("Person<init>");

	}

	
	//构造方法2:
	public Person(String name, int age) {
		System.out.println("Person<String,int>");
	}
	
	//实例代码块
	{

		System.out.println("实例代码块......");
	}
	


	
	public static void func() {
		count = 99;
//		this.name = "caocao";
	}
	
	//构造方法3:
	public Person(String name) {
		
	}
	
	public void eat() {
		System.out.println(this.getName());
		System.out.println(this.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;
	}
	

}


public class TestDemo {
	
	public static void main(String[] args) {
        //有名对象↓
		Person person1 = new Person();
		person1.eat();
		person1.eat();
		System.out.println(person1.getName());
		
        //匿名对象↓
		new Person().eat();
		new Person().getName();
	}

📝总结:

一个类可以产生无数的对象,类就是模板,对象就是具体的实例。

类中定义的属性,大概分为几类: 类属性,对象属性。

其中被static所修饰的数据属性称为类属性,static修饰的方法称为类方法,特点是不依赖于对象,我们只需要通过类名就可以调用其属性或者方法

静态代码块优先实例代码块执行,实例代码块优先构造函数执行。

this关键字代表的是当前对象的引用。并不是当前对象。 

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2023年12月6日
下一篇 2023年12月6日

相关推荐