欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

黑马程序员_毕向东_Java基础****学习笔记(十五)

程序员文章站 2022-07-07 23:13:56
...

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

private:私有,权限修饰符:用于修饰类中的成员(成员变量,成员函数)

* 私有只在类中有效
*
* 将age私有化以后,类以外即使建立了对象也不能访问。
*
* 但是人应该有年龄,需要再Person类中提供对应访问age的方式。
*
*
* 注意:私有仅仅是封装的一种表现形式。私有是最小权限。
*
* 之所以对外提供访问方式,就因为可以在访问方式中加入逻辑判断等语句。

* 对访问的数据进行操作。提高代码的健壮性。

/*
* 对象以建立就会调用与之对应的构造函数。
*
* 构造函数的作用:可以用于给对象进行初始化。
*
* 构造函数的小细节:当一个类中没有定义构造函数时,系统会默认给该类加入一个空参数的构造函数。
*
* 当在类中自定义了构造函数后,默认的构造函数就没有了。
*
* 构造函数和一般函数在写法上不同
*
* 在运行商也有不同。
*
* 构造函数时在对象一建立就运行,给对象初始化
*
* 而一般方法时对象调用才执行,给对象添加对象具备的功能。
*
* 一个对象建立,构造函数只运行一次
*
* 而一般方法可以被该对象调用多次。
*
* 什么时候定义构造函数呢?
*
* 当分析事物时,该事物存在一些特性或者行为,那么将这些内容定义在构造函数中。
*/

/*
 * private:私有,权限修饰符:用于修饰类中的成员(成员变量,成员函数)
 * 私有只在类中有效
 * 
 * 将age私有化以后,类以外即使建立了对象也不能访问。
 * 
 * 但是人应该有年龄,需要再Person类中提供对应访问age的方式。
 * 
 * 
 * 注意:私有仅仅是封装的一种表现形式。私有是最小权限。
 * 
 * 之所以对外提供访问方式,就因为可以在访问方式中加入逻辑判断等语句。
 * 对访问的数据进行操作。提高代码的健壮性。
 */
class Person {
	private int age;

	public void setAge(int age) {
		if (age > 0 && age < 130) {
			this.age = age;
			speak();
		} else
			System.out.println("error age");

	}

	public int getAge() {
		return age;
	}

	void speak() {
		System.out.println("age=" + age);
	}
}

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

/*
 * 对象以建立就会调用与之对应的构造函数。
 * 
 * 构造函数的作用:可以用于给对象进行初始化。
 * 
 * 构造函数的小细节:当一个类中没有定义构造函数时,系统会默认给该类加入一个空参数的构造函数。
 * 
 * 当在类中自定义了构造函数后,默认的构造函数就没有了。
 * 
 * 构造函数和一般函数在写法上不同
 * 
 * 在运行商也有不同。
 * 
 * 构造函数时在对象一建立就运行,给对象初始化
 * 
 * 而一般方法时对象调用才执行,给对象添加对象具备的功能。
 * 
 * 一个对象建立,构造函数只运行一次
 * 
 * 而一般方法可以被该对象调用多次。
 * 
 * 什么时候定义构造函数呢?
 * 
 * 当分析事物时,该事物存在一些特性或者行为,那么将这些内容定义在构造函数中。
 */
class Person1{
	private String name;
	private int age;
	
	/*
	 * 构造代码块:
	 * 作用:给对象进行初始化。
	 * 对象以建立就运行,而且优先于构造函数执行
	 * 
	 * 和构造函数的区别:
	 * 构造代码块是给所有对象进行统一初始化,
	 * 而构造函数时给对应的对象初始化。
	 * 
	 * 构造代码块中定义的事不同对象共性的初始化内容。
	 */
	{
		//System.out.println("构造代码块------>");
		cry();
	}
	
	//Person1(){}   //默认的没有参数的构造函数
	
	Person1(){
		System.out.println("我的姓名:"+name+"     年龄"+age);
		//cry();
	}
	/*
	 * this:看上去,是用于区*部变量和成语变量同名的情况。
	 * this为什么可以解决这个问题呢?
	 * this到底代表什么呢?
	 * 
	 * this:就代表本类的对象,到底代表哪一个呢?
	 * 	this代表他所在函数所属对象的引用。
	 * 	简单说:哪个对象在调用所在的函数,this就代表哪个对象。
	 * 
	 * 
	 */
	Person1(String name){
		this.name=name;
		System.out.println("你的姓名:"+name+"     年龄:"+age);
		//cry();
	}
	Person1(String name,int age){
		this.name=name;
		this.age=age;
		System.out.println("他的姓名:"+name+"     年龄"+age);
		//cry()
	}
	public void setName(String name){
		this.name=name;
	}
	public String getName(){
		return name;
	}
	public void cry(){
		System.out.println("cry............");
	}
	public void speak(){
		System.out.println("name="+this.name+"age="+age);
		this.show();
	}
	public void show(){
		System.out.println("show()*******"+name);
	}
}

public class PersonDemo2 {
	public static void main(String [] args){
//		Person1 per=new Person1();
		Person1 per1=new Person1("张三");
		Person1 per2=new Person1("李四",20);
//		per.cry();
//		per1.cry();
//		per2.cry();
//		per1.setName("张三的名字改为\"花花\"");
//		System.out.println(per1.getName());
		per1.speak();
		per2.speak();
	}
}

/*
 * 需求:给人定义一个用于比较年龄是否相同的功能,也就是是否是同龄人
 * 
 * this的应用:当定义类中的功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象
 * 但凡本类功能内部使用到了本类对象,都用this表示。
 * 
 * this语句只能放在构造函数的第一行;因为初始化要先执行
 */

class Person2{
	private String name;
	private int age;
	
	Person2(int age){
		this.age=age;
	}
	Person2(String name){
		this.name=name;
	}
	/*
	 * this语句:用于构造函数之间相互调用。
	 */
	Person2(String name,int age){
		//this.name=name;
		this(name);	//调用上面的构造函数Person(name)
		this.age=age;
		
	}
	
	public boolean compare(Person2 person){
		return this.age==person.age;
	}
	public void speak(){
		System.out.println("name="+this.name+"	age="+age);
	}
}




public class PersonDemo3 {
	public static void main(String [] args){
//		Person2 p1=new Person2(20);
//		Person2 p2=new Person2(25);
//		boolean b=p1.compare(p2);
//		System.out.println(b);
		
		Person2 p3=new Person2("zhangda",30);
		p3.speak();
	}
}

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------