类的定义
类是对具有相同属性的一类事物的统称,类是一个抽象的概念,具体实例化为对象后,通过对具体的对象调用该类的某一方法或属性,从而实现特定的功能,体现了java中万事万物皆对象,而类则是创建对象的前提<br>
定义方式:权限修饰符 class 类名(extends 父类名)(implements 接口名)(throws 异常类型){ }
属性
属性也称为成员变量
定义方式:权限修饰符 (static) (final) 属性类型 属性名
方法
方法体现的是类的功能
定义方式:权限修饰符 (static) (final) 返回值类型 方法名(形参列表){方法体}
return:当方法有返回值时,return返回参数并结束方法,当方法没有返回值时,return仅结束方法
重载:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数<br>类型不同即可。
可变个数形参:参数类型... 参数名
方法参数的值传递机制:
形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参
形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参
构造器
作用:创建对象;给对象进行初始化
定义:权限修饰符 类名(参数列表){初始化语句}
每一个类中都有构造器,构造器根据参数列表也可以重载
代码块
代码块(或初始化块)的作用:对Java类或对象进行初始化
代码块(或初始化块)的分类:一个类中代码块若有修饰符,则只能被static修饰,称为静态代码块(static block),没有使用static修饰的,为非静态代码块。
static代码块通常用于初始化static的属性
静态代码块:用static 修饰的代码块
1. 可以有输出语句。<br>2. 可以对类的属性、类的声明进行初始化操作。<br>3. 不可以对非静态的属性初始化。即:不可以调用非静态的属性和方法。<br>4. 若有多个静态的代码块,那么按照从上到下的顺序依次执行。<br>5. 静态代码块的执行要先于非静态代码块。<br>6. 静态代码块随着类的加载而加载,且只执行一次。
非静态代码块:没有static修饰的代码块
1. 可以有输出语句。<br>2. 可以对类的属性、类的声明进行初始化操作。<br>3. 除了调用非静态的结构外,还可以调用静态的变量或方法。<br>4. 若有多个非静态的代码块,那么按照从上到下的顺序依次执行。<br>5. 每次创建对象的时候,都会执行一次。且先于构造器执行。<br>
内部类
当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内<br>部的完整的结构又只为外部事物提供服务,那么整个内部的完整结构最好使<br>用内部类。
在Java中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者<br>称为外部类。
Inner class一般用在定义它的类或语句块之内,在外部引用它时必须给出完<br>整的名称。<br>Inner class的名字不能与包含它的外部类类名相同;
分类: 成员内部类(static成员内部类和非static成员内部类)<br> 局部内部类(不谈修饰符)、匿名内部类
成员内部类作为类的成员的角色:
1.和外部类不同,Inner class还可以声明为private或protected;<br>2.可以调用外部类的结构<br>3.Inner class 可以声明为static的,但此时就不能再使用外层类的非static的成员<br>变量;
成员内部类作为类的角色:
1. 可以在内部定义属性、方法、构造器等结构<br> 2.可以声明为abstract类 ,因此<font color="#c41230">可以被其它的内部类继承</font><br> 3.可以声明为final的<br> 4.编译以后生成OuterClass$InnerClass.class字节码文件(也适用于局部内部类)
注意:
1. 非static的成员内部类中的成员不能声明为static的,只有在外部类或static的成员<br>内部类中才可声明static成员。<br>2. 外部类访问成员内部类的成员,需要“内部类.成员”或“内部类对象.成员”的方式<br>3. 成员内部类可以直接使用外部类的所有成员,包括私有的数据<br>4. 当想要在外部类的静态成员部分使用内部类时,可以考虑内部类声明为静态的
如何声明局部内部类
class 外部类{<br>方法(){<br> class 局部内部类{<br> }<br> }<br> {<br> class 局部内部类{<br> }<br> }<br>}
如何使用局部内部类
1.只能在声明它的方法或代码块中使用,而且是先声明后使用。除此之外的任何地方<br>都不能使用该类<br> 2.但是它的对象可以通过外部方法的返回值返回使用,返回值类型只能是局部内部类<br>的父类或父接口类型<br>
局部内部类的特点
1.内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但<br>是前面冠以外部类的类名和$符号,以及数字编号。<br>2.只能在声明它的方法或代码块中使用,而且是先声明后使用。除此之外的任何地方<br>都不能使用该类。<br>3.局部内部类可以使用外部类的成员,包括私有的。<br>4.局部内部类可以使用外部方法的局部变量,但是必须是final的。由局部内部类和局<br>部变量的声明周期不同所致。<br>5.局部内部类和局部变量地位类似,不能使用public,protected,缺省,private<br>6.局部内部类不能使用static修饰,因此也不能包含静态成员
匿名内部类
匿名内部类不能定义任何静态成员、方法和类,只能创建匿名内部类的一<br>个实例。一个匿名内部类一定是在new的后面,用其隐含实现一个接口或<br>实现一个类。
格式:<br>new 父类构造器(实参列表)|实现接口(){<br>//匿名内部类的类体部分<br>}
匿名内部类的特点:<br>匿名内部类必须继承父类或实现接口<br>匿名内部类只能有一个对象<br>匿名内部类对象只能使用多态形式引用