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

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



回顾

上次,我们学习了关于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关键字代表的是当前对象的引用。并不是当前对象。

目录
相关文章
|
2月前
|
Java
java基础(8)数据类型的分类
Java数据类型分为基本数据类型(8种)和引用数据类型。基本类型包括byte, short, int, long, float, double, boolean, char。每种类型有固定占用空间大小,如int占用4字节。字符编码如ASCII和Unicode用于将文字转换为计算机可识别的二进制形式。
73 2
|
2月前
|
存储 Java
java基础(7)变量以及变量的分类
Java变量是内存中存储数据的基本单元,包含数据类型、名称和字面值。变量的数据类型决定了分配的内存空间大小。变量声明格式为“数据类型 变量名;”,变量名应符合标识符命名规范。变量可以重新赋值,但数据类型需一致。变量可以一行声明多个,作用域决定了变量的可用范围。变量分为局部变量和成员变量,局部变量定义在方法体内,成员变量定义在方法体外、类体内。
41 2
|
17天前
|
Java 程序员 数据库连接
Java执行顺序大揭秘:静态块、非静态块和构造方法谁先谁后?
本文详细介绍了Java中的初始化块,包括静态初始化块和非静态初始化块的概念、执行顺序和实际应用场景。通过具体示例,帮助读者理解这两种初始化块的区别和使用场景,让面试官对你刮目相看。
26 0
Java执行顺序大揭秘:静态块、非静态块和构造方法谁先谁后?
|
1月前
|
设计模式 Java 测试技术
Java零基础-构造方法详解
【10月更文挑战第5天】Java零基础教学篇,手把手实践教学!
19 1
|
1月前
|
Java
让星星⭐月亮告诉你,Java异常分类[Throwable(Error/Exception(RuntimeException/其他异常)) 检查时异常 非检查时异常]
本文深入解析了Java异常处理机制,重点介绍了`Throwable`类及其子类`Error`和`Exception`,并通过实例代码、流程图和表格详细解释了异常的分类、区别及处理方法,帮助读者掌握异常处理的关键技巧,提升程序的稳定性和健壮性。
47 1
|
1月前
|
Java 编译器
【一步一步了解Java系列】:子类继承以及代码块的初始化
【一步一步了解Java系列】:子类继承以及代码块的初始化
24 3
|
1月前
|
Java
java构造方法时对象初始化,实例化,参数赋值
java构造方法时对象初始化,实例化,参数赋值
50 1
|
1月前
|
Java
Java 中 IO 流的分类详解
【10月更文挑战第10天】不同类型的 IO 流具有不同的特点和适用场景,我们可以根据具体的需求选择合适的流来进行数据的输入和输出操作。在实际应用中,还可以通过组合使用多种流来实现更复杂的功能。
46 0
|
2月前
|
Java API
java调用构造方法
java调用构造方法
38 3
|
2月前
|
存储 安全 Java
Java 常用集合分类
Java 常用集合分类
26 3