Java中类的特性

1. 访问控制

私有成员:
通过关键字 private 来声明。无法从类的外部访问到私有成员,只能被该类自身访问和修改。即使是该类的子类也无法对私有成员进行获取或引用,从而达到了对数据最高级别保护的目的。

公有成员:
通过关键字 public 来声明。公有成员可以被所有其他的类所访问,会造成安全性和数据封装性的下降,应尽量减少使用。

保护成员:
通过关键字 protected 来声明。被保护的成员只能够被它自己所在的类及其子类或同一包中的其他类访问,在子类中可以覆盖此变量。

缺省访问控制符:
若类的成员前面不加任何访问控制符,则其具有缺省的访问控制特性。该控制权表示这个成员只能被同一个包(类库)中的类所访问和调用。同理,对于一个类来说,如果它没有访问控制符,则它也只能被同一个包中的类访问和引用。

2. 方法重载 (Overloading)

重载是实现多态的一种方法,这些方法具有相同的名称,但是形参不同。方法的重载中参数的类型是关键,参数列表必须不同。这里的的不同分为以下情况:

  • 参数个数不同
  • 参数个数相同,但类型不同
  • 参数顺序不同

3. 构造方法

构造方法是一种特殊的、与类名相同的方法,专门用于在创建对象时,完成初始化工作。构造方法有如下特殊之处:

  • 构造方法名与类名相同
  • 构造方法没有返回值,但不能写 void
  • 构造方法的主要作用时完成对类对象的初始化工作
  • 构造方法一般不能由编程人员显示直接地调用,而是由 new 来调用
  • 在创建一个类的对象的同时,系统会自动调用该类的构造方法为新对象初始化

3.1 从一个构造方法调用另一个构造方法

  • 通过 this 关键字来调用
  • this 关键字必须写在构造方法内的第一行位置

3.2 私有构造方法

构造方法一般都是共有的,如果构造方法被声明为 private ,则无法在该构造方法所在的类以外的地方被调用,但在该类的内部还是可以被调用的。

4. 静态成员

static 关键字修饰的成员被称为静态成员,也成为类成员;不被修饰的成员叫做实例成员。

4.1 静态变量

静态变量是隶属于类的变量,而不是属于任何一个类的具体对象。也就是说,对于该类的任何一个具体的对象而言,静态变量是一个公共的存储单元,不是保存在某个对象实例的内存空间中,而是保存在类的内存空间的公共存储单元中。
对于静态变量的使用,建议采用 类名.变量名 的形式来访问。

4.2 静态方法

static 修饰符修饰的方法是属于类的静态方法,又称为类方法。静态方法有如下几重含义:

  • 静态方法是属于整个类的,它在内存中的代码段将被所有的对象所共用,而不被任何一个对象所专用
  • 由于静态方法是属于整个类的,所以它不能操纵和处理属于某个对象的成员,而只能处理属于整个类的成员。因此静态方法只能访问静态变量,不能访问实例变量
  • 在静态方法中不能使用 thissuper 关键字
  • 对于静态方法的使用,建议采用类名.方法名的形式来访问

4.3 静态初始化器

静态初始化器是由关键字 static 修饰的一堆大括号 {} 括起来的语句组,它与构造方法有几点根本的不同:

  • 构造方法是对每个新创建的对象进行初始化,而静态初始化器是对类自身进行初始化
  • 构造方法是在用 new 运算符创建对象时由系统自动执行,而静态初始化器一般不能由程序来调用,它是在所属的类被加载入内存时由系统调用执行的
  • new 运算符创建多少个新对象,构造方法就被调用多少次,但静态初始化器则在类被加载入内存时只执行一次,与创建多少个对象无关
  • 静态初始化器不是方法,因而没有方法名、返回值和参数

一般来讲,Java在新建一个对象的时候各个初始化方法的执行的顺序为:
父类的静态初始化器 \rightarrow 子类的静态初始化器 \rightarrow 父类的构造函数 \rightarrow 子类的构造函数

这里我们来看一个例子:

class Shape {
    Shape () {
        System.out.println("This is the construct function of shape class.");
    }
    static {
        System.out.println("This is shape's static construction area.");
    }
}

class Circle extends Shape{

    Circle () {
        System.out.println("This is the construct function of Circle class.");
    }
    static {
        System.out.println("This is Circle's static construction area.");
    }
}

public class test {
    public static void main(String[] args) {
        Circle a = new Circle();
        Circle b = new Circle();
    }
}

上述代码中,Circle 类继承了 Shape 类,两个类中都有各自的静态初始化器和构造函数,我们在 main 方法中新建了两个 Circle 对象,执行结果为:

This is shape's static construction area.
This is static Circle's construction area.
This is the construct function of shape class.
This is the construct function of Circle class.
This is the construct function of shape class.
This is the construct function of Circle class.

以上结果说明在新建对象的时候初始化器的执行顺序。而且我们可以发现,不论新建多少个对象,类的静态初始化器只会执行一次,而构造函数每次都会被执行。

5. final修饰符

5.1 用来修饰基本数据类型

如果一个基本类型的变量被声明为final,则代表它为一个常量,其值不能被修改。这也意味着在声明它的时候也必须要进行初始化工作。(在这种用法上,final类似于 C/C++ 中的const)。例如:

final int FILE_NEW = 1;

为final变量的所有的字符选择大写是一个普遍的编码约定。声明为final的变量在实例中不占用内存。这样,一个final变量实质上是一个常数。

5.2 用来修饰一个引用

用来修饰一个引用时,则该引用不能修改,但被该引用指向的对象本身可以修改。

5.3 用来修饰一个方法

final关键字也可以被应用于方法,代表该方法为最终方法,无法被子类重写,但是仍然可以被继承。

5.4 用来修饰一个类

当用final来修饰类时,该类成为最终类,无法被继承。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容