我们都知道,java是面向对象机制.面向对象,就是万物皆对象,我们要不断的创建对象,使用对象,指挥对象来做事情.而任何对象必定属于一个类.类也是java最基本的单位.下面我就浅谈下个人对类的认识.
一,类的几种分类方式
1,按照编程机制,在eclipse中.类可以分为基本类和测试类.
基本类是我们用来创建的类,存储类的基本属性和方法,如Student类,Person类.
测试类用来调用基本类中的属性和方法,从而达到一定的效果.
测试类与基本类的区别在于:基本类中没有main方法,测试类中有main方法.jvm在运行时会首先进入测试类的main方法中运行.
2,类可以分为静态类和非静态类.
静态类的修饰符中有static,非静态类没有.
二者的区别在于:静态类中的属性和方法存在于内存方法区中的静态共享区中,可以由类名直接调用,不用创建新的对象来调用,节省了堆内存空间.
静态类随着类的加载而加载,静态成员也叫类成员,静态方法也叫类方法.优先于对象存在(因为优先于对象存在,所以不能用到this指针,因为this指针是谁来调用我就代表谁,而静态方法是不一定被对象调用的,为了安全起见,不能用到this指针.包括在同步代码块中,静态同步方法锁只能是字节码对象,不能是this).被类的所有对象共享.所以.我们一般将共性命名为静态类,将特性命名为非静态类.
而非静态类中的属性和方法若要用到,必须首先在堆内存中new一个对象,让对象名来调用本类的方法和属性.
3,类可以分为抽象类和非抽象类.抽象类用abstract修饰,抽象类中成员变量可以说是变量,也可以是常量.成员方法可以是抽象的,也可以是非抽象的.抽象类不能创建对象,因此只能通过创建子类,重写父类抽象方法.一般用于多态中的父类引用指向子类对象.抽象类也多用于接口,因为接口就是抽象的.
非抽象类就是一般类,前面没有abstract修饰.
4,根据类中的修饰符,类还有四种状态,按照访问权限大小依次为:公共类(public),受保护类(protected),默认类(default),私有类(private)公共类的访问权限最大,同一个项目下都可以访问.私有类只能在本类中访问.默认类是在同一个包中可以访问,受保护类是同一个包中,以及其他包中的子类可以访问.
5,引用数据类型包括:数组,类,接口,枚举.其实它们本质都是类.
6,按位置又可分为外部类和内部类,就是类中有类.而内部类中有局部内部类,就是写在方法中的类,局部内部类中又有匿名内部类.
内部类可以直接访问外部类的成员,包括私有.而外部类要访问内部类的成员,必须创建对象.
Outher.Inner oi = new Outher().new INner();
局部内部类访问局部变量必须用final修饰.(jdk1.7.这是bug,不做讨论)
匿名内部类就是内部类的简化写法.前提:存在一个类或者接口(这里的类可以是具体类,也可以是抽象类).格式:new 类名|接口名(){重写方法}.本质:一个继承了该类或者实现了该接口的子类匿名对象.
二,类与类之间的关系.(此类包括接口)
1.继承关系. is a
当一个类继承另一个类,形成子父类时,它们是继承关系.一个父类可以有多个子类,而一个子类只能有一个父类.java支持单继承,不支持多继承,支持多层继承.子类只能继承父类所有的非私有成员,不能继承私有成员,不能继承父类构造方法,只能通过super访问父类构造方法.用通俗语言来讲就是亲父子的关系.
2.实现关系. like a
当一个类实现某个接口时,它们之间是实现关系.接口中的方法都是抽象的,接口不能实例化.用通俗语言来讲,就是干父子的关系.
3.嵌套关系.外部类与内部类是嵌套关系,类中有类.用通俗语言来讲,就是包夹关系.
4.装饰关系.
在装饰类设计模式中,两个类共用一个接口.类B对类A进行装饰,扩大功能.我称之为装饰关系.与继承关系相比,装饰关系的耦合性没有继承关系强.用通俗语言来讲,就是干兄弟关系.
5,管理关系.
这里指Class类与其他类之间的关系.Class类是用来管理类的类,可以通过Class类获取到相关类的属性和方法等.在反射中会用到Class类.
6,自闭关系.
这里指单例设计模式,在本类中定义一个本类对象并私有,不让其他类创建本类对象.我将其称之为自闭关系.
7,邻居关系.
这里指一般类之间的关系,可以互相调用类,创建对象,调用方法.
注:以上几条系本人小结,只是用来便于加深理解,不是官方文本界定的关系内容.如有不当,敬请指正.