Java|剖析类内的五类成员:属性、方法、构造器、代码块、内部类

JAVA的哲学是一切皆类,全部代码都写在类内 。Java是纯面向对象的编程语言,类是其基石 。
Java类有五类成员:
class Person{// ① 属性,或成员变量String name;boolean isMarried;// ③ 构造器public Person(){}public Person(String n, boolean im){// 构造器重载name = n;isMarried = im;}// ② 方法,或函数public void walk(){System.out .println("人走路?");}public String display(){return "名字是:"+name+",Married: "+isMarried ;}// ④ 代码块{name = "HanMeiMei";isMarried = true;}// ⑤ 内部类class pet{String name;float weight;}}1 类的成员之属性(数据)类封装数据和操作这些数据的函数(方法,通常是操作封装的数据) 。
1.1 数据按存储类型可以分为:
1.1.1 基本数据类型 (如int 、Boolean;
1.1.2 引用数据类型 。
1.2 数据按作用域可以分为:
1.2.1 在方法体外,类内声明的变量称为成员变量(属性) 。

1.2.1.1 实例变量(不以static修饰,与具体对象相关,有差异化);
1.2.1.2 类变量(以static修饰,与类全部对象相关);
1.2.2 在方法体内部声明的变量称为局部变量 。
1.2.2.1 形参(方法、构造器定义的变量);
1.2.2.2 方法局部变量(在方法内定义);
1.2.2.3 代码块局部变量(在代码块定义);
2 类的成员之方法方法是类或对象行为特征的抽象,用来完成某个功能操作 。在某些语言中也称为函数或过程 。
将功能封装为方法的目是,可以实现代码重用简化,Java 里的方法不能独立存在,所有必须定义类里 。
Java里方法的参数传递方式只有一种:值传递 。即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响 。
All parameters are passed to methods using pass-by-value. For a parameter of a primitive type, the actual value is passed; for a parameter of a reference type, the reference for the object is passed.
形参是基本数据类型时,将实参基本数据类型变量的“数据值”传递给形参;
形参是引用数据类型时,将实参引用数据类型变量的“地址值”传递给形参;
A method cannot modify a parameter of a primitive type (that is, numbers or boolean values).
A method can change the state of an object parameter.
A method cannot make an object parameter refer to a new object.
类属性作为该类各个对象之间共享的变量 。在设计类时,分析哪些属性不因对象的不同而改变,将这些属性设置为类属性 。相应的方法设置为类方法 。
如果方法与调用者无关,则这样的方法通常被声明为类方法,由于不需要创建对象就可以调用类方法,从而简化了方法的调用 。
在同一个类中,允许存在一个以上的同名方法,只要它们参数个数或参数类型不同(与返回值类型无关) 。
方法也可以递归调用(一个方法体内调用它自己) 。
3 类的成员之构造器数据的初始化很重要,成员变量同样如此 。面向对象的语法机制能够确定对象创建即初始化创建时自动调用一个初始化成员变量的方法,这个方法称为构造器,为确定不同的初始化方法来构建不同的对象,构造器也可以重载 。
构造器的特征:
① 名称与类名相同;
② 不声明返回值类型,不能有return 语句;
③ 不能被 static 、final、synchronized、abstract 、native修饰 。
根据参数不同,构造器可以分为如下两类:
隐式无参构造器(系统默认提供);
显式定义一个或多个构造器(无参、有参) 。
Java语言中,每个类都至少有一个构造器,也可以重载多个,默认构造器的修饰符与所属类的修饰符一致 。
一旦显式定义了构造器,则系统不再提供默认构造器 。
类方法都隐式包含一个表示其对象的关键字this,this可以调用本类的其它方法、构造器和引用数据成员 。
在继承体系中,子类可以使用关键字super调用父类的构造函数 。
4 类的成员之代码块对类内数据成员的初始化,除了使用构造器,还可以使用代码块 。
(有点类似于C++的初始化列表,先于构造函数执行 。)
类的static数据成员的初始化使用静态代码块(用static修饰),由此,代码块分为两类:
4.1 静态代码块:用static 修饰的代码块 。
static代码块通常用于初始化static的属性
class Person {public static int total;static {total = 100;//为total赋初值}…… //其它属性或方法声明}


推荐阅读