黑马程序员------面向对象(No.2)(封装、构造函数、构造代码块、this)

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ---------------------- 

 

微笑封装(Encapsulation).顺便记个单词呗~大笑

封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

注:函数是代码中最小的封装体。

 

好处:

1.将变化隔离。

2.便于使用。(不用了解内部结构,可以直接使用)

3.提高重用性。(封装后便于重复使用)

4.提高安全性。(将不需要对外提供的内容隐藏,提供公共方法)

 

封装原则:

1.把不需要对外提供的内容隐藏起来。

2.把属性都隐藏,提供公共方法对其访问。

 

private;私有,权限修饰符,用于修饰成员(成员变量,成员函数);私有只在本类中有效。

注:私有仅仅是封装的一种表现形式。  

//private;私有,权限修饰符,用于修饰成员(成员变量,成员函数);私有只在本类中有效。
class Person{
	//私有化,类以外即使建立了对象也不能直接访问,但是这个成员变量需要被操作,就要提供访问age方式。
	private int age;
	//setX(),getX()方法...开发工具可批量生成
	//之所以对外提供访问方式,就是因为可以在访问方式中加入逻辑判断等语句。对访问的数据进行操作。提高代码的健壮性。
	public void setAge(int a){
		if(a>0&&a<130){
			age = a;
			 speak();
		}
		else
			System.out.println("年龄不合法");
	}
	public int getAge(){
		return age;
	}
	void speak(){
		System.out.println("age="+age);
	}
}

class PersonDemo{
	public static void main(String[] args){
		Person p = new Person();
	//	p.age = 20;
		p.setAge(150);
	}
}


 

 微笑构造函数

特点:

1.函数名与类名相同

2.不可以定义返回值类型

3.不可以写return语句

作用:

给对象进行初始化

注意:

1.默认构造函数的特点

2.多个构造函数是以重载形式存在的

 

对象一建立就会调用与之相应的构造函数,当一个类中没有定义构造函数时,那么系统就会默认给该类加入一个空参数的构造函数。当在类中自定义了一个构造函数后,默认的构造函数就没有了。

 

构造函数和一般函数的不同:

1.构造函数和一般函数在写法上不同;在运行上也不同:构造函数是在对象一建立就有运行,而一般函数在对象调用时才执行,是给对象添加对象具备的功能。

2.一个对象建立,构造函数只运行一次,而一般方法可以被对象调用多次

//对象一建立就会调用与之相应的构造函数,当一个类中没有定义构造函数时,那么系统就会默认给该类加入一个空参数的构造函数。
//当在类中自定义了一个构造函数后,默认的构造函数就没有了。
class Person{
	private String name;
	private int age;
	Person(){
		System.out.println("name="+name+",age="+age);
	}
	Person(String n){
		name = n;
		System.out.println("name="+name+",age="+age);
	}
	Person(int a){
		age = a;
		System.out.println("name="+name+",age="+age);
	}
	//什么时候定义构造函数:分析事物时,该事物具有一些特性或者行为,那么将这些内容定义在构造函数中。
	Person(String n,int a){
		name = n;
		age = a;
		System.out.println("name="+name+",age="+age);
	}
	public void setName(String n){
		name = n;
	}
	public String getName(){
		return name;
	}
}
class PersonDemo{
	public static void main(String[] args){
		//Person p1 = new Person();
		//Person p2 = new Person("李四");
		Person p3 = new Person("王五",25);
		p3.setName("赵云");
		p3.setName("赵子龙");
		System.out.println(p3.getName());
	}
}


附加:构造代码块

作用:给对象进行初始化
对象一建立就运行,优先于构造函数执行。和构造函数区别:构造代码块是给所有对象进行统一初始化,而构造函数是给对应的函数初始化构造代码块中定义的是不同对象共性的初始化内容

class Person{
	private String name;
	private int age;
	//构造代码块
	//作用,给对象进行初始化
	//对象一建立就运行,优先于构造函数执行。
	//和构造函数区别:构造代码块是给所有对象进行统一初始化,而构造函数是给对应的函数初始化。
	//构造代码块中定义的是不同对象共性的初始化内容
	{
		System.out.println("person run");
	}
	Person(){
		System.out.println("name="+name+",age="+age);
	}
	//什么时候定义构造函数:分析事物时,该事物具有一些特性或者行为,那么将这些内容定义在构造函数中。
	Person(String n,int a){
		name = n;
		age = a;
		System.out.println("name="+name+",age="+age);
	}
}

 微笑this


this:用于区分局部变量和成员变量同名的情况


this代表他所在函数所属的对象的引用。简单的说:哪个对象在调用this所在的函数,this就代表哪个对象。


this的应用:当定义类中的功能时,该函数内部要用到该函数的对象时,这时用this表示这个对象。但凡本类功能内部使用到本类对象,都用this表示

/*
this:用于区分局部变量和成员变量同名的情况
this代表他所在函数所属的对象的引用。简单的说:哪个对象在调用this所在的函数,this就代表哪个对象。
this的应用:当定义类中的功能时,该函数内部要用到该函数的对象时,这时用this表示这个对象。但凡本类功能内部使用到本类对象,都用this表示
*/
class Person{
	private String name;
	private int age;

	Person(){
		System.out.println("name="+name+",age="+age);
	}
	/*Person(String n){
		name = n;
		System.out.println("name="+name+",age="+age);
	}*/
	//形参 name方便别人根据意思传参
	Person(String name){
		//name = name;左边的name是局部的name。
		this.name = name;
		this.speak();
	}
	Person(int age){
		this.age = age;
	}
	public void speak(){
		System.out.println("name="+this.name+",age="+this.age);
	}
	/*
	需求:定义一个比较是否是同龄人的功能
	*/
	public boolean compare(Person person){
		return(this.age==person.age);
	}
}
class PersonDemo_3{
	public static void main(String[] args){
		Person p = new Person(33);
		Person p2 = new Person(33);
		System.out.println(p.compare(p2));
	}
}

 

this()语句,用于构造函数间进行互相调用


奋斗this()语句,只能定义在构造函数第一行初始化动作要先执行。

/*
this语句,用于构造函数间进行互相调用
this语句,只能定义在构造函数第一行,初始化动作要先执行。
*/
class Person{
	private String name;
	private int age;

	Person(){
	}
	Person(String name){
		this();
		this.name = name;
	}
	Person(String name,int age){
		this(name);//相当于p(name);
		this.age = age;
	}
	}
class PersonDemo_3{
	public static void main(String[] args){
		Person p = new Person("lisi",30);
	}
}

 

 ---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ---------------------- 

详情请查看:http://edu.csdn.net

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值