一.如何抽象对象
1.创建一个类
2.给该描述属性
属性就是java中所有的数据类型
3.给该类定义行为方法
方法的签名是:public void 方法名(){方法体}
公共的 无返回类型
二.如何使用类和对象
1.创建类的对象实例
Student stu = new Student();
2.访问对象的属性和方法:通过对象名.属性名或者方法名
例如:stu.name = "张三";
stu.study();
三.构造方法
1.定义:构建一个类的对象的方法
2.特点:和类名一致,没有返回类型
3.调用:通过new关键字来调用
四.带参数和返回类型的方法
1.方法的签名:访问修饰符 返回类型 方法名(形参数列表){方法体}
例如:public double calculate(double num1,double num2){}
2.返回类型:是方法执行完后返回的数据类型,在方法体中必须出现return关键字
3.return关键字除了返回数据之外还可以结束当前方法
4.在void的方法中也可以使用return关键字,但不能返回数据,只是结束方法
5.在调用带参数的方法时注意实参要和形参的个数,顺序,类型完全一致
6.调用带返回类型的方法,一般都用变量来接收返回值
五.例子
1.抽象出一个老师类,描述其属性和方法
测试类中,创建老师类对象,给其属性赋值,然后调用其方法
2.完成一个景区售票机的案例,游客如果年龄在8岁以下是全免,8-15岁是半票,15以上是成人票。
要求写一个程序完成买票过程。要求是用类和对象来实现
a.分析该案例中有哪些对象
b.完成对象的抽象(描述属性和方法)
c.编写测试类,测试数据
业务修改:除了年龄,根据性别有了新的业务需求:
1.性别为女,15岁以下 全免,60岁以上也是全免 15--60都是成人票
2。性别为男买票规则不变
3.编写一个计算器的程序,完成各项运算。完成一次运算
要求:面向对象的编程思想
4.编写一个榨汁器:根据用户输入的不同水果,榨出不同的饮料。
要求,用带返回值和参数的方法完成
package com.demo1102;
/*** 类和对象的案例* @author allen**/
public class Demo1 {public static void main(String[] args) {Student stu = new Student();//创建了一个学员实例对象//新构建出来的对象中的属性全部为默认初始值//访问属性和方法stu.name = "张三";stu.age = 18;stu.sex = "女";stu.phone = "110";//访问方法stu.study();stu.intrduce();}
}
//一个类中可以由多个类,但是public修饰的类必须和文件名相同
class Student{String name;String sex;int age;String phone;double height;public Student() {//此方法为构造方法,含义是创建该类的对象时被调用}public void study(){System.out.println("我好好学员,天天向上");System.out.println("偶尔抽空撸两把");}public void intrduce(){System.out.println("我的名字是:"+name+",我今年"+age+"岁,我的手机号码是:"+phone+",欢迎骚扰");}
}
package com.demo1102;import java.util.Scanner;
/*** 买票案例* @author allen**/
public class Demo2 {public static void main(String[] args) {Scanner s = new Scanner(System.in);System.out.println("请输入您的年龄:");Guest g = new Guest();g.age = s.nextInt();System.out.println("请输入性别:");g.sex = s.next();g.ticket();}
}class Guest{int age;String sex;public void ticket(){if("男".equals(sex)){if(age<8){System.out.println("全免");}else if(age>=8&&age<15){System.out.println("半票");}else if(age>=15){System.out.println("成人票");}}else if("女".equals(sex)){if(age<=15){System.out.println("全免");}else if(age>15&&age<=60){System.out.println("成人票");}else if(age>60){System.out.println("全免");}}else{System.out.println("你可以上天了");}}
}
package com.demo1102;import java.util.Scanner;import javax.security.sasl.SaslClient;
/*** 计算器案例* @author allen**/
public class Calculate {double num1;double num2;String type;double result;public void count(){switch(type){case "+":result = num1+num2;break;case "-":result = num1-num2;break;case "*":result = num1*num2;break;case "/":result = num1/num2;break;case "%":result = num1%num2;break;}System.out.println("result="+result);}public void test(){int a=1;if(a!=1){return;//return在此处的作用就是结束当前方法}System.out.println("程序结束");}public static void main(String[] args) {Scanner sc = new Scanner(System.in);Calculate c = new Calculate();System.out.println("请输入第一个数:");c.num1 = sc.nextDouble();System.out.println("请输入运算符号:");c.type = sc.next();System.out.println("请输入第二个数:");c.num2 = sc.nextDouble();c.count();}
}
package com.demo1102;import java.util.Scanner;/*** 榨汁器案例* @author allen**/
public class Demo4 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入你要榨汁的水果:");String shuiguo = sc.next();Juicer j = new Juicer();String result = j.juicing(shuiguo);System.out.println("您炸的"+result+"已经好了");}
}class Juicer{public String juicing(String fruit){System.out.println("正在榨汁.....");try {Thread.sleep(5000);//模拟一个5秒的等待过程} catch (InterruptedException e) {e.printStackTrace();}return fruit+"汁";}
}
/** 3.编写一个计算器的程序,完成各项运算。
要求:面向对象的编程思想*/
package com.class1102;import java.util.Scanner;public class Class03 {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc=new Scanner(System.in);Operate o=new Operate();System.out.println("请输入第一个数");o.a=sc.nextDouble();System.out.println("请输入第二个数");o.b=sc.nextDouble();System.out.println("请输入操作符");o.sign=sc.next();o.js();}}class Operate{double a,b,result;String sign;public Operate(){}public void js(){if(sign.equals("+")){result=a+b;}else if(sign.equals("-")){result=a-b;}else if(sign.equals("*")){result=a*b;}else if(sign.equals("/")){result=a/b;}System.out.println("计算结果为:"+result);}
}
/** 1.写一个类描述笔记本电脑:
属性有:品牌,重量,cpu型号,内存大小,硬盘大小,显卡型号
方法有:显示笔记本基本信息 showInfo()
编写测试类:给笔记本对象属性赋值,调用显示笔记本基本信息方法展示给客户*/
package com.class1102;import java.util.Scanner;public class Test1 {public static void main(String[] args) {// TODO Auto-generated method stubNotebook nt=new Notebook();nt.sign="宏碁(acer)";nt.weight=1.3;nt.cpu="N3450";nt.memory=4;nt.hdisk=128;nt.dcard="集成显卡";nt.showInfo(); }}class Notebook{String sign;double weight;String cpu;int memory;int hdisk;String dcard;public void showInfo(){System.out.println("该笔记本品牌是:"+sign+",");System.out.println("该笔记本重量是:"+weight+"kg,");System.out.println("该笔记本cpu型号是:"+cpu+",");System.out.println("该笔记本内存大小是:"+memory+"G,");System.out.println("该笔记本硬盘大小是:"+hdisk+"G,");System.out.println("该笔记本显卡型号是:"+dcard+",");}}
/** 2.写一个个人所得税计算器,用户输入税前工资,计算得到税后工资
要求用带参数和返回类型的方法
规则:个税起征点为3500超过部分 税点1500以内 5%1500-3000 10%3000-5000 15%5000-8000 20%8000以上 25%*/
package com.class1102;import java.util.Scanner;public class Test2 {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc=new Scanner(System.in);TaxCalculator tc=new TaxCalculator();System.out.println("请输入税前工资");tc.count(sc.nextDouble());}}class TaxCalculator{public double count(double i){double result=0;if(i<=3500){result=i;}else if(i>3500&&i<5000){result=3500+(i-3500)*(1-0.05);}else if(i>=5000&&i<6500){result=3500+1500*(1-0.05)+(i-5000)*(1-0.1);}else if(i>=6500&&i<8500){result=3500+1500*(1-0.05)+1500*(1-0.1)+(i-6500)*(1-0.15);}else if(i>=8500&&i<11500){result=3500+1500*(1-0.05)+1500*(1-0.1)+2000*(1-0.15)+(i-8500)*(1-0.2);}else{result=3500+1500*(1-0.05)+1500*(1-0.1)+2000*(1-0.15)+3000*(1-0.2)+(i-11500)*(1-0.25);}System.out.println("税后工资为:"+result);return result;}}
/** 3.完成一个自动摇奖机
摇奖机可以由工作人员设置奖品,然后随机抽奖
思路:
设计一个摇奖机类
属性:是一个奖品数组
方法: 方法一 :设置奖品方法方法二:随机抽出奖品
测试类:
第一步工作人员设置奖品,第二步,工作人员完成抽奖*/
package com.class1102;import java.util.Random;
import java.util.Scanner;public class Test3 {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc=new Scanner(System.in);Random r=new Random();Ernie e=new Ernie();String s[]=new String[7];for(int j=0;j<e.prize.length;j++){System.out.println("请输入第"+j+"个奖品");s[j]=sc.nextLine();}e.setErnie(s);System.out.println("开始抽奖");String j=e.getERnie(r.nextInt(8));System.out.println("奖品是"+j);}}class Ernie{String prize[]=new String[7];;public void setErnie(String s[]){for(int i=0;i<prize.length;i++){prize[i]=s[i];}}public String getERnie(int t){String p=null;for(int i=0;i<prize.length;i++){if(t==i){p=prize[i];}}return p;}}
六.小游戏
/** 1.猜数字游戏:
系统会自动生成0-9的不重复的4个数字 例如:8350
用户有8次机会来猜这些数字的,不仅要数字正确,顺序也要正确才为答对
每次用户都是输入4个数字,系统给出相应的提示:
提示规则:数字和位置正确的提示A 数字正确但位置不正确的提示B
例如:用户输入1234 系统提示:0A1B用户第二次:5678 系统提示:0A2B用户第三次:0912 系统提示:0A1B用户第四次:1203 系统提示:0A2B用户第五次:3051 系统提示:1A2B用户第六次:Random r = new Random();r.nextInt(10);0-9 */
package com.class1101;import java.util.Random;
import java.util.Scanner;public class Class01 {public static void main(String[] args) {// TODO Auto-generated method stubint arr[]=new int[4];Random r=new Random();for(int i=0;i<arr.length;i++){arr[i]=r.nextInt(10);for(int j=0;j<i;j++){while(arr[i]==arr[j]){arr[i]=r.nextInt(10);}}//System.out.print(arr[i]+" ");}Scanner sc=new Scanner(System.in);int num;int arr2[]=new int[4];for(int i=1;i<9;i++){System.out.print("请输入第"+i+"个数:");num=sc.nextInt();arr2[0]=num/1000;arr2[1]=(num%1000)/100;arr2[2]=(num%1000)%100/10;arr2[3]=(num%1000)%100%10;int a=0;int b=0;for(int j=0;j<arr2.length;j++){//System.out.print(arr2[j]+" ");if(arr2[j]==arr[j]){a++;}else{for(int k=0;k<arr.length;k++){if(arr2[j]==arr[k]){b++;}}}}if(a==4){System.out.println("恭喜猜中数字");break;}else{System.out.println("提示:"+a+"A"+b+"B");}}}}
/** 2.穿越火线用二维数组生成一个15*15的地图,全部用方块表示□随机生成用户位置用三角形△表示,随机生成目的位置用五角星☆表示,在地图上随机生成20个地雷用户不可见。
用户选择上下左右移动位置,每次移动一格,移动后要显示用户走过的路程用○表示。踩上地雷身亡,顺利到达目标则为胜利!*/
package com.class1101;import java.util.Random;
import java.util.Scanner;public class Class02 {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc=new Scanner(System.in);char arr[][]=new char[15][15];Random r=new Random();//1、随机生成起点和终点的坐标,并使两点不重复int r1=r.nextInt(arr.length);int r2=r.nextInt(arr[0].length);int s1=r.nextInt(arr.length);int s2=r.nextInt(arr[0].length);while(r1==s1&&r2==s2){r1=r.nextInt(arr.length);}//2、生产20个地雷的坐标,并使其本身不重复,和起点、终点也不重复int d1[]=new int[20];int d2[]=new int[20];for(int i=0;i<d1.length;i++){d1[i]=r.nextInt(arr.length);d2[i]=r.nextInt(arr.length);for(int j=0;j<i;j++){while(d1[i]==d1[j]&&d2[i]==d2[j]||d1[i]==r1&&d2[i]==r2||d1[i]==s1&&d2[i]==s2){d1[i]=r.nextInt(arr.length);d2[i]=r.nextInt(arr.length);}}}int t1[]=new int[arr.length];int t2[]=new int[arr.length];int t3=0;//int t1=-1,t2=-1;while(true){//3.通过键盘输入移动用户位置String key=sc.nextLine();if(key.equals("w")){if(r1>0){r1--;}}else if(key.equals("s")){if(r1<arr.length-1){r1++; }}else if(key.equals("a")){if(r2>0){r2--; }}else if(key.equals("d")){if(r2<arr.length-1){r2++; }}//4.判断用户是否踩到地雷,如果踩到,游戏失败。boolean b=false;for(int i=0;i<d1.length;i++){if(r1==d1[i]&&r2==d2[i]){b=true;System.out.println("踩到地雷,游戏失败");break;}}if(b){break;}//5.输出游戏界面int i,j=0;for(i=0;i<arr.length;i++){for(j=0;j<arr[i].length;j++){if(i==r1&&j==r2){arr[i][j]='△';}else if(i==s1&&j==s2){arr[i][j]='☆';}else{arr[i][j]='□';for(int k=0;k<t3;k++ ){arr[t1[k]][t2[k]]='○'; }/*if(i==t1&&j==t2){arr[i][j]='○';}else{arr[i][j]='□';}*/}System.out.print(arr[i][j]+"\t");}System.out.println();}t1[t3]=r1;t2[t3]=r2;t3++;//t1=r1;//t2=r2;//6.当用户成功到达终点时,游戏胜利。if(r1==s1&&r2==s2){System.out.println("胜利!");break;}}}}