【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关键字代表的是当前对象的引用。并不是当前对象。

目录
相关文章
|
22天前
|
安全 Java 数据安全/隐私保护
|
1月前
|
Arthas Java 中间件
如何优雅的在java中统计代码块耗时
如何优雅的在java中统计代码块耗时
34 1
|
16天前
|
Java 调度
Java中常见锁的分类及概念分析
Java中常见锁的分类及概念分析
16 0
|
1月前
|
Java 程序员 C#
静态构造方法解析,Java新手必看技能
静态构造方法解析,Java新手必看技能
9 0
|
1月前
|
Java C++ Python
构造方法执行过程:揭秘Java代码背后的秘密
构造方法执行过程:揭秘Java代码背后的秘密
11 0
|
1月前
|
Java 数据库连接 API
Java 学习路线:基础知识、数据类型、条件语句、函数、循环、异常处理、数据结构、面向对象编程、包、文件和 API
Java 是一种广泛使用的、面向对象的编程语言,始于1995年,以其跨平台性、安全性和可靠性著称,应用于从移动设备到数据中心的各种场景。基础概念包括变量(如局部、实例和静态变量)、数据类型(原始和非原始)、条件语句(if、else、switch等)、函数、循环、异常处理、数据结构(如数组、链表)和面向对象编程(类、接口、继承等)。深入学习还包括包、内存管理、集合框架、序列化、网络套接字、泛型、流、JVM、垃圾回收和线程。构建工具如Gradle、Maven和Ant简化了开发流程,Web框架如Spring和Spring Boot支持Web应用开发。ORM工具如JPA、Hibernate处理对象与数
94 3
|
1月前
|
Java
java中你知道这四种代码块吗?
java中你知道这四种代码块吗?
10 0
|
1月前
|
Java
java中你知道的这四种代码块吗?
java中你知道的这四种代码块吗?
11 0
java中你知道的这四种代码块吗?
|
1月前
|
Java
Java面向对象编程
Java面向对象编程
|
1月前
|
Java
JAVA构造方法
JAVA构造方法
12 0