java基础--面向对象(2)



一、构造函数

一个完整的类由属性和方法构成,其中有一种方法的作用是对对象进行初始化,

这种函数就是构造函数

构造函数的特点:

1、函数名与类名相同

2、不用定义返回类型

3、不可以写return语句

4、一个类可以拥多个构造函,每个构造函数的参数不相同,以重载的形式存在

示例代码:

public class Person {
	String name = "nameless";
	int 		age = 0;
	//无参构造函数
	Person (){
	}
	//构造函数1
	Person(String n) {
		name = n;
	}
	//钩造函数2
	Person(String n,int a) {
		name = n;
		age = a;
	}
	void showWho() {
		System.out.println("name is "+ name + ",age is " + age);
	}
	public static void main(String[] args) {
		Person p1 = new Person();
		Person p2 = new Person("P2");
		Person p3 = new Person("p3",20);
		p2.showWho();
		p3.showWho();		
	}
}
二、构造代码块

在类里面直接写一块由{}括起来的代码,叫构造代码块

public class Person {
	String name = "nameless";
	int 		age = 0;
	//构造代码块
	{
		System.out.println("code is running");
	}
	//无参构造函数
	Person (){
	}
每创建一个对象,构造代码块都会优先于构造函数执行,目的是给所有的对象进

行统一初始化。

三、this关键字

this关键字代表函数所属对象的引用

this关键字的应用一:区分局部变量与成员变量,代码示例:

public class Person {
	String name = "nameless";
	int 		age = 0;
	Person(String name) {
		//成员变量name = 局部变量name
		this.name =name;
	}
this关键字的应用二:当定义类中的方法时,该方法内部要调用到该函数的对象时,

用this来表示这个对象,示例:

	//函数里的this关键字代表调用该函数的对象的引用
	public boolean isSameAge(Person person ) {
		if(this.age ==person.age) {
			return true;
		}
		return false;
	}
	public static void main(String[] args) {
		Person p1 = new Person();
		Person p2 = new Person("P2");
		Person p3 = new Person("p3",20);		
		System.out.println("p1和p2是同龄人" + p1.isSameAge(p2));
		System.out.println("p1和p3是同龄人" + p1.isSameAge(p3));		
	}

有时需要在构造器中调用另一个构造器,可用this关键字做到这一点。上面说this关键字

代表函数所属对象的引用,但是在构造函数中,this加参数列表,则有不同的含义。这表

示对符合参数列表的构造函数的明确调用。如下,this关键字的应用三:

        //钩造函数1	
	Person(String name) {
		//成员变量name = 局部变量name
		this.name =name;
	}	
        //钩造函数2
	Person(String n,int a) {
		this(n);
		age = a;
	}
	void showWho() {
		System.out.println("name is "+ name + ",age is " + age);
	}
	public static void main(String[] args) {
		Person p1 = new Person();
		Person p2 = new Person("P2");
		Person p3 = new Person("p3",20);
		p2.showWho();
		p3.showWho();				
	}
}
四、static关键字

每个对象有共同数据,使用static关键字,可共享数据,节约内存空间。

static修饰的成员变量存在共享区中,也叫方法区。用法如下:

public class Person {
	String name = "nameless";
	int 		age = 0;
	static String country = "CN";

	void showWho() {
		System.out.println("name is "+ name + ",age is " + age
											+"country is "+country);
		
	}
	public static void main(String[] args) {
		Person p1 = new Person();
		Person p2 = new Person("P2");
		Person p3 = new Person("p3",20);
		//给静态成员变量country赋值,所有的对象的country值都发生变化
		Person.country = "EN";
		//p2.country = "EN";
		p2.showWho();
		p3.showWho();				
	}
}
static的特点:

1、随类的加载而加载,随类的消失而消失

2、优先于对象而存在

3、被所有的对象共享

4、可用类名.成员变量,方式调用

静态使用注意事项:

1、静态方法只能访问静态成员变量变量、方法,非静态方法可以访问静态成员

2、静态方法中不可以定义this.super关键字

什么时候使用静态:

1、当对象出现共享数据时,用static

2、当方法的内部没有访问到非静态数据,该方法可以定义成static

典型的静态方法的应用是工具类。为不让其它程序创建工具类的对象,可将构造函数私有化,

private ClassTool(){};

五、main()函数

1、主函数是一个特殊的函数,作为函数的入口,可以被jvm调用

2、public :代表该函数访问的权限是最大的

3、static:代表主函数随着类的加载就已经存在

4、viod:主函数没有具体的返回值

5、main:不是关键字,但可被jvm识别

6、参数是字符串数组。

注意:类中拥有多个不同格式的main函数是合法的,但jvm只会调用固定格式的main函数

六、静态代码块

静态代码用于给类进行初始化,不能使用非静态成员,随着类的加载而加载,并且只执行一次

格式:

static {

           执行语句;

}

class StaticCode {
		static {
			System.out.println("a");
		}
}
class StaticCodeDemo {
	static {
		System.out.println("b");
	}
	public static void main(String[] args) {
		new StaticCode();
		new StaticCode();
		System.out.println("over");
	}
	static {
		System.out.println("c");
	}	
}/*Output:
b
c
a
over
*///:~



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值