Java——深入分析类与对象(封装性、构造方法与匿名对象、简单Java类开发原则)
目录
1、封装性
Java中所有面向对象的概念都是以类与对象的关系为主,下面用一个程序说明为什么要提供有封装性。
-
protected void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
Person person = new Person();
-
person.name = "张三";
-
person.age = -20;
-
person.printOut();
-
}
-
-
class Person{
-
String name;
-
int age;
-
public void printOut(){
-
System.out.println("name="+name+"age="+age);
-
}
-
}
以上程序语法上OK,但是实际上属于业务错误,年龄不应该是负数。造成这种错误的原因是什么?
最大的错误在于,当前类中的属性可以直接被类外部的对象直接调用,所以,这样的操作是不安全的操作。
最需要解决的问题是将内部的属性保护起来,不允许外部直接操作,可以使用private 关键字,加入后,name 和age使用范围只能是在Person这个类中,类的外部不能直接访问,安全性最高。
-
class Person{
-
private String name;
-
private int age;
-
public void printOut(){
-
System.out.println("name="+name+"age="+age);
-
}
-
}
现在若想通过对象操作类中的属性,在Java中的明确要求,使用setter、getter方法设置或取得封装属性内容,eg:
-
class Person{
-
private String name;
-
private int age;
-
public void printOut(){
-
System.out.println("name="+name+"age="+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;
-
}
-
}
开发原则:类中的属性全部使用private封装,封装后的属性必须严格按照要求编写setter与getter方法。
2、构造方法与匿名对象
2.1、构造方法
构造方法的定义,要求方法名称与类名称相同,且没有返回值类型声明。构造方法只有在使用关键字new实例化对象的时候才会被调用,如下程序所示。
-
protected void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
Test test =null;//不输出*
-
test = new Test();//输出*
-
}
-
-
class Test{
-
public Test(){
-
System.out.println("**********");
-
}
-
}
Java在编译过程中,系统会自动加入一些代码,如果你的类中没有定义构造方法,系统自动帮助用户提供一个无参的构造方法,以此包装每个类中至少有一个构造方法。构造方法的作用是什么?
使用关键字new实例化时才会调用构造方法,实例化时属于堆内存空间的开辟,即是属性的初始化过程。但默认情况下属性初始化的内容都是对应数据类型的默认值,所以,在实例化时若想传递属性的内容,可以靠构造方法完成,省略了一系列的setter调用,实际开发中应用较多。
【举例】:构造有参构造方法
-
protected void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
Person per = new Person("张三",10);
-
per.printOut();
-
}
-
class Person{
-
private String name;
-
private int age;
-
public Person(String name, int age) {
-
this.name = name;
-
this.age = age;
-
}
-
public void printOut(){
-
System.out.println("name="+name+"age="+age);
-
}
-
public String getName() {
-
return name;
-
}
-
public void setName(String name) {
-
this.name = name;
-
}
-
public int getAge() {
-
return age;
-
}
-
public void setAge(int age) {
-
if(age >=0){
-
this.age = age;
-
}
-
}
-
}
注意:构造方法没有返回值,为什么没有使用void声明?构造方法在实例化对象时只调用一次,而普通方法可以利用对象调用多次,没有加void,这就是与普通方法加以区分。
构造方法本身还是属于方法,所以其是可以进行重载的。但是需要注意,按照参数的个数顺序,降序或升序排列,养成一个好的编程习惯。类中的基本属性就是属性、构造方法、普通方法,编程时也按照这个顺序。
对象的构造过程中涉及很多步骤:加载类,为对象开辟空间、属性赋值操作,构造方法在过程的最后一步,这一步是留给用户处理的。属性在声明时设置了具体的内容,这些内容是构造完成后才赋值的,构造之前都是默认值。
2.2、匿名对象
匿名对象指的是没有名字的对象,对象的名字都保存在了栈中。
如:Person per = new Person("张三",10); 就是有名对象,per是对象的名。
整个对象操作中,真正有用的不是栈内存,因为栈内存指向堆内存,真正用的是堆内存,堆内存靠new开辟,所以可以直接用new Person("张三",10)调用类中方法。
new Person("张三",10).printOut();
但是对象没有名字,使用一次后就自动成为了垃圾。
3、简单Java类开发原则
- 1)类名称必须具备实际意义,可明确描述某一类实体,eg:学生、雇员、工人等。
- 2)类中所有属性必须使用private封装;
- 3)所有封装的属性必须编写setter、getter方法;
- 4)类中可以构造若干构造方法,但是必须有一个明确的无参构造方法;
- 5)类中不允许有输出操作,所有输出必须将数据返回给调用处输出;
- 6)类中应该提供有一个可以取得对象完整信息的方法;
作于202003242240,已归档
———————————————————————————————————
本文为博主原创文章,转载请注明出处!
若本文对您有帮助,轻抬您发财的小手,关注/评论/点赞/收藏,就是对我最大的支持!
祝君升职加薪,鹏程万里!
文章来源: winter.blog.csdn.net,作者:Winter_world,版权归原作者所有,如需转载,请联系作者。
原文链接:winter.blog.csdn.net/article/details/105059117
- 点赞
- 收藏
- 关注作者
评论(0)