Demo③ --> java 学习历程

来源:互联网 发布:·淘宝 编辑:程序博客网 时间:2024/06/06 01:28

TestAnimal.java

package day09;abstract class Animal{  //对子类进一步抽象  "泛化"//提供三个私有的成员变量属性封装private int id;          //唯一标识private String name;  //名称private int age;        //年龄//构造方法public Animal() {super();System.out.println("Animal()...");}public Animal(int id, String name, int age) {super();this.id = id;this.name = name;this.age = age;System.out.println("Animal(int,String,int)...");}//getter/setter方法public int getId() {return id;}public void setId(int id) {this.id = id;}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;}//业务方法吃抽象方法//有抽象方法的类必须是抽象类public abstract void eat(String food);//业务方法显示所有属性的方法//常用于测试对象的状态public void show(){System.out.println("Id:" + id + ",Name:"+name +",Age:" + age);}}//Cat "is-a" Animalclass Cat extends Animal{public Cat() {super();System.out.println("Cat()...");}public Cat(int id, String name, int age) {super(id, name, age);System.out.println("Cat(int,String,int)...");}//覆盖Animal中的eat方法@Overridepublic void eat(String food){System.out.println("Cat:"+getName() + " eat " + food);} //Cat类特有的业务方法捉老鼠public void catchMouse(){System.out.println("Cat:"+getName()     +" catch Mouse.");}}//Dog "is-a" Animalclass Dog extends Animal{public Dog() {super();System.out.println("Dog()...");}public Dog(int id, String name, int age) {super(id, name, age);System.out.println("Dog(int,String,int)...");}//覆盖eat方法@Overridepublic void eat(String food){System.out.println("Dog:" + getName() + " eat " + food);}//Dog特有的业务方法看家public void watchHouse(){System.out.println("Dog:" + getName()+ " watch House.");}}//Mouse "is-a" Animalclass Mouse extends Animal{public Mouse() {super();System.out.println("Mouse()...");}public Mouse(int id, String name, int age) {super(id, name, age);System.out.println("Mouse(int,String,int)...");}//子类需要实现父类中的抽象方法//实现本质就是方法的覆盖@Overridepublic void eat(String food){System.out.println("Mouse:" + getName()+ " eat " + food);}}//Fish "is-a" Animalclass Fish extends Animal{public Fish() {super();System.out.println("Fish()...");}public Fish(int id, String name, int age) {super(id, name, age);System.out.println("Fish(int,String,int)...");}//实现Animal中的抽象方法 eat@Overridepublic void eat(String food){System.out.println("Fish:" + getName()+ " eat " + food);}}//动物园类class Zoo{//1. 在参数表中使用多态public void feed(Animal a1, Animal a2){if(a1 instanceof Cat && a2 instanceof Fish){a1.eat(a2.getName());}if(a1 instanceof Cat && a2 instanceof Mouse){a1.eat(a2.getName());}if(a1 instanceof Dog && a2 instanceof Mouse){System.out.println("狗不拿耗子");}}}//动物工厂类工厂模式 Factoryclass AnimalFactory{//2.在返回值类型使用多态public static Animal getAnimal(int msg){if(msg==1){return new Cat();}else if(msg==2){return new Dog();}else if(msg==3){return new Fish();}else{return null;}}}public class TestAnimal {public static void main(String[] args) {Animal a1 = new Cat(1, "加菲猫", 3);a1.eat("三文鱼");Animal a2 = new Dog(2, "旺财", 5);a2.eat("叉烧肉");Animal a3 = new Mouse(3, "土拨鼠", 1);a3.eat("珍珠米");//实现一个问题让a1捉老鼠?//使用强制类型转换 Animal -> Cat//此时就能够调用Cat中特有的方法if(a1 instanceof Cat){  //trueCat c1 = (Cat)a1;c1.catchMouse();}if(a1 instanceof Dog){   //falseDog d1 = (Dog)a1;  //不会执行d1.watchHouse();}if(a2 instanceof Dog){   //trueDog d2 = (Dog)a2;d2.watchHouse();}Zoo zoo = new Zoo();Animal f1 = new Fish(4,"沙丁鱼",2);zoo.feed(a1, a3);zoo.feed(a1, f1);zoo.feed(a2, a3);//通过工厂获取产品Animal a5 = AnimalFactory.getAnimal(1);if(a5 instanceof Cat){Cat c2 = (Cat)a5;c2.setId(5);c2.setName("波斯猫");c2.setAge(3);c2.eat("意大利面");c2.show();c2.catchMouse();}System.out.println("---------------");//3.一视同仁//通过父类类型数组管理子类对象Animal[] as = new Animal[5];as[0] = new Cat(101, "加菲猫", 3);as[1] = new Dog(102, "牧羊犬", 5);as[2] = new Dog(103, "史努比", 1);as[3] = new Fish(104, "比目鱼", 2);as[4] = new Mouse(105, "米老鼠", 1);for(int i=0; i<as.length; i++){as[i].eat("哈根达斯"); //as[i]是Animal类型}}}

TestAbstract.java

package day09;//抽象类 A 具备两个抽象方法abstract class A{private int m;   //抽象类可以有成员变量public A(){}      //抽象类可以有构造方法public A(int m){this.m = m;}public abstract void m1();public abstract void m2();}//类B 继承A类必须实现A类中所有抽象方法class B extends A{@Override    //实现的本质——覆盖public void m1(){System.out.println("B_m1()...");}@Overridepublic void m2(){System.out.println("B_m2()...");}}//类C 继承A类实现部分方法//此时C也必须定义为抽象类不能new C();abstract class C extends A{@Overridepublic void m1(){System.out.println("C_m1()...");}}//抽象类C中的抽象方法最终一定会被实现class D extends C{//The type D must implement the inherited abstract method A.m2()@Overridepublic void m2(){System.out.println("D_m2()...");}}abstract class E{//结论:bstract只能和public或protected搭档修饰方法//public abstract final void m1();//public abstract static void m1();}public class TestAbstract {public static void main(String[] args) {//Cannot instantiate the type A//new A();   //抽象类不能直接new 实例化//抽象类不能直接实例化//但是可以使用抽象类的引用指向实现类对象//同样满足多态的三大定理A a1 = new B();a1.m1();a1.m2();A a2 = new D();a2.m1();a2.m2();}}

TestInterface.java

package day10;//抽象类abstract class MyClassC{public static final int A = 1;public static final int B = 2;public abstract void m1();public abstract void m2();}//接口IAinterface IA{//public IA(){}  接口中不能有构造方法int A=1;   //public static final int A = 1;int B=2;   //public static final int B = 2;void m1(); //public abstract void m1();void m2(); //public abstract void m2();}//接口IBinterface IB{public void m3();}//抽象类MyClassAabstract class MyClassA{public abstract void ma();}//1.一个类可以实现一个接口实现其中所有方法//MyClass1 "is-a" IAclass MyClass1 implements IA{public void m1(){System.out.println("m1()...");}public void m2(){System.out.println("m2()...");}}//2.一个类可以同时实现多个接口class MyClass2 implements IA, IB{public void m1(){System.out.println("m1()...");}public void m2(){System.out.println("m2()...");}public void m3(){System.out.println("m3()...");}}//3.一个类可以继承一个父类,并且实现一个或多个接口class MyClass3 extends MyClassA                          implements IA, IB{public void ma(){System.out.println("ma()...");}public void m1(){System.out.println("m1()...");}public void m2(){System.out.println("m2()...");}public void m3(){System.out.println("m3()...");}}//4.一个接口可以实现一个或者多个接口interface IC extends IA, IB{}class MyClass4 implements IC{@Overridepublic void m1() {System.out.println("m1()...");}@Overridepublic void m2() {System.out.println("m2()...");}@Overridepublic void m3() {System.out.println("m3()...");}}public class TestInterface {public static void main(String[] args) {MyClass3 mc1 = new MyClass3();//只有满足"is-a"关系 instanceof一定为trueSystem.out.println(mc1 instanceof MyClass3); //trueSystem.out.println(mc1 instanceof Object);   //trueSystem.out.println(mc1 instanceof IA);    //trueSystem.out.println(mc1 instanceof IB);    //trueSystem.out.println(mc1 instanceof MyClassA); //trueSystem.out.println(mc1 instanceof IC);    //false//System.out.println(mc1 instanceof String);System.out.println("---------------");MyClass4 mc2 = new MyClass4();System.out.println(mc2 instanceof Object); //trueSystem.out.println(mc2 instanceof MyClass4); //trueSystem.out.println(mc2 instanceof IA); //trueSystem.out.println(mc2 instanceof IB); //trueSystem.out.println(mc2 instanceof IC); //true//System.out.println(mc2 instanceof MyClassA); //}}

TestCarPerson.java

package day10;//人类abstract class Person{   //是CarPerson的主类型private String name;public Person(){}public Person(String name){this.name = name;}public String getName(){return name;}public abstract void talk();   //交谈}interface Car{  //CarPerson的次要类型public void run();   //奔跑}class CarPerson extends Person implements Car{public CarPerson(){ }public CarPerson(String name){super(name);}public void talk(){System.out.println(getName() + " talk...");}public void run(){System.out.println(getName() + " run-->");}}public class TestCarPerson {public static void main(String[] args) {CarPerson cp = new CarPerson("大黄蜂");cp.talk();cp.run();}}

TestTeacher.java

package day10;//所有老师类的父类abstract class Teacher{public abstract void teach();}//能够讲Java课功能的接口interface TeachJavaAble{public void teachJava();}//能够游泳的功能接口interface Swimable{public void swim();}//能够烹饪的功能接口interface Cookable{public void cook();}//Java老师会讲Java课、游泳、烹饪class JavaTeacher extends Teacher        implements TeachJavaAble,                         Swimable, Cookable {@Overridepublic void teach() {teachJava();}public void teachJava() {System.out.println("teach Java...");}public void swim() {System.out.println("swim...");}public void cook() {System.out.println("cook...");}}public class TestTeacher {public static void main(String[] args) {//使用父类引用指向子类对象类多态Teacher t1 = new JavaTeacher();t1.teach();//t1.cook();//t1.swim();if(t1 instanceof Swimable){Swimable s1 = (Swimable)t1;s1.swim();}if(t1 instanceof Cookable){Cookable c1 = (Cookable)t1;c1.cook();}}}


package day10;//Sun公司服务的制定者通过接口设计//驱动接口interface Driver{public void connect();   //连接数据库}//驱动管理器工厂模式class DriverManager{public static Driver getDriver(int msg){if(msg == 1){return new OracleDriver();}else if(msg == 2){return new DB2Driver();}else if(msg == 3){return new SqlServerDriver();}else{return null;}}}//Oracle公司class OracleDriver implements Driver{public void connect(){System.out.println("Oracle connect...");}}//IBM公司class DB2Driver implements Driver{public void connect(){System.out.println("DB2 connect...");}}//MicroSoft公司class SqlServerDriver implements Driver{public void connect(){System.out.println("SqlServer connect...");}}public class TestJdbc {public static void main(String[] args) {//服务的使用者程序员连接数据库//面向接口编程//满足开闭原则只需要添加实现类即可Driver driver = DriverManager.getDriver(1);driver.connect();}}


package day10;//对象的序列化接口标识接口import java.io.Serializable;//使用JavaBean规范public class Student implements Serializable{//私有成员变量private int id;         //唯一标识private String name; //姓名private int age;       //年龄//构造方法public Student() {super();}public Student(int id, String name, int age) {super();this.id = id;this.name = name;this.age = age;}//getter/setterpublic int getId() {return id;}public void setId(int id) {this.id = id;}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;}//覆盖Object中的equals方法@Overridepublic boolean equals(Object obj){if(obj == null){  //和null比较一定falsereturn false;}if(obj == this){ //地址相同值一定相同return true;}//比较类型类型相同再比较值// GoodStudent是Student的子类 id name age//instanceof 不能够排除子类对象//if(obj instanceof Student){//getClass方法返回的类型的对象if(obj.getClass() == this.getClass()){//如果是同一种类型强制转换后比较Student stu = (Student)obj;if(stu.id == this.id && stu.name.equals(this.name) && stu.age == this.age){return true;   //返回true}}//类型不同一定falsereturn false;}//覆盖hashCode方法@Overridepublic int hashCode(){int prime = 31;//String也覆盖了hashCode方法int n1 = this.name.hashCode();int result = prime*47 + id + n1 + age;return result;}//覆盖toString方法对象的字符串表达//常用于对象值的查看用于调试@Overridepublic String toString() {return "Id:" + id + " Name:" + name        + " Age:" + age;}}

TestStudent.java

package day10;//测试Object中的主要方法public class TestStudent {public static void main(String[] args) {Student stu1 = new Student(1,"Tom",23);Student stu2 = new Student(2,"James",21);Student stu3 = new Student(1,"Tom",23);// ==比较的是对象内存地址System.out.println(stu1 == stu3); //falseboolean b1 = stu1.equals(stu2);   //falseSystem.out.println(b1);boolean b2 = stu1.equals(stu3);   //trueSystem.out.println(b2);int h1 = stu1.hashCode();int h2 = stu2.hashCode();int h3 = stu3.hashCode();System.out.println(h1);System.out.println(h2);System.out.println(h3);System.out.println(stu1.toString());System.out.println(stu2.toString());System.out.println(stu3.toString());//将十进制数转化为十六进制数字符串String s1 = Integer.toHexString(h1);String s2 = Integer.toHexString(h2);String s3 = Integer.toHexString(h3);System.out.println(s1);System.out.println(s2);System.out.println(s3);//以下都会隐式调用stu1.toString()方法System.out.println(stu1);  //直接打印引用String s5 = stu1 + "Hello"; //字符串拼接时System.out.println(s5);}}

TestArrayList.java

package day11.collection;import org.junit.Test;import java.util.Iterator;  //迭代器import java.util.List;    //List接口import java.util.ArrayList; //实现类public class TestArrayList {@Testpublic void test01(){List list = new ArrayList();System.out.println(list); //默认list.toString()//增加元素按插入顺序添加list.add("JavaSE");   //追加list.add("Oracle");//插入元素下标从0开始list.add(1, "SqlServer");  //指定位置插入System.out.println(list);//修改元素根据下标list.set(1, "Unix");System.out.println(list);//删除元素list.remove(1);System.out.println(list);//查找某个元素通过下标获取Object obj = list.get(0);System.out.println(obj);}@Testpublic void test02(){//集合的遍历List list = new ArrayList();list.add("Windows");list.add("JavaSE");list.add("SqlServer");list.add("Oracle");System.out.println(list);//1.基于下标的遍历底层数组实现//list.size() 方法返回元素个数for(int i=0; i<list.size(); i++){System.out.print(list.get(i) + " ");}System.out.println();//2.for-each遍历不能记录下标for(Object obj : list){System.out.print(obj + " ");}System.out.println();//3.迭代遍历迭代模式遍历Set//先获取一个迭代器对象//java.util.Iterator类型Iterator it = list.iterator();while(it.hasNext()){  //有没有下一个Object obj = it.next(); //取每个元素System.out.print(obj + " ");}System.out.println();}}


TestHashSet.java

package day11.collection;//Set元素无序,不可以重复import java.util.Set;import java.util.HashSet;public class TestHashSet {public static void main(String[] args) {Set set = new HashSet();set.add("One");set.add("Two");set.add("Three");set.add("One");  //重复元素舍弃Student stu1 = new Student(1,"Tom",23);Student stu2 = new Student(2,"James",21);Student stu3 = new Student(1,"Tom",23);set.add(stu1);set.add(stu2);set.add(stu3);  //需要舍弃//需要覆盖equals和hashCode方法//String已经覆盖了equals和hashCode方法//System.out.println(set);for(Object obj : set){System.out.println(obj);}}}


Student.java

package day11.collection;public class Student {private int id;private String name;private int age;//构造方法public Student() {super();}public Student(int id, String name, int age) {super();this.id = id;this.name = name;this.age = age;}//getter/setterpublic int getId() {return id;}public void setId(int id) {this.id = id;}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;}//覆盖equals和hashCode方法保证Set中元素不重复@Overridepublic int hashCode() {System.out.println("hashCode:"+id);final int prime = 31;int result = 1;result = prime * result + age;result = prime * result + id;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic boolean equals(Object obj) {System.out.println("equals:"+id);if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Student other = (Student) obj;if (age != other.age)return false;if (id != other.id)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}//覆盖toString方法@Overridepublic String toString() {return "id:"+id+" Name:"+name+" age"+age;}}

TestHashMap.java

package day11.collection;import org.junit.Test;import java.util.Map; //Map接口import java.util.HashMap;  //实现类import java.util.Set;public class TestHashMap {@Testpublic void test01(){Map map = new HashMap();//添加元素<key, value>map.put("one", "JavaSE");map.put("two", "Unix");map.put("three", "Oracle");System.out.println(map); //toString()//修改元素使用同样key再put一遍//key是唯一的,不可能重复map.put("two", "Windows");System.out.println(map);//如何获取数据根据key取得valueObject obj1 = map.get("one");Object obj2 = map.get("five");System.out.println(obj1);  //JavaSESystem.out.println(obj2);  //null//判断是否拥有某个keyboolean b1 = map.containsKey("one");boolean b2 = map.containsKey("five");System.out.println(b1);   //trueSystem.out.println(b2);   //false//删除数据根据key删除一对数据map.remove("two");System.out.println(map);//如何遍历Map集合//先获取map中key的集合 SetSet keySet = map.keySet();//再遍历keySet来获取每个valuefor(Object key : keySet){System.out.println(key + ":" +map.get(key));}}}

TestRuntimeException.java

package day11.exception;import java.sql.Date; //一种日期类型和数据库有关public class TestRuntimeException {public static void main(String[] args) {System.out.println(1/2);System.out.println(1.0/0); //Infinity 正无穷大//ArithmeticException   算术异常//System.out.println(1/0);//String类型的日期--> java.sql.Date//Date d1 = Date.valueOf("20qt-06-18");//System.out.println(d1);String str = null;if(str !=null){System.out.println(str.toUpperCase());}}}

MeatOverException.java

package day11.exception;//自定义异常肉丝炒糊了异常//由于该异常必须处理,有处理方案,选择父类Exceptionpublic class MeatOverException                          extends Exception{public MeatOverException(){super();}public MeatOverException(String msg){super(msg);}public MeatOverException(String msg,                       Throwable cause){super(msg, cause);}public MeatOverException(Throwable cause){super(cause);  //cause 表示封装底层异常}}

TestException.java

package day11.exception;public class TestException {public static void main(String[] args)            /*throws Exception*/ {//cook1();cook2();//对异常也进行了积极处理/*try {cook3();} catch (Exception e) { //可以捕获任何异常//可以通过捕获的异常对象查看消息System.out.println("消息:"+e.getMessage());}*/}//消极处理  Exception   throws 声明抛出public static void cook1() throws Exception{System.out.println("开始炒肉丝.");//获取0或者1的随机数int n = (int)(Math.random() * 2);if(n == 0){   //模拟抛出异常throw new Exception("肉丝炒糊了!");}//如果抛出异常,后续代码不再执行System.out.println("肉丝炒好了.");}//积极处理 try catch finallypublic static void cook2(){try {System.out.println("开始炒肉丝.");int n = (int)(Math.random() * 2);  //[0,1]System.out.println("n=" + n);if(n == 0){//抛出了自定义异常对象以检测异常throw new MeatOverException("肉丝炒糊了!");}//System.exit(0);   //结束JVM 不执行finallySystem.out.println("肉丝炒好了.");} catch (MeatOverException e) {//打印异常栈轨迹调试时常用e.printStackTrace();System.out.println("重新炒一盘.");} finally {//无论是否发生异常都会执行的代码块//除了System.exit(0);System.out.println("好好炒菜,争当第一!");}System.out.println("下班.后续代码继续执行...");}//运行时异常可处理,可不处理public static void cook3(){System.out.println("开始炒肉丝.");int n = (int)(Math.random() * 2); //[0,1]System.out.println("n=" + n);if(n == 0){//未检查异常、运行时异常throw new RuntimeException("肉丝炒糊了!");}System.out.println("肉丝炒好了.");}}



0 0
原创粉丝点击