天天看点

javase_day3

选择排序:数组中的每个元素和其他元素进行比较换位置   arr[i]>arr[j]

javase_day3

冒泡排序:相邻元素换位置            arr[j]>arr[j+1]

javase_day3

变量直接声明在类体里面,  方法外面,代码块的外面  全局变量(成员变量)

变量除了全局变量就是局部变量

成员变量和局部变量的区别:

成员变量定义在类中方法外代码块的外面  局部变量定义在方法中或者代码块里面

局部变量使用前必须要赋值

成员变量进堆内存  局部变量进栈内存

this关键字:区分成员变量和局部变量同名情况  成员变量用this. 来调用

           在构造方法之间调用     this();

二分查找前要记得排序。

继承的好处:提高了代码的复用性,提高了代码的维护性,让类与类之间产生了关系,是多态的前提

继承的弊端:类的耦合性增加了(开发的原则是高内聚,低耦合)

继承要注意的地方:子类只能继承父类所有的非私有的成员,子类不能继承父类的构造方法,但可以通过super关键子去访问父类的构造方法

子类方法覆盖父类方法,必须保证权限大于等于父类权限

Java中有多继承么?

类没有多继承     接口之间有多继承

接口和抽象类的区别:

相同点:都不能实例化  都必须被子类重写抽象方法

不同点:

1.抽象类可以有构造方法,接口中不能有构造方法。

2.抽象类中可以有普通成员变量,接口中没有普通成员变量

3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的

4. 抽象类中可以包含静态方法,接口中不能包含静态方法

5. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型

6. 一个类可以实现多个接口,但只能继承一个抽象类。

抽象方法只能放到抽象类中

public abstract class Demo {
	public abstract void show();
}
           
接口常用的变量和方法

public interface  Demo {
	public static final int i=1;
	public abstract void show();
}
           

多态中,成员特点

成员变量:(编译运行全看父类)

         编译时,参考父类中有没有这个变量,如果有,编译成功,没有编译失败

         运行时,运行的是父类中的变量值

成员方法:(编译看父类,运行看子类)

         编译时,参考父类中有没有这个方法,如果有,编译成功,没有编译失败

         运行时,运行的是子类的重写方法

静态成员变量和方法:

         编译和运行都看父类

Instanceof:比较引用数据类型

比较一个引用类型的变量是不是这个类型的对象

面向对象的三大特征:封装、继承、多态

封装:封装给对象提供了隐藏内部特性和行为的能力,对象提供了一些能被其他对象访问的方法来改变它内部的数据

继承:继承发生在子父类之间,子类继承父类所有的可继承的属性和方法

多态:多态的前提是继承,可以理解为同一种物质的多种形态

多态就是父类引用指向子类对象

多态弊端:不能调用子类特有的方法

构造方法在new的时候自动执行,只执行一次

子类调用父类的构造方法

super()调用的是父类的空参数构造        super(参数)调用的是父类的有参数的构造方法

final修饰类、方法、属性

final修饰类这个类不能被继承    修饰方法不能被重写  修饰变量为常量,只能赋值一次

如何实现对象的共享数据,在数据的前面加上static修饰

​
public class Person {
	String name;
	static String className;

}


public class Demo {
	public static void main(String[] args) {
		Person p1=new Person();
		Person p2=new Person();
		p1.name="哈哈";
		p2.name="呵呵";
		System.out.println(p1.name+"..."+p2.name);
		//对象调用类的静态成员变量
		p1.className="基础班";
		System.out.println(p2.className);
        //也可以直接类名调用
    
        System.out.println(Person .className);
	}
	

}

​
           

static关键字特点:

随着类的加载而加载   优先于对象存在  被所有对象所共享  可以直接被类名调用

匿名对象:没有名字的对象

应用场景:只调用一次的时候,匿名对象可以作为实际参数传递,可以作为方法的返回值

问题:

10.选择排序   {12,23,34,-23,56,25}

 11.冒泡排序  {12,23,34,-23,56,25}

 12.折半查找  {12,23,25,34,56}  折半查找前 必须要排好序

