学习笔记七:面向对象编程(二)

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


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

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


1、成员变量(field)是没有定义在代码块(包括初始化块、成员方法)中的变量。成员变量是类变量还是实例变量取决于在其声明中是否使用了static关键字。
2、类变量在声明是用了static关键字,它的另一个名字叫静态变量、静态成员变量(static field) 。

static的特点:

a、放在共享区的只有一份;

b、随着类的加载而被加载,优先于对象的存在;

c、除了可以被对象调用外,还可以被类名直接调用(类名.静态成员);


3、实例变量是在声明时没有使用static关键字的成员变量,它的另一个名字叫非静态成员变量(non-static field)。
4、定义在代码块里的变量被称为局部变量(local variable)。
5、定义在方法声明中的变量叫方法参数。

区别如下:

<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">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("参数的值");//调用实例方法
	}
}
</span></span></span>

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

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



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


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


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



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

<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">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);
	}
}</span></span></span></span>
上面的例子说明了参数的个数,类型和顺序任意一项不同就算不同的参数声明


四、方法的覆盖

1、子类有一个方法和父类某个方法的名称、返回类型、参数完全一样,那么我们就说子类的这个方法覆盖了父类的那个方法。

2、子类的方法的访问权限大于等于父类方法的权限。


五、构造函数(即构造方法)

1、构造方法与类名相同。

2、构造方法没有返回值。

3、主要作用是初始化类的成员属性(变量)。

4、在创建对象时,系统会自动的调用该类的构造方法。

5、一个类可以有多个构造方法。

6、每个类都有一个默认的构造方法(无参数的)。
在Java中,对象是构造出来的,特意用了一个new关键字来标示这个创建的过程。

<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">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);
	}
}</span></span></span></span>
我们看到创建对象的过程就是执行构造函数的过程,而且也看到构造方法也可以重载。

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

2、构造函数和类名相同

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


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值