封装性初步分析
为什么要封装 ?
就好比银行 ,每个储户不可能自己去操作金库 ,必须由银行的工作人员依照规则进行操作 ,并且每一步都是需要让顾客看不见的。。。那么,这种情况下 ,就可以使用关键字private进行封装 ,将类中的属性进行私有化操作 。
class Book //定义一个Book类
{
private String title ; //图书的标题
private double price ; //图书的价格
public void setTitle(String t){ //设置title属性内容
title = t;
}
public void setPrice(double t){//设置price属性内容
if(t>0){
price = t;
}
}
public String getTitle(){ //获取title属性内容
return title ;
}
public double getprice(){ //获取price属性内容
return price ;
}
public void getInfo(){ //获取对象的完整信息
System.out.println("图书的名称是 :"+title+",图书的价格是:"+price);
}
}
public class TestDemo
{
public static void main(String args[]){
Book bk1=new Book() ;
Book bk2=bk1 ;
bk1.setTitle("java开发大全");
bk1.setPrice(-89.123) ;
bk1.getInfo() ;
bk2.setPrice(123.567);
bk1.getInfo();
}
}
程序执行结果:
图书的名称是 :java开发大全,图书的价格是:0.0
图书的名称是 :java开发大全,图书的价格是:123.567
上述代码使用private将类中的属性进行封装 ,类中的属性只能在Book类中被访问 。如果属性需要被外部使用 ,那么需要按照要求定义相应的setter 、getter方法 。
构造方法
什么是构造方法?
构造方法是一种特殊的方法 ,他只在新对象实例化的时候调用 ,其定义原则是 方法名与类名称相同 ,没有返回值 ,可以重载 。
在对象实例化的过程中 ,便存在构造方法的使用 。下面通过对对象实例化来分析 。
1 类名称 2对象名称 = 3 new 4类名称 ();
1:类名称 :规定了对象的类型 ,即对性可以使用哪些方法与属性 ,都是由类定义的 。
2:对象名称 :如果想使用对象 ,需要一个名字 ,这是唯一的标记 。
3:new :开辟新的内存空间 ,实例化对象 。
4 :类名称() :调用了一个和类名称一样的方法 ,这就是构造方法 。
我们发现 ,为了保证程序的正常运行 ,即使用户没有定义任何构造方法 ,也会在编译以后自动为类加上一个没有参数、没有返回值、与类名称相同的构造方法 。
构造方法与普通方法的区别
1.构造方法的名字必须与定义他的类名完全相同,没有返回类型,甚至连void也没有。
2.类中必定有构造方法,若不写,系统自动添加无参构造方法。接口不允许被实例化,所以接口中没有构造方法。
3:构造函数的主要作用是完成对类对象的初始化。
4.构造方法在初始化对象时自动执行,一般不能显式地直接调用.当同一个类存在多个构造方法时,java编译系统会自动按照初始化时最后面括号的参数个数以及参数类型来自动一一对应。完成构造函数的调用。
5.构造方法分为两种:无参构造方法 有参构造方法
class Book
{
private String title ;
private double price ;
public Book(){
System.out.println("无参数构造");
}
public Book(String t){
System.out.println("一个参数构造");
title =t;
}
public Book(double t){
System.out.println("一个参数构造");
price =t;
}
public Book(String t,double k){
System.out.println("两个参数构造");
title =t;
price =k;
}
public void setTitle(String t){
title =t;
}
public void setPrice(double t){
price =t;
}
public String getTitle(){
return title;
}
public double getPrice(){
return price ;
}
public void getInfo(){
System.out.println("图书的名称是:"+title+" 图书的价格是:"+price);
}
}
public class TestDemo
{
public static void main(String args[]){
Book bk1=new Book(123.789);
bk1.getInfo() ;
bk1.setTitle("java开发大全") ;
bk1.getInfo();
}
}
程序执行结果:
一个参数构造
图书的名称是:null 图书的价格是:123.789
图书的名称是:java开发大全 图书的价格是:123.789
编程规范:首先编写属性(必须封装 ,同时提供getter 、setter的普通方法),然后编写构造方法 ,最后编写普通方法 。
匿名对象
我们之前把对象名理解为栈内存 ,他指向储存属性的堆内存 。 而如果没有栈内存指向的堆内存空间,就是一个匿名对象 。匿名对象在使用一次后便成为垃圾被回收掉 释放。
class Book
{
private String title ;
private double price ;
public Book(){
System.out.println("无参数构造");
}
public Book(String t){
System.out.println("一个参数构造");
title =t;
}
public Book(double t){
System.out.println("一个参数构造");
price =t;
}
public Book(String t,double k){
System.out.println("两个参数构造");
title =t;
price =k;
}
public void setTitle(String t){
title =t;
}
public void setPrice(double t){
price =t;
}
public String getTitle(){
return title;
}
public double getPrice(){
return price ;
}
public void getInfo(){
System.out.println("图书的名称是:"+title+" 图书的价格是:"+price);
}
}
public class TestDemo
{
public static void main(String args[]){
new Book(123.789).getInfo();
}
}
程序执行结果:
一个参数构造
图书的名称是:null 图书的价格是:123.789