13.===========超市管理系统==========   实现增删改查

          1.货物清单  2.添加新货物 3.删除货物 4.修改货物 5.退出系统

                  (商品编号  商品名称  商品单价)

     根据案例介绍,我们进行分析,首先需要一个功能菜单,然后输入功能序号后,调用序号对应的功能方法,实现想要的操作。分析步骤如下

    1.完成超市商品初始化。创建商品,将商品添加到集合

    2.显示来到超市能做的操作,也就是显示主菜单

    3.根据接收到的功能选项,执行对应的功能

    3.1.库存货物查询

    3.2.添加新货物    

    3.3.删除货物

    3.4.修改货物

    3.5.退出系统,结束main方法的运行

    4.循环,回到 2.显示主菜单

14.随机学生 利用集合 

15.如何在创建子类的情况下 打印出父类的变量   子父类重名的情况下使用

16.原先手机有打电话,发短信 显示来电号码                 新手机在原有的基础上加了大头贴和来电姓名

17.this关键字在构造方法之间调用     调用自己类的构造方法

18.描述学生和工人这两个类,将他们的共性name和age抽取出来放到父类中,并提供相应的get和set方法,

同时需要在创建学生和工人对象就必须明确姓名和年龄.

19.某IT公司有多名员工,按照员工负责的工作不同,进行了划分,JavaEE工程师,网络维护工程师

工作内容:

JavaEE工程师:员工号为xxx的xxx员工,正在开发网站

网络维护工程师:员工号为xxx的xxx员工,正在检查网络是否畅通

(新增  强化Answer13的问题)

学生管理系统之学号不存在问题(对应上面的商品编号是否存在)

学生管理系统之学号重复问题(对应上面的商品编号是否重复)

public class Student {
    //学号
    private String sid;
    //姓名
    private String name;
    //年龄
    private String age;
}




/*
    学生管理系统
 */
public class StudentManager {

    public static void main(String[] args) {
        //创建集合对象,用于存储学生数据
        ArrayList<Student> array = new ArrayList<Student>();

        //用循环完成再次回到主界面
        while (true) {
            //用输出语句完成主界面的编写
            System.out.println("--------欢迎来到学生管理系统--------");
            System.out.println("1 添加学生");
            System.out.println("2 删除学生");
            System.out.println("3 修改学生");
            System.out.println("4 查看所有学生");
            System.out.println("5 退出");
            System.out.println("请输入你的选择:");

            //用Scanner实现键盘录入数据
            Scanner sc = new Scanner(System.in);
            String line = sc.nextLine();

            //用switch语句完成操作的选择
            switch (line) {
                case "1":
                    addStudent(array);
                    break;
                case "2":
                    deleteStudent(array);
                    break;
                case "3":
//                    System.out.println("修改学生");
                    updateStudent(array);
                    break;
                case "4":
                    findAllStudent(array);
                    break;
                case "5":
                    System.out.println("谢谢使用");
                    System.exit(0); //JVM退出
            }
        }
    }

