Java Language Programming - Study Notes (Liaoning University, Lectured by Wang Qingsong)

Table of contents

1. Basics of Java

2. Code training

2.1 string

2.1.1 split() exercise

2.1.2 String integer conversion

2.1.3 Judging whether it is a legitimate mailbox

2.1.4 Return the position where the string sub first appears in the string s, if it does not exist, return -1, and the function is not allowed

2.1.5 String related function usage test

2.1.6 Comparison between strings

2.1.7 Output all daffodil numbers between 100 and 999

2.2 Arrays

2.2.1 Bubble sort

2.2.2 Find the maximum number of arrays

2.2.3 Display and exchange of two-dimensional array

2.2.4 Output the maximum number of two-dimensional array

2.3 Object Oriented

2.3.1 Circle object: find the average radius of all circles

2.3.2 Function output Welcome to Beijing, test static

2.3.3 Comparative study of call by value and call by reference

2.3.4 Date class: find out what day tomorrow is, and judge how many days there are in this month

2.3.5 Celestial body exercises

2.3.6 Student Exercises

2.3.7 static test learning

2.3.8 Homework: Write a public car class exercise

2.3.9 Linked list creation insertion deletion

2.4 Inheritance

2.4.1 Understanding of inheritance

2.4.2 The understanding of final

2.4.3 Creation and use of stack

2.5 interface

2.5.1 Comparative study of inheritance and interface

2.6 Inner class plus object-oriented comprehensive exercise

2.6.1 Coordinate comparison

2.6.2 The same interface implements different content

2.7 exception handling

2.7.1 hello world exception handler

2.7.2 The divisor cannot be 0

2.7.3 The second way of writing that the divisor cannot be 0

2.7.4 Custom divisor cannot be 0 exception

2.8 collection

2.9 File Operation

2.9.1 Each line in sample2023.txt represents a file, and there may be many lines. We count the number of file types and output the file types obtained from the statistics. (wrong)


1. Basics of Java

     Just learn the following code, which is suitable for people with programming foundation. If you don't have programming foundation, it is recommended to learn it systematically before typing.

2. Code training

2.1 string

2.1.1 split() exercise

//创建一个字符串,然后通过",",将字符串分割成字符串数组,并且将字符串数组中的元素每个都输出出来
public class Division {
    public static void main(String [] args){
        String str = new String("abc,deff,ghi,jds");
        String[] newstr = str.split(",");
        for(int i = 0; i < newstr.length; i++){
            System.out.println(newstr[i]);
        }
        String[] newstr2 = str.split(",", 2);
        for(int j = 0; j < newstr2.length; j++){
            System.out.println(newstr2[j]);
        }
    }
}

2.1.2 String integer conversion

//将整形456转换为字符串,二进制字符串,"456"转整形,求int最大值,求int类型数据所占用byte
public class IntegerTest {
    public static void main(String[] args){
        String str = Integer.toString(456);
        String str2 = Integer.toBinaryString(456);
        int i = Integer.parseInt("456");
        int maxint = Integer.MAX_VALUE;
        int intsize = Integer.SIZE;
        System.out.println("'456'的十进制表示为:" + str);
        System.out.println("'456'的二进制表示为:" + str2);
        System.out.println("\"456\"转换为十进制是:" + i);
        System.out.println("int类型的最大取值为:" + maxint);
        System.out.println("int类型的二进制位数为" + intsize);
    }
}

2.1.3 Judging whether it is a legitimate mailbox

//判断是不是一个合法的邮箱
public class judge_e_mail {
    public static void main(String [] args){
        String regex = "\\w+@\\w+(\\.\\w{2,3})*\\.\\w{2,3}";
        String str1 = "aaa@";
        String str2 = "aaaaaaa";
        String str3 = "[email protected]";
        //matches用于判断字符串是否和正则表达式匹配
        if (str1.matches(regex)) {
            System.out.println(str1 + "是一个合法的E_mail地址");
        }
        if (str2.matches(regex)) {
            System.out.println(str2 + "是一个合法的E_mail地址");
        }
        if (str3.matches(regex)) {
            System.out.println(str3 + "是一个合法的E_mail地址");
        }
    }
}

2.1.4 Return the position where the string sub first appears in the string s, if it does not exist, return -1, and the function is not allowed

