Java学习第四课

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
eclipse快速生成get,set方法和构造函数
在这里插入图片描述
在这里插入图片描述

/**
 * 面向对象:以对象为单位,通过调度、组合不同对象完成事情
 * 面向过程:以步骤为单位,一步一步完成一个具体的事情
 */
package class3;

public class Test1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//除了八种基本数据类型以外,都是引用数据类型,包括数组
		Horse horse = null;//声明一个类的变量
		horse = new Horse();//创建一个Horse类型的实例对象
		horse.name = "赤兔马";//调用对象的属性
		horse.age = 36;
		horse.run();//调用对象的方法
		horse.eat();
		//匿名对象:只能使用一次,使用完后就会被释放
		new Horse().eat();
		horse = null;//把对象释放
		horse.eat();//释放后对象不存在,再调用就会报错(空指针)
	}
	public static class Horse{
		String name;
		int age;
		public void run() {
			System.out.println("我是"+name+",我"+age+"岁了,我日行千里");
		}
		public void eat() {
			System.out.println("我吃草");
		}
		
	}
}

在这里插入图片描述

package class3;

public class Test3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Horse h1 = null;
		Horse h2 = null;
		h1 = new Horse();
		h1.name = "小白";
		h1.age = 3;
		h2 = h1;//对象之间的赋值,相同类型才能赋值,此时h1和h2指向同一块堆内存
		h2.name = "小黑";
		System.out.println(h2.name);
		
	}
	public static class Horse {
		String name;
		int age;
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public int getAge() {
			return age;
		}
		public void setAge(int age) {
			this.age = age;
		}
		
	}
}

在这里插入图片描述
在这里插入图片描述
封装性:隐藏实现细节,对外提供访问接口
优点:1.模块化,便于维护
2.信息隐藏
3.代码重用
4.插件化易于调试
5.具有安全性
缺点:影响执行效率

如果属性没有封装,那么在本类之外创建对象后,可以直接访问属性

在这里插入图片描述
private关键字:访问权限修饰符。
public:公有,可以被类外部的其他类访问
private:私有,只能在本类中访问

想要在类外部访问私有属性,我们需要提供公有的方法来间接访问

package class3;

public class Test2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Person p1 = new Person();
		//p1.name = "黑";//封装前,封装后就不能用了
		//System.out.println(p1.name);
		p1.setName("黑");
		p1.setAge(18);
		System.out.println("我的名字叫: "+p1.getName()+"我的年龄是:"+p1.getAge());
	}
}
class Person{
	//属性的封装
	private String name;
	private int age;
	//对外提供一个获取name属性的方法
	public String getName() {
		return name;
	}
	//对外提供一个name属性设值的方法
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

/**
 * 构造方法:类构造对象时调用,用于初始化对象
 * 是实例化(new)一个类的对象时最先调用的方法
 */
package class3;

public class Test4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Dog d = new Dog();
		Dog d2 = new Dog("阿福");
		Dog d1 = new Dog("旺财",12);
		System.out.println(d2.getName());
		System.out.println(d1.getName()+d1.getAge());
	}

}
class Dog{
	public Dog() {
		System.out.println("构造方法执行了");
	}
	public Dog(String name) {
		this.name = name;
		System.out.println("带一个参数的构造方法执行了");
	}
	public Dog(String name,int age) {
		this(name);//调用其他构造方法时,此语句必须在第一句,在构造方法相互调用时必须要有出口
		//this.name = name;
		this.age = age;
		System.out.println("带两个参数的构造方法执行了");
	}
	String name;
	int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}

this关键字
1.表示当前对象
在方法被调用的过程中,哪个对象调用了方法,在方法内的this就表示谁
在这里插入图片描述
cat.setName(“咪咪”);cat调用了setName,在setName中this.name这个this代表cat

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
字符串本身就是一个对象
在这里插入图片描述
在这里插入图片描述
一对一关系,通过英雄得到兵器

package class3;

public class Test5 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Hero h = new Hero("刘备",34);
		Weapon w = new Weapon("双股剑",3);
		/*Hero h = new Hero();
		h.setName("刘备");
		h.setAge(34);
		*/
		//把两个对象关联起来
		h.setWeapon(w);
		w.setHero(h);
		
		//通过英雄来获取他的信息
		System.out.println("姓名:"+h.getName()+" 年龄:"+h.getAge());
		Weapon w1 = h.getWeapon();
		String name1 = w1.getName();
		System.out.println("武器:"+name1+" 等级:"+w1.getGrade());
		
		String name2 = h.getWeapon().getName();
		System.out.println("武器:"+name2+" 等级:"+h.getWeapon().getGrade());
	}

}
class Hero{
	private String name;
	private int age;
	private Weapon weapon;//1对1关系
	