    //定义一个方法,用于添加学生信息
    /*
    public static void addStudent(ArrayList<Student> array) {
        //键盘录入学生对象所需要的数据,显示提示信息,提示要输入何种信息
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入学生学号:");
        String sid = sc.nextLine();
        System.out.println("请输入学生姓名:");
        String name = sc.nextLine();
        System.out.println("请输入学生年龄:");
        String age = sc.nextLine();
        System.out.println("请输入学生居住地:");
        String address = sc.nextLine();

        //创建学生对象,把键盘录入的数据赋值给学生对象的成员变量
        Student s = new Student();
        s.setSid(sid);
        s.setName(name);
        s.setAge(age);
        s.setAddress(address);

        //将学生对象添加到集合中
        array.add(s);

        //给出添加成功提示
        System.out.println("添加学生成功");
    }
    */
    public static void addStudent(ArrayList<Student> array) {
        //键盘录入学生对象所需要的数据,显示提示信息,提示要输入何种信息
        Scanner sc = new Scanner(System.in);

        //为了让sid在while循环外面被访问到,我们就把它定义在了循环外
        String sid;

        //为了让程序能够回到这里,我们使用循环实现
        while (true) {
            System.out.println("请输入学生学号:");
            sid = sc.nextLine();

            boolean flag = isUsed(array, sid);
            if (flag) {
                System.out.println("你输入的学号已经被使用,请重新输入");
            } else {
                break;
            }
        }

        System.out.println("请输入学生姓名:");
        String name = sc.nextLine();
        System.out.println("请输入学生年龄:");
        String age = sc.nextLine();
        System.out.println("请输入学生居住地:");
        String address = sc.nextLine();

        //创建学生对象,把键盘录入的数据赋值给学生对象的成员变量
        Student s = new Student();
        s.setSid(sid);
        s.setName(name);
        s.setAge(age);
        s.setAddress(address);

        //将学生对象添加到集合中
        array.add(s);

        //给出添加成功提示
        System.out.println("添加学生成功");
    }

    //定义一个方法,判断学号是否被使用
    public static boolean isUsed(ArrayList<Student> array, String sid) {
        //如果与集合中的某一个学生学号相同,返回true;如果都不相同,返回false
        boolean flag = false;

        for(int i=0; i<array.size(); i++) {
            Student s = array.get(i);
            if(s.getSid().equals(sid)) {
                flag = true;
                break;
            }
        }

        return flag;
    }

    //定义一个方法,用于查看学生信息
    /*
    public static void findAllStudent(ArrayList<Student> array) {
        //显示表头信息
        //\t 其实就是tab键的位置
        System.out.println("学号\t\t\t姓名\t\t年龄\t\t居住地");

        //将集合中数据取出按照对应格式显示学生信息,年龄显示补充“岁”
        for (int i = 0; i < array.size(); i++) {
            Student s = array.get(i);
            System.out.println(s.getSid() + "\t" + s.getName() + "\t" + s.getAge() + "岁\t\t" + s.getAddress());
        }
    }
    */
    public static void findAllStudent(ArrayList<Student> array) {
        //判断集合中是否有数据,如果没有显示提示信息
        if (array.size() == 0) {
            System.out.println("无信息,请先添加信息再查询");
            //为了让程序不在往下执行,给出return;
            return;
        }


        //显示表头信息
        //\t 其实就是tab键的位置
        System.out.println("学号\t\t\t姓名\t\t年龄\t\t居住地");

        //将集合中数据取出按照对应格式显示学生信息,年龄显示补充“岁”
        for (int i = 0; i < array.size(); i++) {
            Student s = array.get(i);
            System.out.println(s.getSid() + "\t" + s.getName() + "\t" + s.getAge() + "岁\t\t" + s.getAddress());
        }
    }

    //定义一个方法,用于删除学生信息
    /*
    public static void deleteStudent(ArrayList<Student> array) {
        //键盘录入要删除的学生学号,显示提示信息
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入你要删除的学生的学号:");
        String sid = sc.nextLine();

        //遍历集合将对应学生对象从集合中删除
        for(int i=0; i<array.size(); i++) {
            Student s = array.get(i);
            if(s.getSid().equals(sid)) {
                array.remove(i);
                break;
            }
        }

        //给出删除成功提示
        System.out.println("删除学生成功");
    }
    */
    public static void deleteStudent(ArrayList<Student> array) {
        //键盘录入要删除的学生学号,显示提示信息
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入你要删除的学生的学号:");
        String sid = sc.nextLine();

        //在删除/修改学生操作前,对学号是否存在进行判断
        //如果不存在,显示提示信息
        //如果存在,执行删除/修改操作
        int index = -1;

        for (int i = 0; i < array.size(); i++) {
            Student s = array.get(i);
            if (s.getSid().equals(sid)) {
//                int index = i;
                index = i;
                break;
            }
        }

        if (index == -1) {
            System.out.println("该信息不存在,请重新输入");
        } else {
            array.remove(index);
            //给出删除成功提示
            System.out.println("删除学生成功");
        }
    }

    //定义一个方法,用于修改学生信息
    public static void updateStudent(ArrayList<Student> array) {
        //键盘录入要修改的学生学号,显示提示信息
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入你要修改的学生的学号:");
        String sid = sc.nextLine();

        //键盘录入要修改的学生信息
        System.out.println("请输入学生新姓名:");
        String name = sc.nextLine();
        System.out.println("请输入学生新年龄:");
        String age = sc.nextLine();
        System.out.println("请输入学生新居住地:");
        String address = sc.nextLine();

        //创建学生对象
        Student s = new Student();
        s.setSid(sid);
        s.setName(name);
        s.setAge(age);
        s.setAddress(address);

        //遍历集合修改对应的学生信息
        for (int i = 0; i < array.size(); i++) {
            Student student = array.get(i);
            if (student.getSid().equals(sid)) {
                array.set(i, s);
                break;
            }
        }

        //给出修改成功提示
        System.out.println("修改学生成功");
    }
}
           
public class Answer10 {  
	public static void main(String[] args) {
		int [] arr={12,23,34,-23,56,25};
		selectSort(arr);
		show(arr);
	}
	
	

	public static void selectSort(int[] arr){
		for (int i = 0; i < arr.length-1; i++) {
			for (int j = i+1; j < arr.length; j++) {
				if(arr[i]>arr[j]){
					int temp=arr[i];
					arr[i]=arr[j];
					arr[j]=temp;
				}
			}
		}
	}
	
	public static void show(int [] arr){
		System.out.print("[");
		for(int i=0;i<arr.length;i++){
			if(i!=arr.length-1){
				System.out.print(arr[i]+",");
			}else{
				System.out.print(arr[i]+"]");
			}
		}
	}
	
	

}
           
public class Answer11 {
	public static void main(String[] args) {
		int [] arr={12,23,34,-23,56,25};
		bubbleSort(arr);
		show(arr);
	}
	
	
	public static void bubbleSort(int[] arr){
		for (int i = 0; i < arr.length-1; i++) {
			//每次内循环的比较,从0索引开始,每次都在递减
			for (int j = 0; j < arr.length-1-i; j++) {   //冒泡减1是为了防止j+1越界异常
				if(arr[j]>arr[j+1]){
					int temp=arr[j+1];
					arr[j+1]=arr[j];
					arr[j]=temp;
				}
			}
		}
	}

	public static void show(int [] arr){
		System.out.print("[");
		for(int i=0;i<arr.length;i++){
			if(i!=arr.length-1){
				System.out.print(arr[i]+",");
			}else{
				System.out.print(arr[i]+"]");
			}
		}
	}

}
           
/*
 * 折半公式(min+max)/2
 * 指针思想
 * 折半后的指针索引和被查找元素比较
 * 元素>中间索引上的元素
 * 小指针=中间+1
 * 元素<中间索引上的元素
 * 大指针=中间-1
 * */
public class Answer12 {
	public static void main(String[] args) {
		int[] arr={12,23,25,34,56};
		int index=binarySearch(arr,25);
		System.out.println(index);
	}
	
	
	public static int binarySearch(int [] arr,int key){
		//定义三个指针变量
		int min=0;
		int max=arr.length-1;
		int mid=0;
		while(min<=max){
			//公式,计算中间索引
			mid=(min+max)/2;
			//让被找元素,和中间元素进行比较
			if(key>arr[mid]){
				min=mid+1;
			}else if(key<arr[mid]){
				max=mid-1;
			}else{
				//找到元素,返回元素索引
				return mid;
			}
		}
		return -1;
	}

}
           
import java.util.ArrayList;
import java.util.Scanner;

