前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【JAVA杂货铺】一文带你走进面向对象编程|构造方法调用 | 代码块分类| 期末复习系列 | (中3)

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

作者头像
用户10920432
发布2024-01-18 18:09:08
1110
发布2024-01-18 18:09:08
举报
文章被收录于专栏:Python数据结构与算法

如何调用构造方法:

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

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


代码块

代码块分类

代码语言:javascript
复制
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();
		
	}

运行结果

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

代码块打印顺序:

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

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

重要的事情说三遍:

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

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

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

代码语言:javascript
复制
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,我们可以得出: 如果代码块都是静态的, 那么打印结果 和定义的前后顺序有关


匿名对象

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

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

代码语言:javascript
复制
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关键字代表的是当前对象的引用。并不是当前对象。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何调用构造方法:
  • 代码块
    • 代码块分类
    • 匿名对象
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档