	public Hero() {
		super();
	}
	public Hero(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public Weapon getWeapon() {
		return weapon;
	}
	public void setWeapon(Weapon weapon) {
		this.weapon = weapon;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}
class Weapon{
	private String name;
	private int grade;
	private Hero hero;
	
	public Weapon() {
		super();
	}
	
	public Weapon(String name, int grade) {
		super();
		this.name = name;
		this.grade = grade;
	}

	public Hero getHero() {
		return hero;
	}
	public void setHero(Hero hero) {
		this.hero = hero;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getGrade() {
		return grade;
	}
	public void setGrade(int grade) {
		this.grade = grade;
	}
	
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package class3;

public class Test6 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		/*Role beibei = new Role("刘备","蜀国");
		Role yunchang = new Role("关羽","蜀国");
		Role zhangfei  = new Role("张飞","蜀国");*/
		
		Role beibei = new Role("刘备");
		Role yunchang = new Role("关羽");
		Role zhangfei  = new Role("张飞");
		System.out.println(beibei.getInfo());
		System.out.println(yunchang.getInfo());
		System.out.println(zhangfei.getInfo());
		System.out.println(Role.country);
	}

}
class Role{
	private String name;
	//private String country;
	static String country = "蜀国";//静态变量,全局变量
	
	public Role() {
		super();
	}
	
	/*public Role(String name, String country) {
		super();
		this.name = name;
		this.country = country;
	}*/
	
	public Role(String name) {
		super();
		this.name = name;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	/*public String getCountry() {
		return country;
	}
	public void setCountry(String country) {
		this.country = country;
	}*/
	public String getInfo() {
		return "name="+name+",country"+country;
	}
	
}

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

/**
 * 单例模式:一个类仅有一个实例,并提供一个访问它的全局访问点
 */
package class3;

public class Test8 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Singleton1 s1 = Singleton1.getInstance();
		s1.print();
		Singleton2 s2 = Singleton2.getInstance();
		s2.print();
		
		//System.out.println(s1==s2);
	}

}
//饿汉式:占内存时间长,提高效率
class Singleton1{
	private Singleton1() {}
	private static Singleton1 s = new Singleton1();
	public static Singleton1 getInstance() {
		return s;
	}
	public void print() {
		System.out.println("饿汉式");
	}
}
//懒汉模式:占用时间短,效率低
class Singleton2{
	private Singleton2() {}
	private static Singleton2 s;
	public static Singleton2 getInstance() {
		if(s==null) {
			s= new Singleton2();
		}
		return s;
	}
	public void print() {
		System.out.println("懒汉模式");
	}
	
}

对象数组案例

package class3;
import java.util.Arrays;
public class Test7 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ChickenManager cm = new ChickenManager(5);
		cm.add(new Chicken("小下",1,10));
		cm.add(new Chicken("小信",2,10));
		cm.add(new Chicken("小去",3,10));
		cm.add(new Chicken("小是",4,10));
		cm.add(new Chicken("小和",5,10));
		cm.add(new Chicken("小看",6,10));
		System.out.println("数组的长度为:"+cm.length());
		System.out.println("------------findAll--------------");
		cm.printAll();
		
		System.out.println("------------find--------------");
		Chicken c = cm.find(6);
		c.print();
		
		System.out.println("------------update--------------");
		cm.update(new Chicken("下蛋公鸡",1,10));
		cm.printAll();
		
	}

}
class ChickenManager{
	private Chicken[] cs = null;
	private int count = 0;//记录数组元素个数(下标)
	public ChickenManager(int size) {
		if(size>0) {
			cs = new Chicken[size];
		}else {
			cs = new Chicken[5];
		}
	}
	public int length() {
		return cs.length;
	}
	//添加:实现动态数组
	public void add(Chicken c) {
		if(count>=cs.length) {//数组已满,需要扩充
			//算法1:扩充原来数组大小的一半  cs.length*3/2+1
			//算法2:扩充原来的一倍   cs.length*2
			int newLen = cs.length*2;
			cs = Arrays.copyOf(cs, newLen);
		}
		cs[count] = c;
		count++;
	}
	//删除
	public void delete(int id) {
		for(int i = 0;i<count;i++) {
			if(cs[i].getId()==id) {
				//找到要删除的对象
				for(int j=i;j<count-1;j++) {
					cs[j]=cs[j+1];//把该对象之后的数向前移动一位
				}
				//把最后一个对象赋值为空(删除)
				cs[count-1] = null;
				count--;//下标减一
				break;
			}
		}
	}
	//更新
	public void update(Chicken c) {
		Chicken temp = find(c.getId());
		if(temp!=null) {
			temp.setName(c.getName());
			temp.setAge(c.getAge());
		}
	}
	//查找
	public Chicken find(int id) {
		for(int i = 0;i<count;i++) {
			if(cs[i].getId() == id) {
				return cs[i];
			}
		}
		return null;
	}
	//输出所有
	public void printAll() {
		for(int i= 0;i<count;i++) {
			cs[i].print();
		}
	}
}
class Chicken{
	private String name;
	private int id;
	private int age;
	
	public Chicken() {
		super();
	}
	
	public Chicken(String name, int id, int age) {
		super();
		this.name = name;
		this.id = id;
		this.age = age;
	}

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public void print() {
		System.out.println("name="+name+"id="+id+"age="+age);
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值