您的位置:首页 > 编程语言 > Java开发

JAVA 类的高级概念

2015-09-27 20:05 281 查看

java 类的高级概念

一. 访问修饰符

1.1 public:

Java语言中访问权限最宽的修饰符,一般称为“公共的”;

被其修饰的类,属性以及方法,不仅可以跨越访问,而且允许挎包访问。

1.2 protected:介于public和private之间的一种访问修饰符,一般称为“保护的”,被其访问的类,属性以及方法只能被类本身的方法及子类访问,及子类在不同的包中也可以访问。

1.3 默认修饰符:及不加任何访问修饰符,通常称为“默认访问模式”,该模式下,只允许在同一个包中进行访问。

1.4 private: java语言中访问权限限制的最窄的修饰符,一般称为“私有的”,被其修饰的类、属性以方法只能被该类的对象访问,其子类不能访问,更不能挎包访问。

注意:我们的类一般都是用public来修饰

二. 封装

是面向对象技术的重要原则,他是java三大特性(封装、继承和多态)之一;

java就是通过封装把对象的属性和方法给结合为一个不可分割的独立整体,并尽可能隐藏对象的内部实现细节,只保留一些对接口使之与外部发生联系;系统的其他对象只能通过对外接口来与这个封装对象进行交互,而无须知道该对象内部的细节。

2.1 封装的作用(好处)

1) 良好封装能够减少代码的耦合;(面向对象设计原则:高内聚、低耦合)

2) 类内部的结构可以自由修改,而不影响LED外部使用者;

3) 可以对类的成员数据进行更精确的控制;

4) 能够好的隐藏类的成员数据和实现细节;

三. get方法(访问器)-set方法(访问器)的作用;'

用private/protected/default/public这四个访问修饰符修饰对象的属性和方法,则设置了类相应的属性和方法访问权。pri修饰符的属性和方法只能自己访问。当一些特殊情况下,允许被访问时,我们使用get方法(访问器)和set方法(修改器)。

四. 静态类成员

类的静态成员变量和方法属于类,而不是类的某个实例化对象。类的静态成员变量只存储一份数据,供所有对象公用。使用静态成员变量和方法可以实现多个对象之间的数据共享,而不会破坏封装(数据隐藏)的原则,这不但保证了安全性而且节省内存空间;

4.1 使用类的静态成员变量和静态方法不需要类实例化对象,可以通过如下方式访问:

类名.静态成员变量

类名.静态方法

4.2 类的静态成员变量和静态方法使用注意事项:

1)类的静态方法中不能调用非静态方法和非静态成员变量(也不能使用this和super)

2)类的非静态方法中可以调用静态方法和静态成员变量;

五、静态初始化块

是一组当类被类jvm的类加载器加载时执行的语句。

执行优先级高于非静态的初始化块,它会在对象装载到系统的时候执行一次,执行完成便销毁,它仅能初始化类变量,即static修饰的数据成员。

形如:

public class类{

static{

//语句

}

}

六、非静态初始化块

定义:

{}

执行的时候如果有静态初始化块,先执行静态初始化块再执行非静态初始化块,在每个对象生成时都会被执行一次,它可以初始化类的实例变量。非静态初始化块会在构造函数执行时,在构造函数主体代码执行之前被运行。

七、实例话初始化块

实例初始化块与静态初始化块类似,它在类的对象每次实例化时执行一次。

实例初始化块和构造器二者之间的不同之处在于实例初始化块在构造器调用之前执行。

形如:

public class类()

{

//语句

}

java中静态初始化块、实例化初始化块和构造器三者都是用来完成类的初始化工作。

在实际的编程中,可以根据不同的需要使用不同的初始化方式。而如何选择,关键在于三种放射的执行先后顺序。

静态初始化快在类被JVN的类加载器加载时被执行,而实例初始化快和构造器是在类实例化对象是才被执行;故父类和子类的静态初始化块最早执行,且前者早于后者;

实例化初始化块于构造器的执行顺序,同样是前者早于后者。

父类静态初始化块 >
子类静态初始化块> 父类实例化初始化块>父类构造器>子类实例初始化 >
子类构造器;

八、内部类

在java中,还可以在类的内部定义的类;这种在类的内部定义的类称为内部类。

在内部类所在的类称为外部类。

内部类属于java高级编程的内容,使用非常灵活,掌握难度比较大,但合理使用它可以编写出更为优雅和高效的程序。

java中的内部类共分为四中:

1)静态内部类:

这是最简单的内部类形式,定义在另一个类中,同时加上static关键字,他不能和外部类同名,它只可以访问外部的静态成员变量和静态方法(包括私有的静态成员变量和静态方法)。

实例化静态内部类对象的方式:

OuterClass.InnerClass inner = newOuterClass.InnerClass();

2)成员内部类

同静态内部类相同,也是定义在另一个类中,但是定义时不用static关键字,天可以访问外部类的所有成员变量和方法(包括静态和非静态)

OuterClass.InnerClass inner = new

3)局部内部类:

定义在方法中,比方法的使用范围更小,是内部类中最少的一种类型

它向局部或临时变量一样,不能被public,protected、private和static关键字修饰。它只能访问方法中的定义的final类型的局部变量。局部内部类在方法中定义,所以只能在方中使用,即只能在方法中实例化局部内部类对象,并调用其定义的方法。

4)匿名内部类:

它是一种特殊的内部类,是没有内名的局部内部类,不适用关键字class、extends等,且没有构造器。匿名内部类的定义和实例化对象合并在一起。匿名内部类是为实例化唯一对象而定义的类。当我们只需要实例化类的一个对象,而且不用类名时,使用匿名内部类可以使代码更简洁。

匿名内部类隐式继承了一个父类或实现一个接口。匿名内部类在编程中使用的比较多,通常作为一个参数使用。

内部类的作用或好处:

1、 内部类可以很好的实现时装(数据隐藏),因为一般非内部类是不允许有private、protected访问权限,但内部类可以有。

2、 内部类拥有外部内的所有成员访问权限。

3、 可以实现多重继承。

4、 可以避免修改接口而实现同一个类中两种同名方法的调用

多重继承:(了解)

指的是一个类可以从多一个的父类那里继承成员变量和方法;Java为了保证数据安全,它只允许单继承。有些时候我们会认为如果系统需要使用多重继承往往都是糟糕的设计,这个是个我们往往需要思考的不是怎么使用多重继承,而是你的设计是否存在问题。但有时候我们确实是需要是实现多重继承,而且现实生活中也真正存在这养的情况,比如说遗传,我们继承了父亲的基因,也继承了母亲的基因,而Java的设计者提供了两种方式让我们间接来实现多重继承。内部类和接口。

这个特点非常重要,它也是Java设计者设计内部类的最大理由之一。正是由于内部类的存在使得Java的继承机制更加的完善。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: