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

目录
相关文章
|
1月前
|
Java 编译器 Go
【Java】(5)方法的概念、方法的调用、方法重载、构造方法的创建
Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用方法的优点使程序变得更简短而清晰。有利于程序维护。可以提高程序开发的效率。提高了代码的重用性。方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。这种就属于驼峰写法下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。
198 4
|
4月前
|
机器学习/深度学习 分布式计算 Java
Java 大视界 -- Java 大数据机器学习模型在遥感图像土地利用分类中的优化与应用(199)
本文探讨了Java大数据与机器学习模型在遥感图像土地利用分类中的优化与应用。面对传统方法效率低、精度差的问题,结合Hadoop、Spark与深度学习框架,实现了高效、精准的分类。通过实际案例展示了Java在数据处理、模型融合与参数调优中的强大能力,推动遥感图像分类迈向新高度。
|
4月前
|
安全 Java 测试技术
Java 大学期末实操项目在线图书管理系统开发实例及关键技术解析实操项目
本项目基于Spring Boot 3.0与Java 17,实现在线图书管理系统,涵盖CRUD操作、RESTful API、安全认证及单元测试,助力学生掌握现代Java开发核心技能。
237 0
|
4月前
|
Java 编译器 数据安全/隐私保护
Java 大学期末考试真题与答案 含知识点总结 重难点归纳及题库汇总 Java 期末备考资料
本文汇总了Java大学期末考试相关资料,包含真题与答案、知识点总结、重难点归纳及题库,涵盖Java基础、面向对象编程、异常处理、IO流等内容,并提供完整代码示例与技术方案,助你高效复习备考。
252 3
|
8月前
|
Java
java构造方法,构造代码块,静态代码块的执行顺序
本文介绍了Java中构造方法、构造代码块和静态代码块的执行顺序。静态代码块用`static`声明,在JVM加载类时执行一次;构造代码块在每次创建对象时执行,先于构造方法;构造方法用于对象初始化,创建对象时调用。示例代码展示了这三者的输出顺序,并解释了它们的区别和应用场景。
267 1
|
8月前
|
缓存 运维 Java
Java静态代码块深度剖析:机制、特性与最佳实践
在Java中,静态代码块(或称静态初始化块)是指类中定义的一个或多个`static { ... }`结构。其主要功能在于初始化类级别的数据,例如静态变量的初始化或执行仅需运行一次的初始化逻辑。
288 4
|
9月前
|
安全 Java 程序员
Java 面试必问!线程构造方法和静态块的执行线程到底是谁?
大家好,我是小米。今天聊聊Java多线程面试题:线程类的构造方法和静态块是由哪个线程调用的?构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节有助于掌握Java多线程机制。下期再见! 简介: 本文通过一个常见的Java多线程面试题,详细讲解了线程类的构造方法和静态块是由哪个线程调用的。构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节对掌握Java多线程编程至关重要。
196 13
|
10月前
|
Java
Java 面向对象编程的三大法宝:封装、继承与多态
本文介绍了Java面向对象编程中的三大核心概念:封装、继承和多态。
534 15
|
10月前
|
缓存 Java 开发者
Java字面量详解:概念、分类与使用实例
本文介绍了Java字面量的概念、分类及应用。
436 11
|
10月前
|
Java 数据安全/隐私保护 开发者
【潜意识Java】深入理解 Java 面向对象编程(OOP)
本文介绍了Java中的面向对象编程(OOP)核心概念,包括封装、继承、多态和抽象。封装通过访问控制保护数据,提高安全性;继承支持代码复用,减少冗余;多态实现灵活的行为调用;抽象则隐藏细节,简化接口设计。掌握这些概念有助于编写高效、灵活且易于维护的代码。文章通过实例详细讲解了每个概念在Java中的应用,并总结了它们的优势。
481 3