- java项目开发实战入门-java面向对象-类与对象
一、学习总结
-
在控制台编译并运行一个Java程序,使用的命令正确的是 javac Test.java 或者 java Test
-
快速输出数组的方法:System.out.println(Arrays.toString(要输出的数组));
-
方法的重载
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可
如果同一个类中包含了两个或两个以上方法名相同,方法参数的个数、顺序或类型不同的方法,则称为方法的重载,也可称该方法被重载了。如下所示 3 个方法名称都为 print ,但方法的参数有所不同,因此都属于方法的重载。
问: 如何区分调用的是哪个重载方法呢?
答: 当调用被重载的方法时,Java会根据参数的个数和类型来判断应该调用哪个重载方法,参数完全匹配的方法将被执行。 -
构造方法
对象在被创建的时候,也就是被new的时候,会自动调用构造方法。
在构造方法中可以做对象初始化操作;
构造方法与对象的方法不同,它是在对象创建时自动调用的;
构造方法可以有参数,也可以无参数;
构造方法无返回值,也不需要声明void关键字;
构造方法名必须和类名相同;
如果定义的类没有声明构造方法,对象在创建时默认使用空的构造方法。
-
构造方法不可以重载
-
this关键字
关于this关键字,你只需要记住它就是指自身,this即代表自己,this.属性访问的是自己的属性、this()访问的就是自己的无参构造方法。使用:
this.属性
this() 调用构造方法只能写在第一行 -
修饰词static:
static修饰变量,这个变量就变成了静态变量,修饰方法,这个方法就成了静态方法。
static关键字方便在没有创建对象的情况下来进行调用(方法/变量)。
修饰变量
如果一个类的成员变量被static修饰了,那么所有该类的对象都共享这个变量。无论这个类实例化多少对象,它的静态变量只有一份拷贝。用static关键字修饰的方法叫做静态方法,它有一个特点就是不需要创建对象就可以直接使用。
修饰方法:
静态方法不能使用类的非静态变量;静态方法可以直接调用静态方法,但是调用普通方法只能通过对象的实例才能调用。
-
静态代码块
静态代码块是不需要依赖main方法就可以独立运行的。关于静态代码块你只需要记住一句话:在类被加载的时候运行且只运行一次。
二、典型例题
1、
有如下代码:
public class TestMain{
public static void main(String args[]){
MyClass mc1 = new MyClass();
MyClass mc2 = new MyClass();
mc1.a = 100;
mc1.b = 200;
mc2.a = 300;
mc2.b = 400;
System.out.println(mc1.a);
System.out.println(mc1.b);
System.out.println(mc2.a);
System.out.println(mc2.b);
}
}
class MyClass{
static int a;
int b;
}
请问输出结果是(D)
A、
100
100
100
100
B、
100
200
300
400
C、
400
400
400
400
D、
300
200
300
400
2、
class MyClass {
int a;
static int b;
void fa(){
}
static void fb(){
}
public void m1(){
System.out.println(a); //位置1
System.out.println(b); //位置2
fa(); //位置3
fb(); //位置4
}
public static void m2(){
System.out.println(a); //位置5
System.out.println(b); //位置6
fa(); //位置7
fb(); //位置8
}
}
上述代码会出错的位置有:(E、G)
A、位置1
B、位置2
C、位置3
D、位置4
E、位置5
F、位置6
G、位置7
3、
class MyClass {
static int i = 10;
static {
i = 20;
System.out.println("In Static");
}
public MyClass() {
System.out.println("MyClass()");
}
public MyClass(int i) {
System.out.println("MyClass(int)");
this.i = i;
}
}
public class TestMain {
public static void main(String args[]) {
MyClass mc1 = new MyClass();
System.out.println(mc1.i);
MyClass mc2 = new MyClass(10);
System.out.println(mc2.i);
}
}
上述代码的运行结果是:(B)
A、
MyClass()
20
MyClass(int)
10
B、
In Static
MyClass()
20
MyClass(int)
10
C、
In Static
MyClass(int)
20
MyClass()
10
D、
In Static
MyClass()
10
MyClass(int)
20