public class String_homework {
    public static int indexOf(String s, String sub) {
        //返回串sub在串s中首次出现的位置,如果不存在,则返回-1
        for(int i = 0; i < s.length(); i++){
            //从s中截取和sub长度一样的字符串,和sub比较,子串相同即找到,不相等再比较下一个新的字符串,直到找到或找不到
            for(int j = 0; j < sub.length(); j++){
                if (s.charAt(i + j) != sub.charAt(j)){
                    break;
                }
                if (s.charAt(i + j) == sub.charAt(j) && j != sub.length() - 1){
                    continue;
                }
                if (s.charAt(i + j) == sub.charAt(j) && j == sub.length() - 1){
                    return i;
                }
            }}
        return -1;
    }
    public static void main(String [] args){
        String s = "This is a book.";
        System.out.println(indexOf(s, "is"));
    }
}

2.1.5 String related function usage test

public class test1 {
    public static void main(String[] args){
        //String用于创建不可改变字符串
        String s = "This is a book.";
        int iii = s.indexOf("this", 5);
        //去字符串空格
        String s_trim = s.trim();
        //取出某个字符
        char c = s.charAt(2);
        System.out.println("c: " + c);
        int i = s.length();
        //取子串
        String sub_s = s.substring(1);
        //引用
        String s1 = s.toUpperCase();
        String s2;
        s2 = s.replace("!", ".");
        System.out.println("sub_s = " + sub_s);
        System.out.println("s1 = " + s1);
        System.out.println("s2 =" + s2);
        System.out.println("s = " + s);
        // StringBuffer用于创建可改变的字符
        StringBuffer ss = new StringBuffer("drink java!");
        ss.insert(6, "Hot ");
        System.out.println("ss = " + ss);
        ss.setCharAt(0, 'D');
        System.out.println("ss = " + ss);
        String s_int = "1234";
        //使用了包装类integer,i=(int)s_int
        i = Integer.parseInt(s_int);
        System.out.println(i);
    }
}

2.1.6 Comparison between strings


public class TestEqual {
    public static void main(String[] args){
        //字符串比较的集中对比
        String s1 = new String("abc");
        String s2 = new String("ABC");
        String s3 = new String("abc");
        //int address1 = System.identityHashCode(s1);
        //System.out.println(address1);
        boolean b2 = s1.equalsIgnoreCase(s2);
        boolean b = s1.equals(s2);
        System.out.println(s1 + " equal " + s2 + " :" + b);
        System.out.println(s1 + " equalsIgnoreCase " + s2 + " :" + b2);
        b = (s1 == s3);
        /*s1 == s3 false原因是两个等号判断的是字符串的地址是否相等,字符串关于值的
        判断要用equals*/
        System.out.println("s1 == s3 " + b);
        String s4 = "abc";
        String s5 = "abc";
        String s6 = "abcd";
        b = (s4 == s5);
        System.out.println("s4 == s5 " + b);
        b = (s5 == s6);
        System.out.println("s5 == s6 " + b);
        s6 = "abc";
        b = (s5 == s6);
        System.out.println("*********************s5==s6 " + b);
        String  str = "abcd";
        System.out.println(str.compareTo("cat"));
    }
}

2.1.7 Output all daffodil numbers between 100 and 999

public class Water_flower {
    static boolean sxh(int n){
	   /*n是三位整数,判断n是否为水仙花数,如果是返回true,否则返回false
	     水仙花数等于其个位数的立方加十位数的立方加百位数的立方。
	     例如,153=1的立方+5的立方+3的立方,所以153是水仙花数 */
        String n_str =Integer.toString(n);
        int sum = 0;
        int j = 0;
        for(int i = 0; i < 3; i++){
            //将j转换成整形
            j = n_str.charAt(i) - '0';
            sum += j * j * j;
        }
        if (sum == n){
            return true;
        }
        return false;
    }
    static void printsxh(){
        //输出100到999之间的所有水仙花数
        for(int i = 100; i < 1000; i++){
            if(sxh(i)){
                System.out.print(i + ",");
            }
        }
    }
    public static void main(String[] args) {
        System.out.println("100到999之间的所有水仙花数:");
        printsxh();  //调用方法输出100-999的水仙花数
    }
}

2.2 Arrays

2.2.1 Bubble sort

public class BubbleSort {
    public static void main(String[] args) {
        // 创建一个数组,这个数组元素是乱序的
        int[] array = { 63, 4, 24, 1, 3, 15 };
        // 创建冒泡排序类的对象
        BubbleSort sorter = new BubbleSort();
        // 调用排序方法将数组排序
        sorter.sort(array);
    }

    /**
     *冒泡排序
     *
     * @param array
     *            要排序的数组
     */
    public void sort(int[] array) {
        for (int i = 0; i < array.length; i++) {
            // 比较相邻两个元素,较大的数往后冒泡
            for (int j = 0; j < array.length - i - 1; j++) {
                if (array[j] > array[j + 1]) {
                    int temp = array[j];// 把第一个元素值保持到临时变量中
                    array[j] = array[j + 1];// 把第二个元素值保存到第一个元素单元中
                    array[j + 1] = temp;// 把临时变量也就是第一个元素原值保持到第二个元素中
                }
            }
        }
        showArray(array);// 输出冒泡排序后的数组元素
    }

    /**
     * 显示数组所有元素
     *
     * @param array
     *            要显示的数组
     */
    public void showArray(int[] array) {
        for (int i : array) {// foreach格式遍历数组
            System.out.print(" >" + i);// 输出每个数组元素值
        }
        System.out.println();
    }
}

2.2.2 Find the maximum number of arrays

import java.util.*;
public class Array_Max{
    public static void main(String[] args)  {
        //求N个数的最大数
        final int N=5;
        int score[]=new int[N];
        int max;

        Scanner reader=new Scanner(System.in);
        System.out.println("Input "+N+" number ,Please:");
        for(int i=0;i<N;i++)
            score[i]=reader.nextInt();
        max=score[0];
        for(int i=1;i<score.length;i++)
            if(score[i]>max) max=score[i];
        System.out.println("max="+max);
    }
}

2.2.3 Display and exchange of two-dimensional array

public class arr_2 { // 创建类
    public static void change(int[][] a){
        //将数组本身的数据行列互换
        int i,j,temp;
        for(i=1;i<a.length;i++) //对矩阵a的下三角循环
            for(j=0;j<i;j++){//将a[i][j]和a[j][i]交换
                temp=a[i][j];
                a[i][j]=a[j][i];
                a[j][i]=temp;
            }
    }
    public static void showArray(int[][] arr){
        //将数组的数据按行显示
        for(int i = 0;i<arr.length;i++){
            for(int j=0;j<arr[i].length;j++){
                System.out.print(arr[i][j]+"\t");
            }
            System.out.println();
        }
    }
    public static void main(String[] args) {
        int arr[][]=new int[][]{
   
   {1,2,3},{4,5,6},{7,8,9}};
        System.out.println("数组原有内容:");
        showArray(arr);
        change(arr);//将数组arr的数据行列互换
        System.out.println("行列互换后数组内容:");
        showArray(arr);
    }
}

2.2.4 Output the maximum number of two-dimensional array

import java.util.*;
public class TwoArray_Max{
    public static void main(String[] args)  {
        /*通过键盘给3*4的二维数组输入数据,
         *然后按行输出数组元素,
         *并输出数组中最大的元素及行和列号
         **/
        final int N=3,M=4;
        int a[][]=new int[N][M];
        Scanner reader=new Scanner(System.in);
        System.out.println("Input "+N+"*"+M+" number ,Please:");
        for(int i=0;i<a.length;i++)
            for(int j=0;j<a[i].length;j++)
                a[i][j]=reader.nextInt();
        System.out.println("数组中元素是");
        int max,row,col;
        max=a[0][0];
        row=col=0;
        for(int i=0;i<a.length;i++){
            for(int j=0;j<a[i].length;j++){
                System.out.printf("%5d",a[i][j]);
                if(a[i][j]>max){max=a[i][j];row=i;col=j;}
            }
            System.out.println();
        }
        System.out.println("row="+row+"  col="+col+"  max="+max);
    }
}

2.3 Object Oriented

2.3.1 Circle object: find the average radius of all circles

Running guide: These two files are placed under the Object_oriented1 package, and then run Circle_test.

//file_name:Circle
package Object_oriented1;
public class Circle {
    private static double PI=3.14;
    private double radius;
    public Circle(double r) {
        radius=r;
    }
    public static double average(Circle c[]) {
        //用来返回Circle对象数组里所有radius成员的平均值。
        double sum=0.0;
        for(int i=0;i<c.length;i++)
            sum+=c[i].radius;
        return (sum/c.length);
    }
}

//flie_name:Circle_test
package Object_oriented1;
public class Circle_test {
    public static void main(String args[])
    {
        Circle cir[]=new Circle[3];
        cir[0]=new  Circle(1.0);
        cir[1]=new  Circle(4.0);
        cir[2]=new  Circle(2.0);
        System.out.println("radius??????????  "+Circle.average(cir));
        //System.out.println("???PI????  "+Circle.?);PI是private搞不出来,改成public才可以输出
    }
}

2.3.2 Function output Welcome to Beijing, test static

package Object_oriented1;
public class Chinese {
    public static void main(String [] args){
        sing();
    }
    static{
        System.out.println("hello");
    }
    static void sing(){
        System.out.println("北京欢迎你");
    }
}

2.3.3 Comparative study of call by value and call by reference

1) As follows, calling by value will not change the value of the variable. After the function pops the stack, the value of the original variable remains unchanged.

//flie_name:value_test
public class value_test {
    public static void main(String [] args){
        int b = 10;
        System.out.println("传值调用传值调用HalfInt之前b="+b);
        halfint(b);
        System.out.println("传值调用HalfInt之后b="+b);
    }
    public static void halfint(int a){
        a /= 2;
    }
}

2) As follows, calling by address will change the value of the variable. After the function pops the stack, the value of the original variable will change.

//file_name:adress_test
class Person{
    String name;
    int age;
    String sex;
    public Person(String _name, int _age, String _sex){
        name = _name;
        age = _age;
        sex = _sex;

    }
}
public class adress_test {
    public static void main(String [] args){
        Person a = new Person("zhangsan", 20, "男");
        System.out.println("传址调用changeAge之前age="+a.age);
        changeAge(a);
        System.out.println("传引用调用changeAge之后age="+a.age);
    }
    public static void changeAge(Person p){
        p.age = 18;
    }
}

2.3.4 Date class: find out what day tomorrow is, and judge how many days there are in this month

package Object_oriented1;
public class Date{
    private int day,month,year;
    Date(int i,int j,int k){
        day = i;    month = j;     year = k;
    }
    Date(){
        day = 1;    month = 1;   year = 1998;
    }
    Date(Date d){
        day=d.day; month = d.month; year = d.year;
    }
    public void printDate(){
        System.out.print(day+"/"+month+"/"+year);
    }
    public Date tomorrow(){
        Date d = new Date(this);
        d.day++;
        if(d.day>d.daysInMonth()){
            d.day = 1;       d.month++;
            if(d.month > 12){
                d.month = 1;  d.year ++;
            }
        }
        return d;
    }
    public int daysInMonth(){
        switch(month){
            case 1:case 3:case 5: case 7:
            case 8:case 10:case 12:
                return 31;
            case 4:case 6:case 9:case 11:
                return 30;
            default:
                if((year%400==0)||(year % 100 !=0 && year % 4 ==0))
                    return 29;
                else return 28;
        }
    }
    public static void main(String args[]){
        Date d1 = new Date();
        System.out.print("The current date is(dd/mm/yy):");
        d1.printDate();
        System.out.println();
        System.out.print("Its tomorrow is(dd/mm/yy):");
        d1.tomorrow().tomorrow().printDate();
        System.out.println();
        Date d2 = new Date(28,2,1964);
        System.out.print("The current date is(dd/mm/yy):");
        d2.printDate();
        System.out.println();
        System.out.print("Its tomorrow is(dd/mm/yy):");
        d2.tomorrow().printDate();
        System.out.println();
    }
}

2.3.5 Celestial body exercises

//天体类
public class Body {
    public long idNUM;//唯一标识天体
    public String nameFor= "unnamed";//天体名字
    public Body oribits = null;//环绕天体
    public static long nextID = 0;//下一个天体号
    Body(){
        idNUM = nextID++;
    }
    Body(String bodyNAME, Body oribitsAround){
        this();
        nameFor = bodyNAME;
        oribits = oribitsAround;
    }
    public static void main(String [] args){
        Body sun = new Body("Sun", null);
        Body earth = new Body("Earth", sun);
        Body xxx = new Body();
        System.out.println(xxx.idNUM + " " + xxx.nameFor);
        System.out.println(earth.oribits.nameFor);
        System.out.println(Body.nextID);
    }
}

