6.1 面向对象概述
面向对象的3个核心特性是封装性,继承性,多态性。
6.2 类结构
6.2.1 类的定义
声明类的语法格式如下:
[public ][abstract |final ] class <class_name> [extends <class_name> ]
[implements <interface_name> ] {
//定义属性部分
.....
//定义方法部分
.....
}
//[ ]中的内容可省略
各参数含义如下:
public 表示“共有"的意思,若类被public修饰,则可被其他类和程序访问;
abstract 被其修饰的类为抽象类,不能被实例化。抽象类中可有抽象方法(须被abstract修饰)和具体方法(没被abstract修饰).继承抽象类的所有子类须实现抽象类中的所有抽象方法。
final 被其修饰的类不允许被继承。
class 声明类的关键字。
class_name 类的名称。
extends 表示继承其他类。
implements 表示实现某些接口。
6.2.2 成员变量的定义
声明成员变量的语法如下:
[public |protected | private ] [static ] [final] <type > <variable_name>
各参数的含义:
public |protected | private 表示成员变量的访问权限。类成员修饰符的访问控制权限如下图:
static 表示该成员变量为类变量,也称为静态变量。
final 常量
type 变量类型
variable_name 变量名称
6.2.3 成员方法定义
[public | protected | private ] [static ] [ final | abstract ] [native]
[synchronized ]
<void | return_type> <method_name> ( [paramList]) [throws <exceptionList>]
{
.....
}
各参数说明:
public | protected | private 访问权限
static 表示限定该成员方法为静态方法。
final 不允许被重写或重载。
abstract 表示限定方法为抽象方法。
native 表示方法为本地方法,和抽象方法类似,只有方法声明,没有方法实现,但它把具体实现移交给本地系统的函数库,而没有通过Java虚拟机,可以说是Java与其他语言通信的一种机制。
synchronized 表示为同步方法,用来控制多个并发线程对共享数据的访问。
return_type 表示方法的返回值类型。
method_name 方法名称。
paramList 参数列表。
throws exceptionList 表示抛出异常。
6.2.4 构造方法
注意点:1.构造方法的默认返回类型是对象类型本身,并且构造方法不能被static,final,synchronized,abstract,native修饰。
6.2.5 main( )方法
main( )方法是Java程序执行的入口。作为Application执行的Java程序,有且只能有一个类具有main方法。main方法定义的语法如下:
public static void main ( String[] args)
{
.....
}
注意点:
1.访问控制权限是公有的。
2.主方法是静态的。若在主方法中调用本类的其他方法,则该方法也必须是静态的,否则须创建本类的实例对象,再通过对象调用成员方法。示例如下:
public class Test {
public void AAA() {
System.out.println("AAA");
}
public static void BBB() {
System.out.println("BBB");
}
public static void main ( String[] args)
{
// AAA(); //err
BBB(); //true
Test t =new Test();
t.AAA();
}
3.主方法没有返回值,只能用void.
4.main( )方法具有一个字符串数组参数,用来执行Java程序中的命令行参数。
java Test param1 param2
5.除形参变量名可变外,其余不可改变。
6.2.6 方法的可变参数
语法格式:
methodName ( {paramList},paramType... paramName)
其中,methodName表示方法名称;paramList表示方法的固定参数列表;paramType表示可变参数类型;...是声明可变参数的标识;paramName表示可变参数名称。
注:可变参数必须定义在参数列表的最后。
6.3 对象
6.3.1 对象的创建
1.显示创建对象
(1)使用new 关键字创建对象
(2)调用java.lang.Class 或者java.lang.reflect.Constuctor类的newInstance( )实例方法
(3)调用对象的clone( )方法
(4)调用java.io.ObjectInputStream对象的readObject( )方法(随后详解)
package com.mxl.object;
public class Student implements Cloneable {
private String strName;
private int intAge;
public Student( ){
}
public Student(String name,int age ){
strName = name;
intAge = age;
}
public static void main(String[ ] args) throws Exception {
//使用new创建
Student student1 =new Student("马祥麟",22);
//调用java.lang.Class的newInstance( )方法创建对象
Class c1 = Class.forName("com.mxl.object.Student");
Student student2= (Student) c1.newInstance( );
//调用对象的clone( )方法创建对象
Student student3 =(Student) student1.clone();
}
}
说明:
1.使用new或class对象创建对象时,都会调用类的构造方法;后者会调用默认构造方法。
2.使用Object类创建对象时,不会调用类的构造方法,而是复制一个对象。
3.若类没有实现Cloneable接口,则clone( )会抛异常。
2.隐含创建对象
(1)String strName= "str";
(2)字符串中的"+".
(3)当Java虚拟机加载一个类时,会隐含地创建描述这个类的class实例。