对象和类
类:把一组对象中相同属性和方法抽象到一个Java源文件就形成了类。
对象:就是类的实例化。
属性:对象的信息。
方法:对象的功能。
如何定义一个类(例子)
public class Test{
int age;
String name;
public void method(){
system.out.print("方法");
}
}
对象的创建和使用
public class Test{
int age;
String name;
public void method(){
system.out.print("方法");
}
public static void main(String[] args) {
Test testOne=new Test();
testOne.age=19;
testOne.name="王五";
testOne.method();
}
}
Java文件之间可以通过类来互相进行通信。
方法与重载
方法用于定义类的某种行为(或功能),其语法结构如下:
访问控制符 [修饰符] 返回值类型 方法名( [参数] ) {
//方法体
}
示例:
public void sayHello(){
System.out.println("Hello");
}
protected final void show(int x){
System.out.println(x);
}
private static int add(int x, int y){
return x+y;
}
返回值类型:
如果方法没有返回值则需要用void类型
方法返回基本数据类型的数据,则返回值类型精度必须高于或等于返回数据所属的数据的精度。
返回引用数据类型的数据,则返回值必须是本类型或或者其父类。
访问控制符
访问控制符分为四种:public、protected、友好的和private。
修饰符
static final synchronized
static:此修饰符修饰的方法可以用类名来调用 修饰的代码块在类加载的时候执行 在类里定义的变量为所有对象共享
非static:修饰的方法 代码块 变量 只能通过创建对象来使用 且静态的代码块 方法 不能使用 非静态的方法和变量(因为非静态的在生成对象后才执行)
全局变量与局部变量
全局变量
直接在类中声明的变量叫成员变量(又称全局变量)
如果未对成员变量设置初始值,则系统会根据成员变量的类型自动分配初始值:int分配初始值0、boolean分配初始值false,而自定义类型则分配初始值null,作用域为整个类。
局部变量
方法中的参数、方法中定义的变量和代码块中定义的变量统称为局部变量。
局部变量的作用域范围从定义的位置开始到其所在语句块结束。
局部变量初始化时必须赋值。
声明局部变量时,数据类型前除final外不允许有其他关键字。
注意
若局部变量与全局变量的名字相同则在局部变量定义开始到该代码块结束默认该标识符为局部变量,若必须引用该全局变量则可用this.全局变量名来调用。
方法重载
同一个类中有多个方法名相同但参数列表不同的方法,这种现象称为方法重载(overload)。
其中参数列表不同包括以下情形:
1、参数的个数不同
2、参数的对应类型不同
注意:
1、参数列表不同并不包含参数名不同,也就是说如果方法名相同,方法中参数个数和类型相同,只是参数名不同,这样也不能称之为方法重载。
2、方法中其它构成部分不参与比较:访问控制符、修饰符、返回值类型。
示例
动态参数
注意:
1、动态参数实质为数组;
2、动态参数必须位于参数列表的最后;
3、一个方法只能有一个动态参数;
public class Test {
public static void print(int... numbers) {
for (int number : numbers) {
System.out.println(number);
}
}
public static void main(String[] args) {
print(1, 2, 3, 4, 5);
}
}
构造方法
构造方法的要求:
构造方法负责初始化类中的实例变量。
构造方法是一种特殊的方法,这种方法必须满足以下语法规则:构造方法必须与类名相同;不包含返回值类型描述部分。
构造方法不能有static和final关键字修饰。
如何使用构造方法
public class TeacherTest {
public static void main(String[ ] args) {
Teacher teacher = new Teacher(); //创建Teacher对象
}
}
此处调用了一个隐式构造方法
若在类中间定义了一个新的显式构造方法则旧的隐式构造方法将不复存在
可以在类中声明一个或多个有参构造方法,但每个构造方法在参数个数或参数数据类型上要有所差别:
类中可以有多个构造方法,构造方法之间可以通过this实现调用,但必须将调用构造函数代码写在有效代码的第一行:
this代表对当前对象的一个引用。