学习封装的一些知识点(来源书上,仅供个人学习使用)

来源:互联网 发布:qq浏览器mac版 编辑:程序博客网 时间:2024/06/11 14:10

一个银行账户,余额、存取例子:

class Acount //class关键字定义类
{
    private String acountNumber;
    private double balance;//信息最小化公开
    public Acount()         //构造方法(Constructor),方法名与类名相同,无返回值。
    {                             //构造方法作用是构建对象时,初始化一些必要信息。
        this("empty",0.0); //this方法用于对象内部
    }
    public Acount(String acountNumber,double balance) //构造方法的重载(overload)
    {
        this.acountNumber=acountNumber;
        this.balance=balance;
    }
    public String getAcountNumber()
    {
        return acountNumber;
    }
    public double getBalance()
    {
        return balance;
    }
    public void deposit(double money)
    {
        balance+=money;
    }
    public double withdraw(double money)
    {
        balance-=money;
        return money;
    }
}

public class AcountDemo
{
    public static void main(String [] args)
    {
        Acount acount1=new Acount();
        Acount acount2=new Acount("zhanghao111111k",1000.5);
        System.out.println(acount1.getAcountNumber()+":"+acount1.getBalance());
        System.out.println(acount2.getAcountNumber()+":"+acount2.getBalance());
        acount2.deposit(100.5);
        System.out.println(acount2.getAcountNumber()+":"+acount2.getBalance());
        double money=acount2.withdraw(1000);
        System.out.println("取出钱数:"+money);
        System.out.println(acount2.getAcountNumber()+":"+acount2.getBalance());
    }
}

1、在定义类时,有一个基本原则是:信息最小化公开。——尽量通过方法来操作对象,而不是直接存取对象内部的域成员(Fild成员)。信息的最小化公开原则,是基于安全的考虑,避免程序设计人员随意操作内部域成员造成程序错误。一个类中的域成员,若声明为

private,则其可是范围(scope)为整个类内部,外界无法直接存取私有成员,所以可以使用公开方法getxxx()和setxxx()进行存取。

2、在java中,一个类可以定义域成员(Fild)以及方法成员(Method)。类成员可用的存取权限修饰词有public、protected、private三个。如果在声明成员时不使用存取权限修饰词,则预设以包(package)为存取范围。也就是说在package以外就无法存取。

3、一个方法成员为一个小程序片段或一个执行单元(unit),这个程序片段可以重复调用,并可以传入参数或返回一个表示执行结果的值。基本声明和定义方式如下:

存取修饰符 返回值类型 方法名称(参数行){//实例return 返回值;}

4、方法区块中可以声明变量(variable),参数在方法区块执行结束后就会自动清除。如果方法中声明的变量名称与类的域成员名称相同,则方法中的变量名称会暂时覆盖域成员的作用范围,参数行上的参数名称也会覆盖域成员的作用范围。此时,如果要在方法区块中使用域成员,可以使用this关键词来特别指定。

5、在方法中,如果执行到return语句,则会立即终止区块的执行。

6、静态(static)数据与静态方法的作用通常是为了提供共享的数据或工具方法。静态成员属于类而不是属于对象,即静态方法中不是有this参考名称,静态方法中也不允许使用非静态成员

6、java在使用到类时,才会将类加载至程序中。如果在加载类时,希望先进行一些类的初始化动作,可以使用static定义一个静态区块,并在当中编写载入类时的一些初始化动作。

static

{

    //一些初始化程序代码

}

在类被加载时,预设会先执行静态区块中的程序代码,且只会执行一次。

7、重载(overload)方法。为类似功能的方法提供统一的名称,但根据参数行的不同而自动调用对应方法。

     a.传递参数的数据类型不同。b.参数行的参数个数不同。

     返回值类型的不同,不能作为方法重载的区别根据。

8、编译器在处理重载方法、装箱问题、不定长度参数时,会依下面的顺序寻找符合的方法:

     a.寻找在没有装箱动作前,符合参数类型和个数的方法。 (不装箱比较)

     b.尝试装箱动作后,符合参数类型和个数的方法。            (装箱比较)

     c.尝试设有不定长度参数并可以符合的方法。                   (不定长度参数)

     d.编译器找不到合适的方法,报告编译错误。

9、不定长度参数(variable-length argument)。

     public static int sum(int...nums){//使用...声明参数}

实际nums是一个数组,(int...nums)可以解释为(int[ ]nums).

class MethTool
{
    public static int sum(int...mums)
    {
        int result=0;
        for(int element:mums) //遍历数组元素
        {
            result+=element;
        }
        return result;
    }
}

public class MethToolDemo
{
    public static void main(String [] args)
    {
        System.out.println(MethTool.sum(1,2,3,4,5));
    }
}

10、递归方法(Rucursion)。在方法中调用自身同名方法。而调用者本身会先被放在内存堆栈(stack)中,等被调用者执行完毕后,再从堆栈中取出之前被置入的方法继续执行。堆栈是一种先进后出(first in,last out)的数据结构,就好比将书本置入箱子里,最先放入的最后才取出。递归本身有重复执行与内存堆栈的特性,但递归有方法调用的负担,效率低。

11、垃圾收集。Java中并没有析构函数,但有finalize()方法,它被声明为protected,它会在对象被清除时执行。  可以进行一些相关资源的清除工作。

       如果确定不再使用某个对象,可以在参考至该对象的名称上指定null,表示这个名称不再参考至任何对象,不被任何名称参考的对象将会回收资源。

        System.gc()建议程序进行垃圾收集,如果建议被采纳,则对象资源会被回收,回收前会执行finalize()方法。