您的位置:首页 > 文旅 > 旅游 > 中国建设在线平台官网_设计家官网室内设计视频_最近的新闻热点时事_认识网络营销

中国建设在线平台官网_设计家官网室内设计视频_最近的新闻热点时事_认识网络营销

2024/10/13 4:50:32 来源:https://blog.csdn.net/psjasf1314/article/details/142891946  浏览:    关键词:中国建设在线平台官网_设计家官网室内设计视频_最近的新闻热点时事_认识网络营销
中国建设在线平台官网_设计家官网室内设计视频_最近的新闻热点时事_认识网络营销

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

第七课:成员属性封装

  由于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回收。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com