类和对象是什么?(下)

简介: 类和对象是什么?

类和对象是什么?(上):https://developer.aliyun.com/article/1517679

3.2.this的使用

this表示当前对象的引用,有对象。

我们先来看一个现象。

package bao1;
 
class Dog {
    private String name;
    public int age;
    char sex;
 
    public Dog(String name,int age,char sex){
        name = name;
        age = age;
        sex = sex;
    }
 
 
 
    void print(){
        System.out.println("姓名为:" + name + ",年龄为:" + age + ",性别为:" + sex);
    }
 
}
 
public class test {
    public static void main(String[] args) {
        Dog dog = new Dog("张三",19,'男');
        dog.print();
 
    }
}

 

使用this后

2.this调用类中方法

若不同参数的构造方法之间出现了重复调用,可以使用this(参数)调用其他的构造方法

package bao1;
 
class Dog {
    private String name;
    public int age;
    char sex;
 
    public Dog(String name,int age,char sex){
        this(age);//要放在第一句
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    public Dog(int a){
        System.out.println("一个参数的有参构造");
    }
 
    public Dog(){
        System.out.println("我是无参构造");
    }
 
    void print(){
        System.out.println("姓名为:" + name + ",年龄为:" + age + ",性别为:" + sex);
    }
 
}
 
public class test {
    public static void main(String[] args) {
        Dog dog = new Dog("张三",19,'男');
        dog.print();
 
    }
}

使用this调用其他构造方法的时候要放在第一行

四、代码块

4.1普通代码块

定义在方法中,使用{}括起来的代码

如果在括号外进行打印a,会报错因为出了普通代码块,a就不存在了,生命周期就是出了普通代码块。

public class hello {
    public static void main(String[] args) {
        {
            int a = 0;
        }
        System.out.println(a);//会报错
    }
 
 
}

4.2 构造代码块

定义在类中,使用{}括起来的代码块,直接定义在类中,不加任何修饰符的代码块,优先于构造方法执行,有几个对象产生就调用几次构造块。

package bao1;
 
class Dog {
    private String name;
    public int age;
    char sex;
 
    public Dog(String name,int age,char sex){
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    {
        //构造代码块
        name = "曹操";
    }
    public Dog(int a){
        System.out.println("一个参数的有参构造");
    }
 
    public Dog(){
        System.out.println("我是无参构造");
    }
 
    void print(){
        System.out.println("姓名为:" + name + ",年龄为:" + age + ",性别为:" + sex);
    }
 
}
 
public class test {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.print();
 
    }
}

可以利用构造代码块对对象进行赋值,但是代码块在构造方法之前所以,构造方法的赋值可能会对代码块赋值进行覆盖.

4.3.静态代码块

静态代码块是定义在类中的,用static关键字修饰,在类加载的时候就执行,而且执行一次。

 

package bao1;
 
class Dog {
    private String name;
    public int age;
    char sex;
 
    public Dog(String name,int age,char sex){
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    static {
        System.out.println("我是静态代码块");
    }
    public Dog(int a){
        System.out.println("一个参数的有参构造");
    }
 
    public Dog(){
        System.out.println("我是无参构造");
    }
 
    void print(){
        System.out.println("姓名为:" + name + ",年龄为:" + age + ",性别为:" + sex);
    }
 
}
 
public class test {
    public static void main(String[] args) {
        Dog dog1 = new Dog();
        Dog dog2 = new Dog();
        Dog dog3 = new Dog();
 
 
    }
}

 

五、 toString方法

我们先看一段代码

package bao1;
 
class Dog {
    private String name;
    public int age;
    char sex;
 
}
 
public class test {
    public static void main(String[] args) {
        Dog dog1 = new Dog();
 
        System.out.println(dog1);
 
    }
}

打印的是该对象的地址,我们可以改写toString的方法

package bao1;
 
class Dog {
    private String name;
    public int age;
    char sex;
 
    public Dog(String name, int age, char sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
 
    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                '}';
    }
}
 
public class test {
    public static void main(String[] args) {
        Dog dog1 = new Dog("张三",18,'女');
 
        System.out.println(dog1.toString());
 
    }
}

目录
相关文章
|
JSON 前端开发 JavaScript
华为鸿蒙开发第二课
华为鸿蒙开发第二课
344 0
|
12月前
|
网络协议 Java 程序员
【网络】局域网LAN、广域网WAN、TCP/IP协议、封装和分用
【网络】局域网LAN、广域网WAN、TCP/IP协议、封装和分用
453 2
|
11月前
|
人工智能 供应链 新能源
推动AI与基础科学融合,第二届世界科学智能大赛圆满收官
推动AI与基础科学融合,第二届世界科学智能大赛圆满收官
272 5
new String()定义字符串为空,char[] chs = {‘a‘,‘b‘,‘c‘} String s2 = new String(chs) 输出abc,byte定99为a
new String()定义字符串为空,char[] chs = {‘a‘,‘b‘,‘c‘} String s2 = new String(chs) 输出abc,byte定99为a
|
算法 Java Maven
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(10)
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(10)
182 0
|
Shell Linux 芯片
硬核26000字分析uboot启动过程
硬核26000字分析uboot启动全过程
417 0
|
Java Go Maven
一个简单的案例入门 gRPC
一个简单的案例入门 gRPC
|
前端开发
2023年你应该需要知道的CSS新特性-选择器和AT规则篇
前一段时间State of CSS发起了2022年的调查问卷,该文件的内容主要是CSS新特性、框架、工具库的使用情况,这里我将会用几篇文章整理一下这个问卷中涉及到的新特性。
620 0
|
编译器
C零散知识点汇总之volatile关键字
C零散知识点汇总之volatile关键字
|
存储 关系型数据库 MySQL
mysql存储过程——procedure[prəˈsiːdʒər]
mysql存储过程——procedure[prəˈsiːdʒər]
171 0
mysql存储过程——procedure[prəˈsiːdʒər]