public class Answer13 {  
	public static void main(String[] args) {
		ArrayList<FruitItem> array=new ArrayList<>();
		init(array);
		while(true){
			mainMenu();
			int num=chooseFunction();
			switch (num) {
			case 1:
				showFruitItem(array);
				break;
			case 2:
				addFruit(array);
				break;
			case 3:
				deleteFruit(array);
				break;
			case 4:
				updateFruit(array);
				break;
			case 5:
				System.out.println("你已退出本管理系統");
				return ;

			default:
				System.out.println("请输入正确的序号");
				break;
			}
		}
		
		
	}
	
	public static void updateFruit(ArrayList<FruitItem> array){
		System.out.println("您现在操作的是商品修改功能");
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入你要修改的商品编号");
		int ID=sc.nextInt();
		for(int i=0;i<array.size();i++){
			FruitItem item=array.get(i);
			if(item.ID==ID){
				System.out.println("请输入新的商品编号");
				item.ID=sc.nextInt();
				System.out.println("请输入新的商品名称");
				item.brand=sc.next();
				System.out.println("请输入新的商品单价");
				item.price=sc.nextDouble();
				System.out.println("恭喜你修改商品成功");
				return;
			}
		}
		System.out.println("你输入的商品编号不存在");
	}
	
	public static void deleteFruit(ArrayList<FruitItem> array){
		System.out.println("您现在操作的是商品删除功能");
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入你要删除的商品编号");
		int ID=sc.nextInt();
		
		for(int i=0;i<array.size();i++){
			FruitItem item=array.get(i);
			if(item.ID==ID){
				array.remove(i);
				System.out.println("恭喜你删除商品成功");
				return ;
			}
		}
		System.out.println("你输入的商品编号不存在");
		
	}
	public static void addFruit(ArrayList<FruitItem> array){
		System.out.println("您现在操作的是商品添加功能");
		Scanner sc=new Scanner(System.in);
		FruitItem item=new FruitItem();
		System.out.println("请输入你要添加的商品编号");
		item.ID=sc.nextInt();
		System.out.println("请输入你要添加的商品名称");
		item.brand=sc.next();
		System.out.println("请输入你要添加的商品单价");
		item.price=sc.nextDouble();
		array.add(item);
		System.out.println("恭喜你添加商品成功");
	}
	public static void showFruitItem(ArrayList<FruitItem> array){
		System.out.println();
		System.out.println("=============商品库存清单=============");
		System.out.println("商品编号		  	商品名称 			 商品单价");
		for(int i=0;i<array.size();i++){
			FruitItem fi=array.get(i);
			System.out.println(fi.ID+" 			  "+fi.brand+"  			  "+fi.price);
		}
	}
	
	public static int chooseFunction(){
		return new Scanner(System.in).nextInt();
	}
	public static void mainMenu(){
		System.out.println();
		System.out.println("==============欢迎光临Itcast水果超市==============");
		System.out.println("1.货物清单   2.添加新货物   3.删除货物    4.修改货物     5.退出系统");
		System.out.println("请您输入要操作的需要");
	}
	public static void init(ArrayList<FruitItem> array){
		FruitItem f1=new FruitItem();
		f1.ID=1001;
		f1.brand="西瓜";
		f1.price=12.5;
		
		
		FruitItem f2=new FruitItem();
		f2.ID=1002;
		f2.brand="苹果";
		f2.price=16.0;
	
		
		FruitItem f3=new FruitItem();
		f3.ID=1003;
		f3.brand="人生果";
		f3.price=50.0;
	
		
		array.add(f1);
		array.add(f2);
		array.add(f3);
	}
}


class FruitItem{
	int ID;
	String brand;
	double price;
}
           
public class NewStudent {
	private String name;
	private int ag;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAg() {
		return ag;
	}
	public void setAg(int ag) {
		this.ag = ag;
	}
	

}





import java.util.ArrayList;
import java.util.Random;

