自学内容网 自学内容网

Java基础知识全面总结(第二章)

第二章:深入分析类与对象

第七课:成员属性封装

  由于Java需要满足封装性,当在定义一个类的成员属性时,要使用关键字private,即类的成员属性对类的外部完全不可见;要使用或者设置类的成员属性可以通过getter/setter方法获取。

代码示例:

public class Main {
    public static void main(String[] args) {
        Person person=new Person();
        person.setAge(20);
        person.setName("张三");
        System.out.println(person.getAge()+" "+person.getName());
    }
}

//定义一个类
class Person{
    private String name;//类的成员属性姓名
    private int age;//类的成员属性年龄

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        if(age<0){
            System.out.println("年龄应该大于0岁");
        }
        this.age = age;
    }
}

第八课:构造方法与匿名对象

 1.构造方法的定义

      构造方法是用于实现实例化对象中属性的初始化处理,每一个类都至少有一个构造方法,如果在类建立后没有人为的写一个构造方法,那么编译器会在编译的时候添加一个无参数的构造方法,一个类可以有多个参数不同的构造方法,构造方法结构如下:

(1).方法名称和类名称相同

(2).没有返回值关键字

(3).只在实例化对象时能调用

代码实例:

public class Main {
    public static void main(String[] args) {
        Person person=new Person("张三",20);
        //修改实例化对象person的年龄
        person.setAge(22);
        System.out.println(person.getAge()+" "+person.getName());
    }
}
//定义一个类
class Person{
    private String name;//类的成员属性姓名
    private int age;//类的成员属性年龄
//构造方法
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        if(age<0){
            System.out.println("年龄应该大于0岁");
        }
        this.age = age;
    }
}
2.构造方法为什么不能有返回值关键字?

若构造方法有了返回值关键字,就不能和类的普通方法作出区分,为了在结构上保持独立,所以构造方法不加返回值关键字用于与普通方法作出区分。

3.用构造方法初始化化对象与set方法初始化对象的区别

使用构造方法只能在对象实例化时对对象进行初始化,如果需要修改实例化对象属性的值,构造方法则做不到,只能使用set方法进行值的修改,所以一个类中构造方法和set方法都是不可或缺的一部分。

4.什么是匿名对象

所谓的匿名对象就是没有名字的实例化对象,例如:

new Person("张三",20);
5.内存分析

实例代码:

public class Main {
    public static void main(String[] args) {
        Message message=new Message("Hello World");
        Person person=new Person(message,20);
       message= person.getMsg();
        System.out.println(message.getMsg());
    }
}
class Message{
    private String msg;
    public Message(String m){
        msg=m;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}
//定义一个类
class Person{
    private String name;//类的成员属性姓名
    private int age;//类的成员属性年龄
//构造方法
    public Person(Message message, int age) {
        this.name = message.getMsg();
        this.age = age;
    }
    public Message getMsg() {
        return new Message( name +":"+age);
    }
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        if(age<0){
            System.out.println("年龄应该大于0岁");
        }
        this.age = age;
    }
}

      代码内存分析:代码“ Message message=new Message("Hello World");”建立了一个类Message的实例化对象message,并利用构造方法给message的属性进行了赋值,即开辟了一个堆内存,message在栈内存中指向该堆内存;代码“ Person person=new Person(message,20);”,建立了一个类Person的实例化对象person,并利用构造方法给person的属性进行了赋值,即又开辟了一个堆内存,person在栈内存中指向改堆内存;代码“message= person.getMsg();”表示把原本指向成员属性值为“Hello World”的实例化对象message重新指向另一块堆内存空间,原堆内存空间就变成垃圾空间,会被GC回收。


原文地址:https://blog.csdn.net/psjasf1314/article/details/142891946

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!