Demo② --> java 学习历程

来源:互联网 发布:网络歌老情歌经典大全 编辑:程序博客网 时间:2024/06/05 21:49

TestSwitch.java

package day04;import java.util.Scanner;/** * 练习:成绩评级分析器输入一个五分制成绩,显示出级别:     5        优     4       良     3       及格     2、1 、0    不及格其他值显示分数不合法 * @author Lujy */public class TestSwitch {public static void main(String[] args) {//提示并输入一个5分制的分数Scanner sc = new Scanner(System.in);System.out.print("请输入一个5分制分值:");int score = sc.nextInt();//使用switch case进行判断switch(score){case 5:System.out.println("优.");break;case 4:System.out.println("良.");break;case 3:System.out.println("及格.");break;case 2:case 1:case 0:System.out.println("不及格.");break;default:System.out.println("分数不合法!");}}}

TestFor1.java

package day04;//for循环语法public class TestFor1 {public static void main(String[] args) {/*System.out.println(1);System.out.println(2);System.out.println(3);System.out.println(4);System.out.println(5);*/System.out.println("---begin---");//for循环中至少需要两个分号/*for(int i=1; i<=5; i++){System.out.println(i);}*//*int i=1;   //作用域在main方法中可见for( ; i<=5 ; i++){System.out.println(i);}*//*int i=1;for( ; ;i++){  //6if(i>5){break;    // 表示结束for循环}System.out.println(i);}*/int i=1;for(;;){if(i>5){break;}System.out.println(i++);//i++;}System.out.println("i="+i);//无限循环i=1;for(;;){if(i>2000000000){  break;  //如果大于20亿退出for循环}i+=100000;System.out.println(i);}System.out.println("---end---");}}

TestSum1.java

package day04;//求出1-50的累加和public class TestSum1 {public static void main(String[] args) {//准备一个变量sum 表示累加后的结果int sum = 0;//循环 i 从1-50 递增执行50次for(int i=1; i<=50; i++){//将i累加到sum中//sum = sum + i;sum += i;}System.out.println("Sum=" + sum);}}

TestSum2.java

package day04;//求出1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11  前50项和public class TestSum2 {public static void main(String[] args) {//准备一个变量sumdouble sum = 0.0;//准备一个符号变量kint k = -1;//循环50次 i: 1~50  步长1for(int i=1; i<=50; i++){//1.准备不包含符号的每一项值 m //double/int -> doubledouble m = 1.0/(2*i-1);//2.准备符号k = -k;//3.累加到sumsum += k * m;  //sum=sum+ k*m}System.out.println("Sum="+sum);}}

TestEat.java

package day04;public class TestEat {public static void main(String[] args) {System.out.println("begin...");System.out.println("开始吃10个包子.");for(int i=1; i<=10; i++){if(i==6){System.out.println("第"+i+"个包子掉了.");//不再吃后续的包子//break;  //结束for循环//不吃第6个,继续吃后续的包子//结束本次循环,继续执行下一次新的循环continue; }System.out.println("吃了第"+i+"个包子.");}System.out.println("高高兴兴上学去.");System.out.println("end...");}}

TestFor2.java

package day04;//for循环的嵌套两层for循环public class TestFor2 {public static void main(String[] args) {for(int i=1; i<=5; i++){for(int j=1; j<=i; j++){System.out.print("*");}System.out.println();  //打印换行}}}

TestLeapYear.java

package day05.homework;import java.util.Scanner;/** * 1)输入一个年份,比如2000,判断是否是闰年。isLeapYear依据:能够被4整除但不能被100整除,或者能够被400整除的年份。要求:抽取出isLeapYear方法简单的重构rebuild * @author Lujy */public class TestLeapYear {public static void main(String[] args) {//提示并输入一个年份Scanner sc = new Scanner(System.in);System.out.print("请输入一个年份:");int year = sc.nextInt();//调用isLeapYear方法判断year是否是闰年boolean b = isLeapYear(year);if(b){System.out.println(year+"是闰年.");}else{System.out.println(year+"不是闰年.");}}/** * 判断是否是闰年 * @param year  待判断的年份 * @return  true表示是闰年 false 不是闰年 */public static boolean isLeapYear(int year){//能被4整除但不能被100整除,或能够被400整除if((year%4==0 && year%100!=0) || (year%400==0)){return true;}else{return false;}}}

ScoreTranslator.java

package day05.homework;import java.util.Scanner;public class ScoreTranslator {public static void main(String[] args) {//提示并输入一个百分制分值Scanner sc = new Scanner(System.in);System.out.print("请输入一个百分制分值:");int score = sc.nextInt();//验证分值的合法性大于100或小于0 if(score>100 || score<0){System.out.println("分数"+score+"不合法!");return;    //返回main方法结束调用}//对score除以10 再判断 switch caseint num = score / 10;//具备变量未经初始化不能直接使用char grade = '\u0000';  //特殊值switch(num){case 10:case 9:grade = 'A';   break;case 8:grade = 'B';   break;case 7:grade = 'C';   break;case 6:grade = 'D';   break;default:grade = 'E';   break;}System.out.println("分数:" + score              + " 级别:" + grade);}}

TestDays.java

package day05.homework;import java.util.Scanner;/** * 3)输入一个年份和月份,输出这个月的天数,闰年2月均为29天,非闰年28天。 * @author Lujy */public class TestDays {public static void main(String[] args) {//提示并输入year和monthScanner sc = new Scanner(System.in);System.out.print("请输入年份:");int year = sc.nextInt();System.out.print("请输入月份:");int month = sc.nextInt();//对月份month进行有效性检查if(month>12 || month<1){System.out.println("月份"+month+"不合法!");return;   //结束main方法}int days = -1;   //初始化一个无效的值switch(month){case 1:case 3:case 5:case 7:case 8:case 10:case 12:days = 31;    break;case 4:case 6:case 9:case 11:days = 30;    break;default:  //一定是2月份//调用TestLeapYear类中的isLeapYear方法//来判断year是否是闰年返回布尔值//代码的复用重复使用提高了软件的易维护性if(TestLeapYear.isLeapYear(year)){days = 29;}else{days = 28;}}System.out.println(year+"年"+month +"月共有"+days+"天");}}

TestDiamond.java

package day05.homework;import java.util.Scanner;//4)根据菱形边长n,打印一个菱形,比如边长n为4:public class TestDiamond {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.print("请输入菱形边长:");int n = sc.nextInt();//先打印上三角for(int i=1; i<=n; i++){   //i控制 n行//1.打印n-i个空格  (不换行)for(int j=0; j<n-i; j++){System.out.print(' ');}//2.打印2*i-1个'*'for(int j=0; j<2*i-1; j++){System.out.print('*');}//3.换行System.out.println();}//打印下三角for(int i=n-1; i>=1; i--){ //打印n-1行//1.打印n-i个空格  (不换行)for(int j=0; j<n-i; j++){System.out.print(' ');}//2.打印2*i-1个'*' (不换行)for(int j=0; j<2*i-1; j++){System.out.print('*');}//3.换行System.out.println();}}}

TestFoo.java

package day05;public class TestFoo {  public static boolean foo(String str){System.out.print(str);return true;  }    //  abdcbdcbpublic static void main(String[] args) {int i=0;   // 0  1  2for(foo("a"); foo("b")&&(i<2); foo("c"), i++){foo("d");}}}

TestNice.java

package day05;//打印九九乘法表public class TestNine {public static void main(String[] args) {for(int i=1; i<=9; i++){  //i控制行for(int j=1; j<=i; j++){  //j控制每一行打印的项数System.out.print(j+"*"+i+"="+(i*j)+"\t");}System.out.println();  //换行}}}

TestWhile.java

package day05;//while循环public class TestWhile {public static void main(String[] args) {//循环打印出1~5int i = 1;while(i<=5){System.out.println(i++);}i = 1;while(true){  //无限循环if(i>2000000000){System.out.println("结束while");break;  //结束无限循环}i += 100000;System.out.println(i);}}}


TestDoWhile.java

package day05;import java.util.Scanner;//测试do while循环public class TestDoWhile {public static void main(String[] args) {//循环从控制台提示并输入整数//如果为-1就结束循环System.out.println("begin...");Scanner sc = new Scanner(System.in);int n = -1;  //初始化为-1do{System.out.print("输入整数,-1结束:");n = sc.nextInt();System.out.println("n=" + n);}while(n!=-1);//注意1:do while结尾需要加分号;//注意2:循环条件中的变量需要在外声明//注意3:至少执行一次的循环System.out.println("end...");}}

TestBreak.java

package day05;public class TestBreak {public static void main(String[] args) {Lop1:for(int i=1; i<=5; i++){for(int j=1; j<=5; j++){if(j==3){//break后可以加循环标号//可以从最里层循环直接结束外层循环//break Lop1;//结束标号指定的本次循环//继续下一次新的循环continue Lop1;}System.out.print(j);}System.out.println();}}}

Student.java

package day05;//学生类自定义的引用类型public class Student {//成员属性有什么String name;   //姓名int age;         //年龄//学习方法会什么public void study(String course){System.out.println(name+"学习"+course);}}

TestArray.java

package day05;//数组的核心语法public class TestArray {public static void main(String[] args) {//数组的声明(不分配数组空间)int[] ds1;  //推荐使用int ds2[];//数组的初始化//静态初始化   {值, 值, ...}int[] ds3 = {1,2,3,4,5};//动态初始化int[] ds4 = new int[]{1,2,3,4,5};int[] ds = new int[5];for(int i=0; i<ds.length; i++){ds[i] = i+1;}System.out.println(ds[0]);//下标越界出现异常数组下标越界异常//java.lang.ArrayIndexOutOfBoundsException//System.out.println(ds[-1]);//System.out.println(ds[5]);//数组的遍历//常规遍历基于下标访问for(int i=0; i<ds.length; i++){System.out.print(ds[i] + " ");}System.out.println();//for-each遍历 JDK5.0支持for(int d : ds){System.out.print(d + " ");}System.out.println();//String数组String[] gs =   {"貂蝉", "西施", "王昭君", "杨玉环"};for(int i=0; i<gs.length; i++){System.out.println(gs[i]);}//创建一个学生数组容纳3个学生Student[] stus = new Student[3];//如果元素不初始化默认是null//如果直接访问元素的成员//会抛出空指针异常NullPointerExceptionstus[0] = new Student();stus[0].name = "Tom";stus[0].age = 23;stus[0].study("JavaSE");stus[1] = new Student();stus[1].name = "James";stus[1].age = 21;stus[1].study("Oracle");stus[2] = new Student();stus[2].name = "Mary";stus[2].age = 20;stus[2].study("Unix");}}

TestCount.java

package day05;//统计数组中随机字符 'C'出现的次数public class TestCount {/** * 返回一个大写或小写的随机字母 * @param flag  true表示大写  false小写 * @return 返回大写或小写的随机字母 */public static char randomChar(boolean flag){//获取[0, 25]的随机整数int random = (int)(Math.random()*26);if(flag){return (char)('A'+random);  //[A,Z]}else{return (char)('a'+random);  //[a,z]}}/** * 遍历出char[]的每一个元素 * @param cs   待遍历的数组引用 */public static void printArray(char[] cs){System.out.print("[");for(int i=0; i<cs.length; i++){System.out.print(cs[i]);if(i != cs.length-1){ //不是最后元素System.out.print(","); //追加逗号}}System.out.println("]");}public static void main(String[] args) {//1)准备一个char[] 分配10个元素char[] cs = new char[10];   //初值'\u0000'//2)给数组中每个元素赋初始值随机字符for(int i=0; i<cs.length; i++){//调用方法返回随机大写字母cs[i] = randomChar(true);  }//先遍历数组每个元素//通过调用方法将引用cs传给方法执行printArray(cs);//3)遍历数组的每个元素,统计'C'出现的次数int count = 0;for(char c : cs){if(c == 'C'){   //如果发现是'C'count++;    //计数器加1}}//4)输出统计的结果System.out.println("Count:"+count);}}

TestPrime.java

package day06.homework;/** * 需求:打印出1~200内的素数素数也称为质数,只能被1和自身整除的数  1不是素数 * @author Lujy */public class TestPrime {public static void main(String[] args) {//准备一个变量count 用于统计素数个数int count = 0;for(int i=2; i<=200; i++){ //for1boolean flag = true;  //默认是素数//通过逐个取余来检验for(int j=2; j<=i/2; j++){ //for2if(i%j==0){  //发现不是素数flag = false;  //标记为falsebreak;   //结束for2}}//end for2//如果flag为true表明是素数进行打印if(flag){count++;  //计数器加1System.out.print(i + " ");if(count % 10 == 0){  //如果满10个System.out.println(); //换行打印}}} //end for1//  \n表示换行符  \t表示Tab制表符System.out.println("\nCount:" + count);}}

TestAdd.java

package day06;//方法的重载  Overloading//方法名相同,参数表不同(类型、数量、顺序)public class TestAdd {public static int add(int a, int b){System.out.println("add(int, int)...");return a + b;}public static double add(double a, double b){System.out.println("add(double,double)...");return a + b;}public static double add(double a, int b){System.out.println("add(double,int)...");return a + b;}public static float add(float a, float b){System.out.println("add(float,float)...");return a + b;}public static void main(String[] args) {add(1, 2);        //add(int,int)...   add(1.0, 2.0);   //add(double,double)...add(1.0, 2);      //add(double,int)...add(1.0F, 2.0F); //add(float,float)...}}

TestAnimal.java

package day06;//使用和测试day06.Animal类public class TestAnimal {public static void main(String[] args) {//创建一个Animal类型的实例  "实例化"//a1是引用,指向堆空间的//某个Animal类型的对象简称为a1对象//Animal a1 = new Animal();//通过构造方法来初始化属性Animal a1 = new Animal("小强", 6);//a1.name = "旺财";//a1.age = 5;a1.eat("叉烧肉");System.out.println(a1.age);//再创建一个实例a2Animal a2 = new Animal();//a2.name = "加菲猫";//a2.age = 3;a2.eat("三文鱼");System.out.println(a2.age);}}

Animal.java

package day06;/** * 动物类对各种动物对象的抽象  "泛化" * @author Lujy */public class Animal {//有什么数据抽象属性(成员变量)String name/*="小强"*/;    //名称int age;          //年龄//构造方法//无参的构造方法public Animal(){this("TomCat", 8);//this();System.out.println("Animal()...");}//构造方法重载全参构造方法//局部变量优先public Animal(String name, int age){//构造方法必须在构造的首行调用//this();System.out.println("Animal(String,int)...");//通过this.name 表示当前对象的name属性//用于区分同名的属性和局部变量this.name = name;this.age = age;}//会什么业务抽象方法(成员方法)public void eat(String food){//this();System.out.println(name + " eat " + food);} }

Emp.java

package day06;/** * 员工类(一种抽象、模板) * @author Lujy */public class Emp {//成员变量属性有什么(数据抽象)String name;    //姓名int age;          //年龄double salary;   //薪水//构造方法初始化属性的方法//无参构造public Emp(){System.out.println("Emp()...");}//全参构造(构造方法重载)public Emp(String name, int age, double salary){System.out.println("Emp(String,int,double)...");this.name = name;this.age = age;this.salary = salary; }//业务方法工作参数dept 部门名称public void work(String dept){System.out.println(name+"工作于"               +dept+"部门.");}}

TestEmp.java

package day06;//测试使用Emp类来实例化对象public class TestEmp {public static void main(String[] args) {Emp emp1 = new Emp("Tom", 21, 6000.0);Emp emp2 = new Emp("James", 23, 8000.0);Emp emp3 = new Emp(); //使用无参构造emp3.name = "Mary"; emp3.age = 22;emp3.salary = 9000.0;emp1.work("研发");emp2.work("测试");emp3.work("财务");}}

CaiPiao.java

package day06;import java.util.Arrays;//彩票类以面向对象的思想进行编程public class CaiPiao {//成员变量属性数据抽象int m;    //表示从m种值中选择int n;     //选择n个不重复的数字int[] ds;  //保存彩票生成的一组数据//index有两层含义作为数组的好助手//1)能够表示数组当前元素的个数//2)又表示下一个元素存放的下标位置int index;       //数组应用的重要技巧//构造方法public CaiPiao(){   //无参构造this(36, 7);   //默认36选7}public CaiPiao(int m, int n){this.m = m;this.n  = n;ds = new int[n];index = 0;}//业务方法生成彩票数据public int[] create(){//写如何生成彩票数据的代码(算法)://第一个元素可以任意放数据//先取index 0  ds[0]  后index加1 ds[index++] = randomNum(m);//从第二个元素开始需要考虑重复值Lop1:while(true){//先取得一个随机数 tempint temp = randomNum(m);//写循环和之前的数据比较for(int i=0; i<index; i++){//如果和之前某个元素相同重新选tempif(ds[i] == temp){ continue Lop1;}}//代码执行到此处说明temp都不同//存放到下一个元素ds[index++] = temp;//如果元素满了就结束while循环if(index == n){break;    }}Arrays.sort(ds);  //对生成的结果排序return ds;}//提供方法获得[1,n]的随机数public int randomNum(int n){return (int)(Math.random() * n + 1);}}

TestCaiPiao.java

package day06;import java.util.Arrays;//测试CaiPiao类public class TestCaiPiao {public static void main(String[] args) {CaiPiao cp = new CaiPiao();//CaiPiao cp = new CaiPiao(25, 5);//CaiPiao cp = new CaiPiao(5, 5);int[] ds = cp.create();System.out.println(Arrays.toString(ds));}}

TestStudent.java

package day07;//测试学生类public class TestStudent {public static void main(String[] args) {Student stu1   = new Student(1, "Tom", 21, true);//stu1.id = 0;//stu1.name = "TomCat";//System.out.println(stu1.name);stu1.setName("TomCat");stu1.setAge(-25);System.out.println(stu1.getName());System.out.println(stu1.getAge());stu1.study("JavaSE");//stu1.read("西游记");Student stu2   = new Student(2, "James", 23, true);stu2.study("Unix");}}

Student.java


package day07;//学生类public class Student {//属性成员变量属性私有private int id;                   //唯一标识private String name;           //姓名private int age;                 //年龄private boolean maleGender;   //性别//构造方法public Student(){System.out.println("Student()...");}public Student(int id, String name, int age,            boolean maleGender){System.out.println("Student(int,String,int,boolean)...");this.id = id;this.name = name;//this.age = age;  //无法验证有效性//方法的复用验证age有效性this.setAge(age);  //调用本类的setAge方法this.maleGender = maleGender;}//getters/setters方法读和写属性的方法//读name属性public String getName(){return name;}//写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){// 提供了数据的有效性验证if(age > 1 && age <200){this.age = age;}else{System.out.println("年龄"+age+"不合法!");}}//boolean类型get需要改为ispublic boolean isMaleGender(){return maleGender;}public void setMaleGender(boolean maleGender){this.maleGender = maleGender;}//业务方法学习参数course表示课程名称public void study(String course){System.out.println(name + "学习" + course);read("西游记");  //私有方法可以访问}//读书方法参数book表示图书的名称//private修饰表示不对外公开仅本类可见private void read(String book){System.out.println(name + "读" + book);}}
                     

Emp.java


package day07;//员工类使用封装的语法public class Emp {//私有的成员变量属性封装private int id;                   //唯一标识private String name;           //姓名private double salary;          //薪水private boolean maleGender;  //性别//构造方法public Emp() {super();}public Emp(int id, String name,   double salary, boolean maleGender) {super();this.id = id;this.name = name;this.salary = salary;this.maleGender = maleGender;}//getters/setterspublic 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 double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}public boolean isMaleGender() {return maleGender;}public void setMaleGender(boolean maleGender) {this.maleGender = maleGender;}//业务方法工作public void work(){System.out.println(name + "努力工作.");}}

TestExtends.java

package day07;//继承关系class A{public A(){super();System.out.println("A()...");}}class B extends A{public B(){super();System.out.println("B()...");}}class C extends B{public C(){super();System.out.println("C()...");}}public class TestExtends {public static void main(String[] args) {new C();}}

TestInheritance.java

package day07;//继承的核心语法//动物类作为所有动物的父类class Animal{         //私有的成员变量         privateint id;           //唯一标识         privateString name;   //名称         privateint age;         //年龄         //构造方法         publicAnimal() {                   super();                   System.out.println("Animal()...");         }         publicAnimal(int id, String name, int age) {                   super();                   System.out.println("Animal(int,String,int)...");                   this.id= id;                   this.name= name;                   this.age= age;         }         //getters/setters...         publicint getId() {                   returnid;         }         publicvoid setId(int id) {                   this.id= id;         }         publicString getName() {                   returnname;         }         publicvoid setName(String name) {                   this.name= name;         }         publicint getAge() {                   returnage;         }         publicvoid setAge(int age) {                   this.age= age;         }         //业务方法吃         publicvoid eat(String food){                   System.out.println(name+ " eat " + food);         }}//Cat "is-a" Animalclass Cat extends Animal{                publicCat(){                   super();                   System.out.println("Cat()...");         }         publicCat(int id, String name, int age){                   //默认是super();                   super(id,name, age);   //显式调用                   System.out.println("Cat(int,String,int)...");         }         //覆盖Animal中的eat方法重写         //编译器会检测以下语法是否满足覆盖         @Override    //标注表示以下方法满足覆盖语法         publicvoid eat(String food){                   System.out.println("Cat:"+ getName()                                      + " eat " + food);         }}//Dog "is-a" Animalclass Dog extends Animal{               publicDog(){                   super();                   System.out.println("Dog()...");         }         publicDog(int id, String name, int age){                   super(id,name, age);                   System.out.println("Dog(int,String,int)...");         }         //覆盖Animal中的eat方法         @Override         publicvoid eat(String food){                   System.out.println("Dog:"+ getName()                                        + " eat " + food);         }}public class TestInheritance {         publicstatic void main(String[] args) {                   Animalc1 = new Cat(1, "加菲猫", 3);                   //Catc1 = new Cat(1, "加菲猫", 3);//               c1.setId(1);//               c1.setName("加菲猫");                   c1.eat("意大利面");                   Animald1 = new Dog(2, "史努比", 5);                   //Dogd1 = new Dog(2, "史努比", 5);                   //d1.setName("史努比");                   d1.eat("卡布奇诺");         }}

TestAnimal.java

package day08;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 void eat(String food){System.out.println(name + " eat " + 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)...");}}//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)...");}}//动物园类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类型}}}

MyStack.java

package day08;public class MyStack {//成员变量private int[] ds;   //保存栈中的数据//伴随数组ds存在//1.既表示数组当前元素个数 0开始//2.又表示数组下一个元素的下标位置private int index;//构造方法public MyStack(){//默认5个元素this(5);}public MyStack(int n){ds = new int[n];index = 0;}//业务方法入栈public void push(int d){//先判断栈是否满了如果满了自动扩容if(index == ds.length){//1.准备空间int[] temp = new int[ds.length];//2.逐个拷贝System.arraycopy(ds, 0, temp, 0, ds.length);//3.引用重置ds = temp;}ds[index++] = d;}//出栈public int pop(){return -1;}//查看栈顶元素public int peek(){return -1;}//仅供测试发布时需要删除 showpublic void show(){}}

TestReuse1.java

package day08.reuse1;//C++老师class CppTeacher{public void teachCpp(){System.out.println("讲授C++课程.");}public void jump(){System.out.println("极限运动.");}}//Java老师继承自CppTeacher起到代码复用的作用class JavaTeacher extends CppTeacher{public void teachJava(){System.out.println("讲授Java课程.");}}//软件复用方式一:继承复用 "is-a"//问题://1) 两个类不存在逻辑上的"is-a"关系//2) Java是单继承需要选取合适的父类//3) 别的不需要的方法也能继承到public class TestReuse1 {public static void main(String[] args) {JavaTeacher jt = new JavaTeacher();jt.teachJava();jt.teachCpp();jt.jump();}}

TestReuse2.java

package day08.reuse2;class CppTeacher{public void teachCpp(){System.out.println("讲授C++课程.");}public void jump(){System.out.println("极限运动.");}}class JavaTeacher{//成员变量属性//JavaTeacher "has-a" CppTeacherprivate CppTeacher ct = new CppTeacher();public void teachJava(){System.out.println("讲授Java课程.");}public void teachCpp(){ct.teachCpp();  //委托给ct实现}}//软件复用方式二:组合复用 "has-a"public class TestReuse2 {public static void main(String[] args) {JavaTeacher jt = new JavaTeacher();jt.teachJava();jt.teachCpp();}}

TestBXJG.java

package day09.homework;//所有变形金刚类的父类abstract class BXJG{//成员变量private int id;         //唯一标识private String name; //名称private int age;       //年龄//构造方法public BXJG() {super();}public BXJG(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;}//开火抽象方法public abstract void fire();//自报家门抽象方法public abstract void show();}class QingTZ extends BXJG{public QingTZ() {super();}public QingTZ(int id, String name, int age) {super(id, name, age);}@Overridepublic void fire(){System.out.println(getName()+"开火====>");}@Overridepublic void show(){System.out.println("我是:"+getName()+",今年"+getAge()+"岁了.呵呵.");}}class DaHF extends BXJG{public DaHF() {super();}public DaHF(int id, String name, int age) {super(id, name, age);}@Overridepublic void fire(){System.out.println(getName()+"开火@@@@");}@Overridepublic void show(){System.out.println("偶是:"+getName()+",今年"+getAge()+"大了.嘻嘻.");}}class WeiZT extends BXJG{public WeiZT() {super();}public WeiZT(int id, String name, int age) {super(id, name, age);}@Overridepublic void fire(){System.out.println(getName()+"开火$$$$>");}@Overridepublic void show(){System.out.println("俺是:"+getName()+",今年"+getAge()+"岁了.嘎嘎.");}}public class TestBXJG {public static void main(String[] args) {BXJG[] bs = new BXJG[3];bs[0] = new QingTZ(1, "擎天柱", 5000);bs[1] = new DaHF(2, "大黄蜂", 3000);bs[2] = new WeiZT(3, "威震天", 4500);//一视同仁统一管理for(BXJG b : bs){b.show();b.fire();}}}

MyStack.java

package day09.homework;//自定义栈类先进后出 FILO//支持入栈出栈查看栈顶元素自动扩容//特点:只能针对栈顶元素操作public class MyStack {//成员变量private int[] ds;    //存放栈中数据//index伴随着数组ds出现//1) 既表示数组当前元素的个数//2) 又表示下一个元素存放的下标位置private int index; //构造方法public MyStack(){//默认初始化5个元素的空间this(5);}public MyStack(int n){  //初始化的规模ds = new int[n];  //初始化元素个数n的数组index = 0;}//入栈public void push(int d){//入栈时需要考虑是否越界if(index == ds.length){  //栈满了扩容//1.准备空间int[] temp = new int[ds.length * 2];//2.逐个拷贝System.arraycopy(ds, 0, temp, 0, ds.length);//3.引用重置ds = temp;}//将数据添加到栈顶ds[index++] = d;}//出栈public int pop(){if(index == 0){System.out.println("栈空,不能出栈!");//返回一个特殊的值表示不成功return Integer.MIN_VALUE;}//先index=index-1   取ds[index] 返回return ds[--index];}//查看栈顶元素public int peek(){if(index == 0){System.out.println("栈空,没有元素!");return Integer.MIN_VALUE;}return ds[index-1];  //index本身不会改变}//测试方法查看栈中所有数据public void show(){System.out.print("[");for(int i =0; i<index; i++){System.out.print(ds[i]);if(i != index-1){System.out.print(",");}}System.out.println("]");}}


TestMyStack.java

package day09.homework;public class TestMyStack {public static void main(String[] args) {MyStack ms = new MyStack(); //默认5个元素ms.show();ms.push(1);ms.push(3);ms.show();ms.push(5);ms.push(6);ms.push(7);ms.push(8);ms.show();int n1 = ms.pop();System.out.println(n1);ms.show();int n2 = ms.peek();System.out.println(n2);ms.show();}}

TestStatic1.java

package day09.sta;//static修饰属性 (成员变量)class Student{static int cno;  //班级号类变量int sno;         //学号实例变量}public class TestStatic1 {public static void main(String[] args) {Student stu1 = new Student();stu1.cno = 1;stu1.sno = 101;System.out.println(stu1.cno + ":" + stu1.sno);Student stu2 = new Student();stu2.cno = 2;stu2.sno = 102;System.out.println(stu1.cno + ":" + stu1.sno);System.out.println(stu2.cno + ":" + stu2.sno);//cno既然是类变量建议使用类名直接访问Student.cno++;System.out.println(Student.cno);}}

TestStatic2.java

package day09.sta;//static修饰方法设计工具类class MyMath{int m;    //实例变量   new MyMath()     //在创建对象时才分配空间初始化0static int n; //类变量     //在类加载时就分配空间初始化0//静态方法//静态方法中不能访问非静态成员!public static int add(int a, int b){//m = 1;//m1();n = 1;   //可以访问return a + b;}//实例方法需要有实例才可调用public void m1(){m = 1;n = 2;}}public class TestStatic2 {public static void main(String[] args) {//可以通过类名直接访问int n  = MyMath.add(1, 2);System.out.println(n);MyMath math = new MyMath();math.m1();   //必须通过对象调用}}

TestStatic3.java

package day09.sta;//静态代码块class Foo{{//实例代码块创建对象时先于构造执行System.out.println("实例代码块...4");}static{//静态代码块类加载时执行System.out.println("静态代码块1...5");}static{//静态代码块类加载时执行System.out.println("静态代码块2....6");}public Foo(){System.out.println("Foo()...7");}}   // 3 1 5 6 4 7 4 7 2public class TestStatic3 {static{System.out.println("静态代码块...3");}public static void main(String[] args) {System.out.println("begin...1");Foo f1 = new Foo();Foo f2 = new Foo();System.out.println("end...2");}}

TestStatic4.java

package day09.sta;class Outer{ //外部类//成员内部类class Inner1{}//静态内部类static class Inner2{}}public class TestStatic4 {}

TestStatic5.java

package day09.sta;class Super{public void m1(){    //实例方法非staticSystem.out.println("Super m1()...");}public static void m2(){  //静态方法System.out.println("Super m2()...");}}class Sub extends Super{@Overridepublic void m1(){System.out.println("Sub m1()...");}//@Override  静态方法不能覆盖,没有多态public static void m2(){  //静态方法System.out.println("Sub m2()...");}}public class TestStatic5 {public static void main(String[] args) {Super s1 = new Sub();s1.m1();s1.m2(); //由于s1是Super类型           //类似于Super.m2()}}

TestSingleton1.java

package day09.sta;//单例模式 Singleton   懒汉式class LaoGong{//3.使用静态成员来保存单例private static LaoGong lg;//1.构造私有private LaoGong(){}//2.提供静态方法获取单例//synchronized 同步关键字加锁//线程安全的方法但性能下降public static /*synchronized*/ LaoGong getInstance(){if(lg == null){  //lg就是被共享的数据lg = new LaoGong();}return lg;   }}public class TestSingleton1 {public static void main(String[] args) {//LaoGong lg1 = new LaoGong();//LaoGong lg2 = new LaoGong();LaoGong lg1 = LaoGong.getInstance();LaoGong lg2 = LaoGong.getInstance();System.out.println(lg1 == lg2);}}

TestSingleton2.java

package day09.sta;//单例模式 Singleton   饿汉式  (推荐使用)class LaoPo{//3.提供一个静态成员保存单例private static LaoPo lp = new LaoPo();//1.构造私有private LaoPo(){}//2.提供静态的方法获取单例public static LaoPo getInstance(){return lp;}}public class TestSingleton2 {public static void main(String[] args) {LaoPo lp1 = LaoPo.getInstance();LaoPo lp2 = LaoPo.getInstance();System.out.println(lp1 == lp2);}}

TestFinal.java

package day09;import java.util.Arrays;class Person{int m;  //成员变量//常量一经赋值,不可改变final int n = 1;  //要么在声明时直接初始化final int k;  //要么在构造方法中初始化//1) 在声明时直接初始化public static final int MAX_AGE = 180;//2) 在静态代码块中初始化public static final int MIN_AGE;static{MIN_AGE = 0;}public Person(){k = 3;//n = 2;    //常量不能再被赋值了//MIN_AGE = 0;}//final修饰局部变量public void change1(){final int m = 1;//m = 2;final int n;n = 1;//n = 2;}public void change2(final int m){//m++;  //m不能再修改了}public void change3(final int[] ds){//ds = new int[3];  ds本身不可变ds[0] = 9;   //但ds中元素可以改变}//final修饰的方法不能被子类覆盖public final void m1(){System.out.println("Person m1()...");}}//汽车人是人类的子类class CarPerson extends Person{//只能继承到m1()方法,而不能修改/*@Overridepublic void m1(){System.out.println("CarPerson m1()...");}*/}//final修饰类不能被继承final class Super{}/*class Sub extends Super{}*/public class TestFinal {public static void main(String[] args) {//常量在实际开发使用普遍System.out.println(Person.MAX_AGE);System.out.println(Person.MIN_AGE);System.out.println(Integer.MAX_VALUE);System.out.println(Math.PI);Person person = new Person();int[] ds = {1,2,3,4,5};System.out.println(Arrays.toString(ds));person.change3(ds);System.out.println(Arrays.toString(ds));}}








0 0
原创粉丝点击