Java学习笔记--对象封装

封装

封装对象初始流程

构造函数是与类名称同名的方法,不用声明返回类型。往往为了区别对象的数据成员,会在对象的数据成员前加上this关键字。

class CashCard {
    String number;
    int balance;
    int bonus;

    CashCard(String number, int balance, int bonus)
    {
        this.number = number;
        this.balance = balance;
        this.bonus = bonus;
    }
}

封装对象操作流程

在对象中,我们还可以构造方法,它是有返回值的,在Java的命名习惯中,方法名称首字母是小写。

封装对象内部数据

  • 在Java中我们可以使用private关键字,它表示私有数据,如果对象中的数据成员被定义为private,那么如果你在类中如果没有撰写相关的存取private成员的方法,那么用户就不能 存取。
  • 在Java中,取值的命名方法是固定的,都是以get开头,之后接上首字母大写的单词。
  • 封住的主要目的就是隐藏对象的细节,将对象当做黑箱来进行操作。
  • private也可以用在方法或构造函数声明上,私有方法或构造函数通常是类内部某个共享的演算流程,外界并不知道私有方法的

类语法细节

public权限修饰

包范围权限:如果没有声明权限修饰的成员,只有在相同包的类程序代码中,才可以直接存取。而声明了
public的类在不同的包中也可以互相存取。

关于构造函数

  • 使用构造函数,创建对象时就可以进行初始化,如果没有指定初始值,则会使用默认值初始化。
  • 如果定义类时,没有攥写任何构造函数,编译程序就会自动加入一个无参数,内容为空的构造函数。所以在这种情况下,也可以使用无自变量方式调用构造函数:Some some = new Some();
  • 如果自行攥写无参数,没有内容的构造函数,就不被成为默认构造函数了。
  • 如果自行攥写了构造函数,编译程序就不会自动建立默认的构造函数了。

构造函数与方法重载

  • 可以定义多个构造函数,只要参数类型或个数不同。这被称为重载构造函数。
  • 定义方法时也可以使用重载,可为类似功能的方法提供统一的名称,但根据参数类型或个数的不同会调用对应的方法。

注意:返回值类型不可作为方法重载的依据。

在进行方法重载时,我们要注意自动装箱和自动拆箱的问题,比如下面的例子:

package cc.openhome;

class Some
{
    void someMethod(int i)
    {
        System.out.println("int 版本被调用");
    }
    void someMethod(Integer integer)
    {
        System.out.println("Integer 版本被调用");
    }
}

public class OverloadBoxing
{
    public static void main(String[] args)
    {
        Some s = new Some();
        s.someMethod(1);
    }
} 

对于上面的这个例子,结果显示的是”int 版本被调用”,如果我们想调用参数是Integer版本的方法,要明确指定,好比:s.someMethod(new Integer(1));

使用this

  • 在之前我们知道this可以区别构造函数参数和对象数据成员在同名时的初始化流程。其实在Java中this()代表了调用另一个构造函数,至于调用哪个构造函数,视调用this()时给的自变量类型与个数而定。this()调用只能出现在构造函数的第一行。
  • 在创建对象之后,调用构造函数之前,如有想执行的流程,可以使用{}定义。

static类成员

  • 被声明为static的成员,不会让个别对象拥有,而是属于类。
  • 被声明为static的成员,是将类名称作为名称空间,所以通过类名和 . 运算符就可以取得static成员。
    -方法也是可以被声明为static成员的。
  • 在static成员中不能使用this关键字。
  • 在staic方法或区块中,也不能使用非static方法或区块。

建议:即使是在同一类中,也明确使用类名称加上“.”运算符来调用static成员。

不定长度自变量

  • 要使用不定长度自变量,声明参数列时要在类型关键字后面加上…
  • 使用两个以上的不定长度自变量是不合法的
  • 实际上不定长度自变量是编译程序蜜糖,反编译之后会发现int …实际上展开为数组
package cc.openhome;

public class MathTool
{
    public static int sum(int... numbers)
    {
        int sum = 0;

        for(number : numbers)
        {
            sum += number;
        }

        return sum;
    }
}

内部类

  • 在类中再定义类。
  • 内部类本身可以存取外部类的成员,通常非静态内部类会声明为private,这种类是辅助类中某些操作而设计的,外部不知道内部类的存在。
  • 方法中也可以声明类,这通常是辅助方法中演算之用,方法外无法使用。

你可能感兴趣的:(java,对象)