2.3.6 Student Exercises

package oo1;
class Student                       //类名是Student
  {
	 String name;                   //类的属性也叫,类的成员
     int birth;
     Student(){}
     Student(String _name,int _birth)          //构造器
      {
         name = _name;                  //给属性赋值
         birth = _birth;
      }
    public void show()             
                          //公用方法名称为show,没有返回值
      {
        System.out.println("姓名="+name);    //输出姓名
        System.out.println("生日="+birth);
      }
     
  }//Student                       
public class Student_Test {
	public static void main(String[] args) {
		 // Student d3= new Student();
		   Student d1= new Student("张三",19510101);  //d1对象实体
	       Student d2= new Student("李四",19680808);
	       System.out.println("对象d1的属性及方法");
	       System.out.println("name="+d1.name);   //d1对象属性name
	       System.out.println("birth="+d1.birth);
	       d1.show();     //d1对象show方法
	       d1.name="张三丰";
	       System.out.println("对象d2的属性及方法");
	       System.out.println("name="+d2.name);
	       System.out.println("birth="+d2.birth);
	       d2.show();
	}
}

2.3.7 static test learning

1) Static attribute (class attribute) learning

public class static_test{
    static  int  count=0;   //静态属性,也叫类属性,各对象共享此属性
    String   xh;      //学号
    String   name;    //姓名
    static_test(String  xh1,String name1){
        xh=xh1;
        name=name1;
        count++;
    }
    public  void show(){
        System.out.println("xh="+xh+"  name="+name);
    }
    public  static void showcount(){//静态方法,也叫类方法
        System.out.println("学生数是:"+count);
    }
    public static void main(String args[]){
        static_test  s1=new static_test("1","张三");
        static_test  s2=new static_test("2","李四");
        s1.show();
        s2.show();
        System.out.println("学生数是:"+static_test.count);
        static_test.showcount();
        System.out.println(s1.name);
        System.out.println(s2.name);
        System.out.println(s1.count);
        System.out.println(s2.count);
        s1.showcount();
        s2.showcount();
    }
}

2) Static block, code block, constructor test learning

public class StaticTest2 {// 初始化顺序
    static int a = 1;
    {
        a = 2;
        System.out.println("代码块"+ a);
    }
    // 仅执行一次
    static {
        a = 3;
        System.out.println("静态块"+a);
    }
    public StaticTest2() {//构造器

        a = 4;
        System.out.println("构造方法" + a);
    }
    public static void main(String[] args) {
        StaticTest2 s=new StaticTest2();
        //System.out.println(new StaticTest2().a);
        System.out.println(s.a);
        System.out.println(new StaticTest2().a);
    }
}

2.3.8 Homework: Write a public car class exercise

/*
2023.3.30练习:
编写一个公有Car类,包含这样两个属性:当前速度 speed (整型)及车主的姓名name (字符串型)包含一个show0方法可用来显
示两个属性的值,包含一个构造器可以初始化两个属性,在main方法中定义两个Car类型的对象c,d并调用各自的方法。
 */
public class car {
    public int speed;
    public String name;
    car(int _speed, String _name){
        speed = _speed;
        name = _name;
    }
    public void show(){
        System.out.println("速度" + speed);
        System.out.println("名字" + name);
    }
    public static void main(String [] args){
        car c = new car(134, "freezing");
        car d = new car(324,"rebecca");
        c.show();
        d.show();
    }
}

2.3.9 Linked list creation insertion deletion

