一.面向对象编程的引入
写一个简单的程序输出张三,李四的名字
class Person {
String name;
String getName() {
return "guangdong "+name;
}
};
public class Oop {
public static void main(String args[]) {
Person p1 = new Person();
p1.name = "zhangsan";
Person p2 = new Person();
p2.name = "lisi";
System.out.println(p1.getName());
System.out.println(p2.getName());
}
}
运行结果:
root@ubuntu:/home/topeet/guyilian# javac Oop.java
root@ubuntu:/home/topeet/guyilian# java Oop
guangdong zhangsan
guangdong lisi
在以上代码的基础上我们,添加构造函数,在定义对象的时候就把名字传递过去,构造函数的名字跟类名一样,在构造这个对象的时候就会自动执行这个构造方法。
class Person {
String name;
String getName() {
return "guangdong "+name;
}
/* construct function */
public Person (String n) {
name = n;
}
};
public class Oop2 {
public static void main(String args[]) {
Person p1 = new Person("zhangsan");
Person p2 = new Person("lisi");
System.out.println(p1.getName());
System.out.println(p2.getName());
}
}
运行结果:
root@ubuntu:/home/topeet/guyilian# javac Oop2.java
root@ubuntu:/home/topeet/guyilian# java Oop2
guangdong zhangsan
guangdong lisi
****在5代码的基础上,进行构造函数的重载,同时引入this,如果在一个类里面,类的属性与函数的参数名同名,我们加上this修饰表示是当前对象的属性
class Person {
String name;
int age;
String getName() {
return "guangdong "+name;
}
/* construct method */
public Person () {
name = "null";
age = 0;
}
public Person (String name) {
this.name = name;
}
public Person (String name, int age) {
this.name = name;
this.age = age;
}
};
public class Oop3 {
public static void main(String args[]) {
Person p1 = new Person("zhangsan");
Person p2 = new Person("lisi");
Person p3 = new Person();
Person p4 = new Person("wangwu", 6);
System.out.println(p1.getName());
System.out.println(p2.getName());
System.out.println(p3.getName());
System.out.println(p4.getName());
}
}
运行结果:
root@ubuntu:/home/topeet/guyilian# javac Oop3.java
root@ubuntu:/home/topeet/guyilian# java Oop3
guangdong zhangsan
guangdong lisi
guangdong null
guangdong wangwu
在以上代码的基础上,我们添加类方法printPerson,那样我们不需要定义具体的类对象我们就可以直接用这个方法,同时我们添加一个类属性count,用来统计人数的多少。
class Person {
static int count;
String name;
int age;
String getName() {
return "guangdong "+name;
}
/* construct method */
public Person () {
count++;
name = "null";
age = 0;
}
public Person (String name) {
count++;
this.name = name;
}
public Person (String name, int age) {
count++;
this.name = name;
this.age = age;
}
static void printPerson () {
System.out.println("This is a class of Person");
}
};
public class Oop4 {
public static void main(String args[]) {
Person p1 = new Person("zhangsan");
Person p2 = new Person("lisi");
Person p3 = new Person();
Person p4 = new Person("wangwu", 6);
System.out.println(p1.getName());
System.out.println(p2.getName());
System.out.println(p3.getName());
System.out.println(p4.getName());
Person.printPerson();
System.out.println(Person.count);
}
}
运行结果:
root@ubuntu:/home/topeet/guyilian# javac Oop4.java
root@ubuntu:/home/topeet/guyilian# java Oop4
guangdong zhangsan
guangdong lisi
guangdong null
guangdong wangwu
This is a class of Person
4
在以上代码的基础上,我们引入构造代码块, 每实例化一个对象前,都执行;先于构造方法执行。以上例子中我们要在每个构造函数进行count ++,有了构造代码块我们只需要在构造代码块写一次就够了。同时引入静态构造代码块,实例化第一个对象前,执行;只执行一次。
class Person {
static int count;
String name;
int age;
String getName() {
return "guangdong "+name;
}
static {
System.out.println("static block");
}
{
System.out.println("construct block");
count ++;
}
/* construct method */
public Person () {
System.out.println("construct method: Person 1");
name = "null";
age = 0;
}
public Person (String name) {
System.out.println("construct method: Person 2");
this.name = name;
}
public Person (String name, int age) {
System.out.println("construct method: Person 3");
this.name = name;
this.age = age;
}
static void printPerson () {
System.out.println("This is a class of Person");
}
};
public class Oop5 {
public static void main(String args[]) {
Person p1 = new Person("zhangsan");
Person p2 = new Person("lisi");
Person p3 = new Person();
Person p4 = new Person("wangwu", 6);
System.out.println(p1.getName());
System.out.println(p2.getName());
System.out.println(p3.getName());
System.out.println(p4.getName());
Person.printPerson();
System.out.println(Person.count);
}
}
运行结果:
root@ubuntu:/home/topeet/guyilian# javac Oop5.java
root@ubuntu:/home/topeet/guyilian# java Oop5
static block
construct block
construct method: Person 2
construct block
construct method: Person 2
construct block
construct method: Person 1
construct block
construct method: Person 3
guangdong zhangsan
guangdong lisi
guangdong null
guangdong wangwu
This is a class of Person
4