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);
}
}