import java.util.Scanner;
public class SingleLinkList {
    //Node的定义在Node里面,下面的代码
    Node head=null;  //链表的头指针
    public void createList(int n) {
        //创建含n个结点的带头结点的单链表(尾插法)
        if(n<1) return;
        head = new Node();//生成头结点
        Node r,p;
        int data;
        r=head;  //r在链表尾部
        System.out.println("输入"+n+"个整数,用来创建单链表");
        Scanner reader=new Scanner(System.in);
        for(int i=1;i<=n;i++) {
            data=reader.nextInt(); //由键盘输入一个整数
            p=new Node(data); //申请一个结点
            r.next=p; //将新来结点链接在r的后面
            r=p; //r指向p
        }
        reader.close();
    }
    public void printList() {
        Node p;
        System.out.print("The List:");
        p=head.next; //p指向链表的第一个结点
        while(p!=null) {
            System.out.print(p.data+"\t");
            p=p.next;
        }
        System.out.println(); //换行
    }
    public int length() {
        //返回单链表的长度,不包括头结点
        Node p;
        p=head.next;
        int count=0;
        while(p!=null) {
            count++;
            p=p.next;
        }
        return count;
    }
    public boolean insertList(int i,int e) {
        //在链表的第i个结点前插入一个值为e的结点,插入成功返回true,否则返回false
        Node p=head;
        int j=0;
        if(i<1) return false;
        while(p!=null&&j<i-1) {
            j++;
            p=p.next;
        }
        if(p==null) return false;
        Node q=new Node(e);
        q.next=p.next;
        p.next=q;
        return true;
    }
    public boolean deleteList(int i) {
        //删除链表的第i个结点,删除成功返回true,否则返回false
        Node p=head;
        int j=0;
        if(i<1) return false;
        while(p!=null&&j<i-1) {
            j++;
            p=p.next;
        }
        if(p==null||p.next==null) return false;
        p.next=p.next.next;
        return true;
    }
    public static void main(String[] args) {
        SingleLinkList L=new SingleLinkList();
        L.createList(5);
        L.printList();
        System.out.println("length="+L.length());
        if(L.insertList(2, 99)) {
            System.out.println("insert success!");
            L.printList();
        }
        L.deleteList(2);
        L.printList();

    }

}
public class Node { //结点的定义
    int data; //数据域
    Node next; //引用,下一个结点
    public Node() {
        next=null;
    }
    public Node(int data) {
        this();
        this.data=data;
    }
}

2.4 Inheritance

2.4.1 Understanding of inheritance

class A{
    void call(){
        System.out.println("A's call() method");
    }
}
class B extends A{
    void call(){
        System.out.println("B's call() method");
    }
    void other(){
        System.out.println("B......");
    }
}
public class Dispatch{
    public static void main(String args[]){
        A a= new B();
        A c = new A();
        //也叫对象转换,反过来不可以,如(B a= new A())
        a.call(); //可以调用a.other吗?
        System.out.println("---------------------------------");
        B b=new B();
        ((A)b).call();
    }
} //Dispatch

2.4.2 The understanding of final

package Object_oriented2;
// 终结类:不能被继承
public final class FinalTest {

    // 常量:只能通过显示初始化或构造器初始化
    public final int x = 1;

    // 终结方法:不能被 重写
    public final void method() {
        // 局部常量
        final int y = 2;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        FinalTest a = new FinalTest();
        System.out.println(a.x);
        //a.x = 2;
        a.method();
        System.out.println(a.x);
    }

}

2.4.3 Creation and use of stack

The following two files are under the same package

package Object_oriented2;
public class MyStack {
    private int[] data;
    private int top = -1;
    private int size;  //最大容量

    public MyStack() {
        data = new int[100];
        this.size = 100;
    }

    public MyStack(int size) {
        data = new int[size];
        this.size = size;
    }

    public void push(int obj) {
        if (top < size - 1) {
            top++;

            this.data[top] = obj;
        }
        else System.out.println("栈满!");
    }

    public int pop() {
        int t;

        if (top > -1) {
            t = this.data[top];
            top--;
            return  t;
        }
        System.out.println("栈空!");
        return -9999;
    }

    public void printAll() {
        for (int i = 0; i <= top; i++) {
            System.out.println(data[i]);
        }
    }

}

package Object_oriented2;
public class MyStackTest {
    public static void main(String[] args) {
        int t;
        MyStack stack = new MyStack();

        // 入栈
        stack.push(1);
        stack.push(2);
        stack.push(3);
        stack.push(4);

        stack.printAll();

        // 出栈
        t=stack.pop();
        if(t!=-9999)  System.out.println("弹出的栈顶元素为:"+t);
        t=stack.pop();
        if(t!=-9999)  System.out.println("弹出的栈顶元素为:"+t);
        stack.printAll();
        stack.pop();
        stack.pop();
        stack.pop();
    }
}

2.5 interface

2.5.1 Comparative study of inheritance and interface

Declaration of the interface: the interface only contains constants and abstract methods, but no variable and method implementation (such as: shape)