public class Answer14 {
public static void main(String[] args) {
	ArrayList<NewStudent> array=new ArrayList<>();
	addStudent(array);
	showStudent(array);
	randomStudent(array);
}

public static void randomStudent(ArrayList<NewStudent> array){
	Random ran=new Random();
	int index=ran.nextInt(array.size());
	NewStudent ns=array.get(index);
	System.out.println(ns.getName()+"..."+ns.getAg());
}

public static void showStudent(ArrayList<NewStudent> array){
	for(int i=0;i<array.size();i++){
		NewStudent s=array.get(i);
		System.out.println(s.getName()+"...."+s.getAg());
	}
}
	public static void addStudent(ArrayList<NewStudent> array){
		NewStudent ns1=new NewStudent();
		ns1.setName("张三1");
		ns1.setAg(151);
		NewStudent ns2=new NewStudent();
		ns2.setName("张三2");
		ns2.setAg(152);
		NewStudent ns3=new NewStudent();
		ns3.setName("张三3");
		ns3.setAg(153);
		NewStudent ns4=new NewStudent();
		ns4.setName("张三4");
		ns4.setAg(154);
		NewStudent ns5=new NewStudent();
		ns5.setName("张三5");
		ns5.setAg(155);
		array.add(ns1);
		array.add(ns2);
		array.add(ns3);
		array.add(ns4);
		array.add(ns5);
	}
}
           
public class Answer15 {
	public static void main(String[] args) {
		Zi zi=new Zi();
		zi.show();
	}

}


class Fu{
	int i=1;
}

class Zi extends Fu{
	int i=2;
	public void show(){
		int i=3;
		System.out.println(i);
		System.out.println(this.i);
		System.out.println(super.i);
	}
}
           
public class Answer16 {
	public static void main(String[] args) {
		AndroidPhone ad=new AndroidPhone();
		ad.call();
		ad.sendMessage();
		ad.show();
	}

}


class Phone{
	public void call(){
		System.out.println("打电话了");
	}
	
	public void sendMessage(){
		System.out.println("发消息了");
	}
	
	public void show(){
		System.out.println("显示来电号码了");
	}
}

class AndroidPhone extends Phone{
	public void show(){
		super.show();    //调用了父类的方法  -----     
		System.out.println("大头贴");
		System.out.println("来电姓名");
	}
}
           
public class  Person {
	private String name;
	private int age;
	
	public Person(){
		//调用了有参数的构造方法  参数 张三 18传给了变量name 和 age
		this("张三",18);
	}
	
	public Person(String name,int age){
		this.name=name;
		this.age=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;
	}
	
	
}




public class Answer17 {
	public static void main(String[] args) {
		Person p=new Person();
		System.out.println(p.getName()+"..."+p.getAge());
	}

}
           
public class  Person {
	private String name;
	private int age;
	
	public Person(String name,int age){
		super();
		this.name=name;
		this.age=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;
	}
	
	
}


public class Student extends Person{
	public Student(String name, int age) {
		super(name, age);
	}

}

public class Worker extends Person{

	public Worker(String name, int age) {
		super(name, age);
	}

}


public class Answer18 {
	public static void main(String[] args) {
		Student s=new Student("张三",18);
		Worker w=new Worker("李四",20);
		System.out.println(s.getName()+"..."+s.getAge());
		System.out.println(w.getName()+"..."+w.getAge());
	}

}
           
public abstract class Employee {
	private String name;
	private int age;
	
	public Employee(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	
	public abstract void work();
	
	
	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 class JavaEE extends Employee{

	public JavaEE(String name, int age) {
		super(name, age);
	}

	public void work() {
		System.out.println("员工号为"+super.getName()+"..."+"年龄为"+super.getAge()+",正在开发网站");
	}

}


public class Maintainer extends Employee{

	public Maintainer(String name, int age) {
		super(name, age);
	}

	public void work() {
		System.out.println("员工号为"+super.getName()+"..."+"年龄为"+super.getAge()+",正在检查网络是否畅通");
	}
}



public class Answer19 {
	public static void main(String[] args) {
		JavaEE javaEE=new JavaEE("张三",18);
		Maintainer maintainer=new Maintainer("李四", 20);
		javaEE.work();
		maintainer.work();
	}

}
           

继续阅读