Java中封装和this()调用构造方法以及对象作为参数使用知识点
封装:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。封装是一种信息隐藏技术,在java中通过关键字private,protected和public实现封装。什么是封装?封装把对象的所有组成部分组合在一起,封装定义程序如何引用对象的数据,封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。 适当的封装可以让程式码更容易理解和维护,也加强了程式码的安全性。 public class Book {
private int id;
private String bookName;
private double price;
public Book(int id,String bookName,double price){
this.id=id;
this.bookName=bookName;
this.price=price;
}
public void setId(int id) {
this.id = id;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
测试:public class TestBook {
public static void main(String[] agrs){
//TODO Auto-generated method stud
Book book=new Book(1,“盗墓笔记”,78.8);
book.show();
输出 图书的编号为:1
图书的名字为:盗墓笔记
图书的价格为:78.8
3封装的作用
编辑
① 对象的数据封装特性彻底消除了传统结构方法中数据与操作分离所带来的种种问题,提高了程序的可复用性和可维护性,降低了程序员保持数据与操作内容的负担。
②对象的数据封装特性还可以把对象的私有数据和公共数据分离开,保护了私有数据,减少了可能的模块间干扰,达到降低程序复杂性、提高可控性的目的。
词条标签: 在一个Java类中,其方法可以分为成员方法和构造方法两种。构造方法是一个与类同名的方法, 在Java类中必须存在一个构造方法。如果在代码中没有显示的体现构造方法的话,那么编译器在编译的时 候会自动添加一个没有形式参数的构造方法。这个构造方法跟普通的成员方法还是有很多不同的地方。如 构造方法的话一律是没有返回值的。而且也不用void关键字来说明这个构造方法没有返回值。而普通的方 法可以有返回值、也可以没有返回值。不过如果普通的方法没有返回 值的话,那么一定要在方法定义的时候采用void关键字来进行说明。其次构造方法的名字有严格的要求, 即必须与类的名字相同。也就是说,Java编译器发现有个方法与类的名字相同才把其当作构造方法来对待 。而对于普通方法的话,则要求不能够与类的名字相同,而且多个成员方法不能够采用相同的名字。在一 个类中可以存在多个构造方法,这些构造方法都采用相同的名字。只是形式参数不同。Java语言就凭用户 参数的参数来判断调用那个构造方法。
this关键字除了可以调用成员变量之外,还可以调用构造方 法。如下面的代码:
public?class?Student{?//定义一个类,类的名字为student。?
public?Student(){
//定义一个方法,名字与类相同故为构造方法
this(“luobo”)
}
public?Student(String?name){
//定义一个带形式参数的构造方法
}
在上面这个代码中,定义了两 个构造方法,一个带参数,另一个没有带参数。构 造方法都不会有返回值,不过由于构造方法的特殊性,为此不必要在构造方法定义时带上void关键字来说 明这个问题。在第一个没有带参数的构造方法中,使用了this(“luobo”)这个代码。在构造方法中使this关键字表示调用类中的构造方法。如果一个类中有多个构造方法,因为 其名字都相同,跟类名一致,这跟采用其他方法引用构 造方法一样,都是通过形式参数来嗲用构造方法的。如上例中,this关键字后面加上了一个参数,那么就 表示其引用的是带参数的构造方法。如果现在有三个构造方法,分别为不带参数、带一个参数、带两个参 数。那么Java编译器会根据所传递的参数数量的不同,来判断该调用哪个构造方法。从上面这个示例中可 以看出,this关键字不仅可以用来引用成员变量,而且还可以用来引用构造方法。
不过如果要使用这种方式来调用构造方法的话,有一个语法上的限制。一般来说,利用this关键 字来调用构造方法,只有在无参数构造方法中第一句使用this调用有参数的构造方法。否则的话,翻译的 时候,就会有错误信息。这跟引用成员变量不同。如果引用成员变量的话,this关键字是没有位置上的限 制的。如果不熟悉这个限制的话,那么还是老老实实的采用传统的构造方法调用方式为好。虽然比较麻烦 ,但是至少不会出错。
java 对象作为方法的参数传递 说到对象作为方法的参数传递的时候,大家都知道,当方法有返回值的时候,我们在其他方法定义一个接收他的对象就把他的值给获取到了,可是如果不定义对象接收呐?
public static void main(String[] agrs){
Map i=new HashMap();
i.put(“11”, 123);
change(i);
System.out.println(i.get(“11”));
}
public static Map change(Map map){
map.put(“11”,321);
return map;
} 这种情况下,打印出来的值是321,我没有定义对象去接受这个返回值,怎么这个值就发生变化了?这就牵扯到java中的对象在传递的过程中到底是值传递还是引用传递了。在基本数据类型(int,doule,long等)传递的过程中传递的是值
int i=0;
change(i);
System.out.println(i);
}
public static int change(int i){
i=5;
return i;
}
}
这种情况下,局部方法的改变不会引起主函数的i的变化,String对象也是如此。当传递的参数是对象的时候,这个时候java中的传递是引用传递。说白了就是c和c++中的指针,用c的说法是指针指向了变量的地址,在java中引用相当于是一种指针,引用的也是对象的地址,定义的对象在栈中存放。两者不管是谁发生了变化,都会引起另一个发生变化