package Object_oriented2;
//
//public class Shape {
//    double girth;//周长
//    double area;//面积
//    public double getGirth(){
//        return girth;
//    }
//    public double getArea(){
//        return area;
//    }
//}
interface Shape {
    public double getGirth();
    public double getArea();
}

Rectangle: shape interface

package Object_oriented2;

public class Rect implements Shape{
    //矩形
    double width;
    double height;
    public Rect(double width, double height){
        this.width = width;
        this.height = height;
    }
    public Rect(){}
    public double getGirth(){
        //方法覆盖overload,求矩形周长
        return (width + height) * 2;
    }
    public  double getArea(){
        return width * height;
    }
}

Square: Inherited from Rectangle

package Object_oriented2;

public class Square extends Rect{
    public  Square(double width){
        super(width, width);
    }
}

Circle: shape interface

package Object_oriented2;

public class Circle implements Shape{
    double r;
    final double PI = 3.1415;
    public Circle(double r){
        this.r = r;
    }
    public Circle(){};
    public double getGirth(){
        return 2 * PI * r;
    }
    public double getArea(){
        return PI * r * r;
    }

}

2.6 Inner class plus object-oriented comprehensive exercise

2.6.1 Coordinate comparison

import java.util.Arrays;
import java.util.Comparator;
public class Array_sort {
    Point[] arr;
    Array_sort(){
        arr = new Point[4];
        for(int i = 0; i < arr.length; i++)
            arr[i] = new Point();
    }
    public static void main(String [] args){
        //初始化对象中的数据
        Array_sort sort = new Array_sort();
        sort.arr[0].x = 2; sort.arr[0].y = 1;
        sort.arr[1].x = 2; sort.arr[1].y = 2;
        sort.arr[2].x = 1; sort.arr[2].y = 2;
        sort.arr[3].x = 0; sort.arr[3].y = 2;
        Arrays.sort(sort.arr, new MyComprator());    //使用指定的排序器,进行排序
        for(int i=0;i<4;i++)    //输出排序结果
            System.out.println("("+sort.arr[i].x+","+sort.arr[i].y+")");
    }
}
class Point{
    int x;
    int y;
}
//比较器
class MyComprator implements Comparator{
    public int compare(Object arg0, Object arg1) {
        Point t1=(Point)arg0;
        Point t2=(Point)arg1;
        if(t1.x != t2.x)
            return t1.x>t2.x? 1:-1;
        else
            return t1.y>t2.y? 1:-1;
    }
}

2.6.2 The same interface implements different content

package Object_oriented1;
interface CallBack{
    //执行回调操作的方法
    void execute(); //统一的接口实现不同的内容
}
public class tools {
    public static void main(String [] args){
        tools tool = new tools();
        System.out.println("String");
        tool.testTime(new CallBack() {
            @Override
            public void execute() {//测试String性能
                String str = new String();
                for(int i = 0; i < 10000; i++)
                    str = str + i;
            }
        });
        System.out.println("StringBuffer ");
        tool.testTime(new CallBack() {
            @Override
            public void execute() {//测试StringBuffer性能
                StringBuffer sbf = new StringBuffer();
                for(int i = 0; i < 100000; i++)
                    sbf.append(i);
            }
        });
        System.out.println("StringBuffer ");


    }
    public void testTime(CallBack callback){
        long begin = System.currentTimeMillis();//测试起始时间
        callback.execute();
        long end = System.currentTimeMillis();//测试结束时间
        System.out.println("[use time] : " + (end - begin));
    }
}

2.7 exception handling

2.7.1 hello world exception handler

package exception;

public class HellowWorldEx {
    public static void main(String[] args){
        int i = 0;
        String[] greetings = {"hellow", "ok", "hi"};
        while(i < 4){
            try{
                System.out.println();
                System.out.println(greetings[i]);
            }
            catch(ArrayIndexOutOfBoundsException e){
                System.out.println("re_setting index value");
                break;
            }
            catch(Exception e){
                System.out.println(e.toString());
                e.printStackTrace();
                break;
            }
            finally {
                System.out.println("This is always printed");
            }
            i++;
        }
        System.out.println("programm ...");

    }
}

2.7.2 The divisor cannot be 0

package exception;
import java.util.Scanner;

