【JAVA学习笔记】09 匿名对象和封装

时间:2023-02-26 13:17:54

2018.3.27

面向对象的三大特征之封装

class Person {

//成员变量
private String name;//使用private修饰name属性,
private int age;
private char sex;

/* 完成私有化成员变量的setter和getter方法 要求setter方法的名字是 set成员变量名(所需参数) 成员变量名首字母大写 */

public void setName(String n) {
	name=n;
}
public String getName() {
		return name;
}
public void setAge(int n) {
	//age属性生活当中,最起码是没有负数。年纪最大 130
	//这里要做判断。
	if(n<0||n>130) {
		age=16;
	}else {
		age=n;
	}
}
public int getAge() {
		return age;
}
public void setSex(char g) {
	if('m'==g||'w'==g) {
		sex=g;
	}else {
		sex='m';
	}
}
public char getSex() {
		return sex;
}


//成员方法
/* * 代码中,程序只会严格的执行语法规范,数据类型检查,但是不会判断你传入的参数是否和生活实际有冲突。 * * 有一些代码可以符合代码的逻辑,但是完全不符合生活逻辑 * 不符合生活逻辑的 代码是没有任何意义的。 * * * 思考: * 在对成员变量进行赋值的时候,基于语法规范的情况下,要对数据进行一定的约束和判断,让他符合生活逻辑。 * * * 【封装思想】 * 权限修饰符: * public;公开的,公用的。使用public修饰的成员变量或者成员方法任何人都可以通过对象直接使用。 * private;私有的 如果使用private修饰的成员变量或者成员方法只能在【类内】 eg:class{}使用,类外谁都不能用。 * 问题A: * 用private修饰的成员变量和成员方法,类外都不能使用。怎么给成员变量赋值? * 【解决问题】 setter和getter方法 * setter方法是提供给【类外】用来设置【私有话成员变量的方法】 * getter方法是提供给【类外】用来获取【私有话成员变量的数据】 * * 问题B: * 选择使用了封装思想,使用了private权限修饰,也用了setter方法,但是数据还是没有符合生活逻辑。 * 【解决问题】 * 要对setter方法做限制。让代码符合语法逻辑和生活逻辑。 * * 【封装的好处】 * 1.提高了代码的安全性。 * 2.操作数据简单。 * 3.可以隐藏一部分代码。 JAR包 * * 【要求】 所有的类成员变量全部封装,并且按照语法规范和生活逻辑提供对应的setter和getter方法。 * * * */

public void winner() {

		System.out.println("winnerwinner");
	
}

}

public class Demo4 { public static void main (String[] args) {

Person lu = new Person();
	lu.setName("lu");
	lu.setAge(18);
	lu.setSex('M');
	System.out.println("Name"+lu.getName()+"Age:"+lu.getAge()+"Sex:"+lu.getSex());
}

}

匿名对象

class Student {
	//成员对象
	String name;
	int id;
	int age;
	//成员方法
	public void Study() {
		System.out.println("学习学习");
	}
}

public class demo3 {
	public static void main(String[] args) {
		
	Student lu = new Student();
	lu.name = "lu";
	lu.age = 22;
	lu.id = 16;
	//通过类对象来调用成员方法
	lu.Study();
	/*通过类对象调用这个方法,调用了很多无用的东西, 而且该对象在调用了这个方法之后就没有了其他作用。 追求极致的方式,一点到底 上面的方式: 第一:创建的对象有且只调用了一种方法 第二:对象在创建之后不会立即回收,浪费资源 java中提供了一种方式,称之为: 匿名对象:没有对象名,不需要赋值号。 格式: new+类名()+.+调用的方法();*/
	/*总结: * 1.匿名对象可以简化代码的书写,提高效率。eg.x.x.x.x.x * 2.匿名对象不会使用成员变量,语法没有问题,但是没有实际意义,有去无回。 * 3.匿名对象的使用方式 new 类名().调用的方法()或者成员变量;这种方式才有意义。 * * * 前景预告 * 匿名对象的终极挑战: * 匿名内部类的匿名对象直接调用方法。 * android开发中大量使用。 * 作用范围: * 1.直接通过匿名对象调用成员方法。 * 2.匿名对象作为函数/方法的对象 * eg:文件IO操作 String lien = new BufferInputStream(new FileInputStream(new file(文件地址)).read(); * */
	 new Student().Study();
	 new Student().name = "lyb";
	 
	 
	
	}
}