首页 > 代码库 > 第七讲:面向对象编程(二)

第七讲:面向对象编程(二)

向前吧,荡起生命之舟,不必依恋和信泊,破浪的船自会一路开放常新的花朵。 


本讲内容:成员变量、方法、方法的重载、构造函数

一、成员变量(类或对象的状态)
(1)、认识成员变量、类变量、实例变量、局部变量、方法参数之间的区别


1、成员变量(field)是没有定义在代码块(包括初始化块、成员方法)中的变量。成员变量是类变量还是实例变量取决于在其声明中是否使用了static关键字。
2、类变量在声明是用了static关键字,它的另一个名字叫静态变量、静态成员变量(static field) 。
3、实例变量是在声明时没有使用static关键字的成员变量,它的另一个名字叫非静态成员变量(non-static field)。
4、定义在代码块里的变量被称为局部变量(local variable)。
5、定义在方法声明中的变量叫方法参数。

区别如下:

public class text {
	static String s1 = "类变量";
	String s2 = "实例变量";
	{
		String s3 = "初始化代码块里的局部变量";
	}
	static {
		String s4 = "静态初始化代码块里的局部变量";
	}
	// <span style="font-family: Arial;">s5</span><span style="font-family: Arial;">方法的参数和方法里的局部变量</span>	public void printString(String s5) {
		String s6 = "方法里的局部变量";
	}
	// 静态类方法(可以直接被类名所调用)
	public static void printString() {
		String s7 = "类方法里的局部变量";
		System.out.println(s7);
	}
	public static void main(String[] args) {
		text.printString(); //直接被类名所调用静态类方法
		Lei08_1 a=new Lei08_1();//创建对象
		a.printString("参数的值");//调用实例方法
	}
}

 
(2)、变量的初始化
实例变量一经定义就会有初始值(默认的,第二讲讲到),局部变量定义时不赋初值而直接使用,编译器会报错

public class text {
	int i;
	{
		int j;
		System.out.println(j);<span style="font-family: Arial;">//会报错</span>	}
	public static void main(String[] args) {
	}
}



二、方法(类或对象的行为)
Java中类的行为由类的成员方法来实现。类的成员方法由方法的声明和方法体两部分组成。


1、修饰符,可选,用于指定谁有权限访问此方法。
2、返回值类型,必选,用于指定该方法的返回值数据类型;如果该方法没有返回值,则要用关键字 void 进行标示。方法的返回值只能有一个。
3、参数列表,可以有0到多个,多个参数之间要用逗号隔开,参数的写法形如:String[] args, int age 这样。
4方法名,必选,命名规则是方法名和变量名的首字母要小写,不要弄个大写方法名出来。
5方法体,可选,
6、大括号,可选,大括号不写的方法叫抽象方法。


注意:属性和方法之间的关系
“状态影响行为,行为影响状态”。如果每个对象都是从同一个类中生成出来,每个对象如果都一摸一样,那么这个世界是不是太无趣了。我们看到上一讲的例子中,小狗的大小属性影响了他叫的方式。通过设置狗大小的方法又改变了它的状态。这些属性和方法的细节上的不同导致了,多姿多彩的对象,我们后面还会讲到更多的技术,也会导致更多的多样性。



三、方法重载 overload
在Java 中允许类定义中多个方法的方法名相同,只要它们的参数声明不同即可。这种情况下,该方法就被称为重载(overloaded ),这种方式就叫做方法重载(method overloading )。方法重载是实现程序多样性的一个重要手段。也可以称作多态的一种表现方式。

class Num{
	public void max(int a,int b){
		System.out.println(a>b?a:b);
	}
	public void max(double a,double b){
		System.out .println(a>b?a:b);
	}
	public void max (int a,int b,int c){
		int max=a>b?a:b;
		System.out.println(max>c?max:c);
	}
}
public class L6 {
	public static void main(String[] args) {
		Num a=new Num();
		a.max(45, 3);
		a.max(3.2, 6.5);
		a.max(8, 9, 2);
	}
}
上面的例子说明了参数的个数,类型和顺序任意一项不同就算不同的参数声明


四、构造函数(即构造方法)
在Java中,对象是构造出来的,特意用了一个new关键字来标示这个创建的过程。

class Lion{
	private String name;
	private int age;
	public Lion() {
		System.out.println("无参数构造方法");
	}
	public Lion(String name,int age){//有参数构造方法
		this.name=name;
		this.age=age;
		System.out.println("姓名:"+name+"\t年龄:"+age);
	}
}
public class L7 {
	public static void main(String[] args) {
		Lion a=new Lion();
		Lion b=new Lion("黎开权", 20);
	}
}
我们看到创建对象的过程就是执行构造函数的过程,而且也看到构造方法也可以重载。

注意:构造函数或者说构造方法,它不是方法。它们之间的三大区别
1、构造函数没有返回值

2、构造函数和类名相同

3、构造函数不能用final、static、abstract修饰


本讲就到这里,Take some time and enjoy it

第七讲:面向对象编程(二)