public class QuotientWithMethod {
    public static int quotient(int n1, int n2){
        if (n2 == 0){
            throw new ArithmeticException("Divisor cannot be zero");
        }
        return n1/n2;
    }
    public static void main(String[] args){
        Scanner r = new Scanner((System.in));
        System.out.println("Enter two Integers:");
        int n1 = r.nextInt();
        int n2 = r.nextInt();
        r.close();
        try {
            int result = quotient(n1, n2);
            System.out.println(n1 + " / " + n2 + " is " + result);
        }
        catch(ArithmeticException e){
            System.out.println("Execution an integer " + e.getMessage());
        }
        System.out.println("Execution continues...");
    }
}

2.7.3 The second way of writing that the divisor cannot be 0

package exception;
import java.util.Scanner;
public class QuotientWithMethod_1 {
    public static int quotient(int n1,int n2) {
        if(n2==0) {
            System.out.println("Divisor cannot be zero");
            System.exit(1);
        }
        return n1/n2;
    }
    public static void main(String[] args) {
        Scanner r=new Scanner(System.in);
        System.out.println("Enter two Integers:");
        int n1=r.nextInt();
        int n2=r.nextInt();
        r.close();
        int result=quotient(n1,n2);
        System.out.println(n1+" / "+n2+" is "+result);
        System.out.println("Execution continues...");
    }
}

2.7.4 Custom divisor cannot be 0 exception

package exception;
import java.util.InputMismatchException;
import java.util.Scanner;
class MyException extends Exception{//创建自己的异常类,必须继承Exception
    private String message;
    public MyException(String ErrorMessage){
        message = ErrorMessage;
    }
    public String getMessage(){
        return message;
    }

}

public class ExceptionDemo {
    static int quotient(int x, int y) throws MyException{//自定义方法抛出异常
        if (y < 0)
            throw  new MyException("除数不能是负数");
        else if (y == 0)
            throw new MyException("除数不能是0");
        return x/y;
    }
    public static void main(String [] args){
        int m, n;
        System.out.println("输入两个数m,n:");
        Scanner r = new Scanner(System.in);
        try{
            m = r.nextInt();
            n = r.nextInt();
            int result  = quotient(m, n);
            System.out.println(m + " / " + n + " = " + result);
        } catch(InputMismatchException e){
            System.out.println("输入数据不合理!");
        }
        catch (MyException e){//处理自定义异常
            System.out.println(e.getMessage());
        }
        catch (Exception e){
            System.out.println("程序发生了其他异常");
        }
        finally {
            r.close();
        }

    }
}

2.8 collection

2.9 File Operation

2.9.1 Each line in sample2023.txt represents a file, and there may be many lines. We count the number of file types and output the file types obtained from the statistics. (wrong)

import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;

public class file_homework {
    public static void main(String [] args) throws IOException {
        FileReader file = new FileReader("sample2023.txt");
        // 使用ArrayList来存储每行读取到的字符串
        ArrayList<String> arrayList = new ArrayList<String>();
        BufferedReader bf = new BufferedReader(file);
        HashMap<String,Integer> result = new HashMap<>();
        String str;
        while ((str = bf.readLine()) != null) {
            arrayList.add(str);
        }
        bf.close();
        file.close();
        for(int i = 0; i < arrayList.toArray().length; i++){
            String str_2 = arrayList.get(i);
            char[] str_arr = str_2.toCharArray();
            for(int j = 0; j < str_arr.length; j++){
                if(arrayList.get(i).toCharArray()[j] == '.'){
                    String file_type_string = str_2.substring(j + 1, str_arr.length);
                    if(result.containsKey(file_type_string)){
                        //出现过,先得到集合中的出现次数再自加
                        Integer count = result.get(file_type_string);
                        count++;
                        result.put(file_type_string, count);
                    }else {
                        //没出现直接放进集合中
                        result.put(file_type_string, 1);
                    }
                }

            }
        }
    System.out.println(result);
    }
}

sample2023.txt

2018/10/12  17:11           189,137    20181005-01_页面_1.jpg
2018/10/10  16:19           137,564 20181005-01.pdf
2018/10/12  17:11           189,124    20181005-01_页面_2.jpg
2013/04/23  09:25           1,940,285  00-12.pdf
2018/10/12  15:49            12,022 wwww.docx

2.10 GUI programming

2.11 Multithreading Technology

2.12 Network programming

Guess you like

Origin blog.csdn.net/weixin_45440484/article/details/130648834