当前位置:首页 » 《关注互联网》 » 正文

java web(后端+前端) 学习路线记录(代码+总结)---1.JavaSE(完成)

9 人参与  2024年03月22日 18:01  分类 : 《关注互联网》  评论

点击全文阅读


学习路线

java学习一、基础语法1.注释、标识符、关键字2.数据类型3.类型转换4.变量 常量 作用域5.运算符 二、Java流程控制1.Javadoc2.用户交互Scanner3.选择结构1.if单选择结构2.if双选择结构3.if多选择结构4.switch选择结构5.循环结构 三、Java方法详解1.方法定义2.方法调用3.方法重载4.命名行传参5.可变参数6.递归 四、数组1.定义与初始化3.数组使用4.二维数组与稀疏数组使用 五、面向对象编程(OPP)1.理解及定义2.方法定义及调用3.类与对象的关系4.创建和初始化对象5.opp三大特性-封装6.opp三大特性-继承7.三大特性-多态8.Static关键字、抽象类,接口9.内部类 六、异常机制1.异常定义2.异常结构体3.异常处理机制与自定义异常

java学习

资源:狂神说

一、基础语法


1.注释、标识符、关键字

(1) 建立空项目来建立java项目:
在这里插入图片描述
在这里插入图片描述

(2) 单行注释://注释
(3) 多行注释:/*
Djandjan
/
(4) 文档注释: /
* */
2标识符(类名,变量名,方法名)
(5) 关键字
关键字

(6) 标识符注意点:

2.数据类型


(1) 要求变量严格符合规范,所有变量先定义后使用(java, c++)
(2) 弱类型语言(js,vb)
(3) 分类 ①基本类型
②引用类型

    //小数;浮点数    float num5=50.1F;    double num6=3.415926;    //字符    char name='马';    //String不是关键字,是一个类    //String name="秦疆";    //布尔值;是非    boolean flag = true;

3.类型转换


public class Demo3 {    public static void main(String[] args) {        //整数拓展:  进制 二进制ob 十进制 八进制o 十六进制ox        int i =  10;        int i2 = 010;  //八进制        int i3 = 0x10; //十六进制        System.out.println(i);        System.out.println(i2);        System.out.println(i3);        System.out.println("=================================");        //浮点数拓展 银行业务怎么表示 BigDecimal 数学工具类        //float 有限 离散 舍入误差 大约 接近但不相等        //double        //最好避免完全使用浮点数进行比较        float f = 0.1f;    //0.1        double d = 1.0/10; //0.1        System.out.println(f==d);        System.out.println(f);        System.out.println(d);        float d1 = 32423423423f;        float d2 = d1+1;        System.out.println(d1==d2);        //字符类拓展        System.out.println("==============================");        char c1 = 'a';        char c2 = '中';        System.out.println(c1);        System.out.println((int)c1);//强制转换        System.out.println(c2);        System.out.println((int)c2);//强制换行        //所有字符本质还是数字        //编码 Unicode 表:97=a 65=A 2字节 0-65536 Excel        //U00000-UFFFFF        char c3 ='\u0061';        System.out.println(c3);//a        //转义字符        // \t 制表符        // \n 换行        //.....        System.out.println("l\tl\nd");        System.out.println("=========================");        String sa = new String("dcfs");        String sb = new String("dcfs");        System.out.println("sa==sb");        String sc = "qqqq";        String sd = "qqqq";        System.out.println(sc==sd);        //对象 从内存分析        //布尔值拓展        boolean flag = true;        if(flag==true){}        if(flag){}//建议精简代码    }}
public class Demo4 {    public static void main(String[] args) {        int i = 128;        double b = i;        byte c = (byte)i;//内存溢出 -128        //强制类型转换 (类型)变量名 高----低        //自动转换 低-----高        System.out.println(i);        System.out.println(b);        System.out.println(c);        /*        * 注意点:        *1.不能对布尔值进行转换        *2.不能吧对象转换成不相干的数据        *3.把高容量转换成低容量的要强制转换        *4.转换时会出现内存溢出问题,或者精度问题        * */        System.out.println("===============");        System.out.println((int)23.7);//23        System.out.println((int)-45.3);//-45        System.out.println("===============");        char c1 = 'a';        int  d1 = c1+1;        System.out.println((char) d1);        //操作比较大的数,注意溢出问题        //JDK新特性,数字之间可以用下划线分割        int money = 10_0000_0000;        int year = 20;        int total1 = money*year;// -147484163,计算时已经溢出了        long total2 = money*year; //默认是int,转换之前已经存在问题了        long total3 = money*((long)year);//先把一个数据转换成Long        System.out.println(total3);    }}

4.变量 常量 作用域


public class Demo5 {    //属性:变量    //常量 修饰符 不存在先后顺序    static final double PI = 3.14;    //类变量static    static double salary = 2500;    //实例变量:从属于对象;如果不初始化,这个类型的默认值0,0.0    //布尔值:默认值是false    //除了基本类型,其余默认值都是null;    String name;    int age;    //main 方法    public static void main(String[] args) {        //局部变量:必须声明和初始化,局部变量只在方法快里起作用        int i = 10;        System.out.println(i);        //变量类型 变量名字=new Demo5();        Demo5 demo5 = new Demo5();        System.out.println(demo5.age);        System.out.println(salary);        System.out.println(PI);    }    //其他方法    public void add(){    }

5.运算符


 int a = 10;        int b = 20;        int c = 25;        int d = 25;        System.out.println(a+b);        System.out.println(a*b);        System.out.println(a-b);        System.out.println(a/(double)b);//注意运算结果范围
  long a = 12312312312313L;        int b = 123;        short c = 8;        byte d = 8;        System.out.println(a+b+c+d);//Long        System.out.println(b+c+d);//Int        System.out.println(c+(double)d);//Tnt
    int a = 10;        int b = 20;        int c = 21;        System.out.println(a>b);        System.out.println(a<b);        System.out.println(a==b);        System.out.println(a!=b);        System.out.println(c%a);//取余 模运算
  int a = 10;        int b = 20;        int c = 21;        System.out.println(a>b);        System.out.println(a<b);        System.out.println(a==b);        System.out.println(a!=b);        System.out.println(c%a);//取余 模运算
   //++ --  自增 自减 一元运算符        int a = 3;        int b = a++; //"后加加",先给b赋值,再自增        // a=a+1;        System.out.println(a);        //a=a+1;        int c = ++a;//“前加加”,先自增,再给b赋值        System.out.println(a);        System.out.println(b);        System.out.println(c);        //幂运算2^3   2*2*2 = 8 使用工具类操作(Math)        double pow = Math.pow(2, 3);//Math.pow(2,3) Alt+Enter        System.out.println(pow);
  //与(and) 或(or)  非(and)        boolean a = true;        boolean b = false;        System.out.println("a&&b"+(b&&a));//逻辑与运算:两个变量为真,结果才为true        System.out.println("a||b"+(a||b));//逻辑或运算:两个变量有一个为真,结果才为true        System.out.println("!(a&&b)"+(a&&b));//真->假 假->真        //短路运算 c<4为false ,后面c++不执行        int c = 5;        boolean d = (c<4)&&(c++<4);        System.out.println(d);//false        System.out.println(c);//5
    /*        * A = 0011 1100        * B = 0000 1101        * ------------------        * A&B = 0000 1100        * A|B = 0011 1101        * A^B = 0011 0001 相同为0,不同为1        * ~B = 1111 0010        *        * 2*8 = 16 2*2*2*2        * 增加效率!!!        * <<   *2        * <<   /2        * */        System.out.println(2<<3);
    int a = 10;        int b = 20;        a+=b;//a=a+b        a-=b;//a=a-b        System.out.println(a);        //字符串连接符 + ,String  ""+()=字符串        System.out.println(""+a+b);        System.out.println(a+b+"");
  //x ? y : z        //如果x==true, 则结果为y,否则为z        int score = 50;        String type = score < 60 ? "不及格":"及格";        System.out.println(type);

二、Java流程控制


1.Javadoc

public class Doc {    String name;    /**     * @author kuangshen     * @version 1.0     * @since 1.11     */    /**     * @author Kuangshen     * @param name     * @return     * @throws Exception     */    public String test(String name) throws Exception{        return name;    }

2.用户交互Scanner


public class Demo1 {    public static void main(String[] args) {        //创建一个扫描器对象,用于接受键盘数据        Scanner scanner = new Scanner(System.in);// new Scanner(System.in)+alt+Enter        System.out.println("使用next方式接受:");        //判断用户有没有输入字符串        if(scanner.hasNext()){            //使用Next方式接受            String str = scanner.next();            System.out.println("输入的内容为"+str);        }        //凡属于Io流的类如果不关闭会一直占用资源,要养成好习惯用完就关掉        scanner.close();    }}
  public static void main(String[] args) {        //创建一个扫描器对象,用于接受键盘数据        Scanner scanner = new Scanner(System.in);        System.out.println("使用nextLine方式接受:");        if(scanner.hasNextLine()){            //使用Next方式接受            String str = scanner.nextLine();            System.out.println("输入的内容为"+str);        }        scanner.close();
public static void main(String[] args) {        //创建一个扫描器对象,用于接受键盘数据        Scanner scanner = new Scanner(System.in);        System.out.println("输入数据:");            String str = scanner.nextLine();            System.out.println("输入的内容为: "+str);        scanner.close();    }
 public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        //从键盘接受数据        int i = 0;        float f = 0.0f;        System.out.println("请输入整数:");        //如果 .... 那么        if(scanner.hasNextInt()){            i = scanner.nextInt();            System.out.println("整数数据为:"+i);        }else{            System.out.println("输入的不是整数数据!");        }        //如果 .... 那么        if(scanner.hasNextFloat()){            f = scanner.nextFloat();            System.out.println("小数数据为:"+i);        }else{            System.out.println("输入的不是小数数据!");        }    }
public static void main(String[] args) {        //我们可以输入多个数字,并求和与平均数,每输入一个数字用回车表示        Scanner scanner = new Scanner(System.in);        //和        double sum = 0;        //计算输入了多少个数字        int m = 0;        //通过循环判断是否还存在输入,并在里面对每一次进行求和和统计        while(scanner.hasNextDouble()){            double x = scanner.nextDouble();//scanner.nextDouble();输入一个数            m=m+1;//m++            sum = sum +x;            System.out.println("你输入了第"+m+"个数据,当前的结果sum+"+sum);        }        System.out.println(m+"个数的和为:"+sum);        System.out.println(m+"个数的平均值为:"+(sum/m));        scanner.close();    }

3.选择结构


1.if单选择结构
  public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        System.out.println("请输入内容:");        String s = scanner.nextLine();        //equal:判断字符是否相等        if(s.equals("hellow")){            System.out.println(s);        }        System.out.println("end");        scanner.close();
2.if双选择结构
 //双选择结构    public static void main(String[] args) {        //考试分数大于60就是及格,小于60分就是不及格        Scanner scanner = new Scanner(System.in);        System.out.println("输入成绩:");        int score = scanner.nextInt();        if(score>60){            System.out.println("及格");        }else{            System.out.println("挂了");        }        scanner.close();    }
3.if多选择结构
 public static void main(String[] args) {        //多选择结构        Scanner scanner = new Scanner(System.in);        System.out.println("请输入成绩: ");        int score = scanner.nextInt();        if(score==100){            System.out.println("满分");        }else if (score<100&& score>90){            System.out.println("A");        }else if (score<90&& score>80){            System.out.println("B");        }else if (score<80&& score>70){            System.out.println("C");        }else if (score<70&& score>60){            System.out.println("D");        }else if (score<60){            System.out.println("挂了");        }else{            System.out.println("成绩不合法");        }        scanner.close();    }
4.switch选择结构
  public static void main(String[] args) {        //case具有穿透性,需要break进行停止        //seitch匹配一个具体的值        char grade = 'A';        switch(grade){            case'A':                System.out.println("优秀");                break;//可选            case'B':                System.out.println("良好");                break;//可选            case'C':                System.out.println("及格");                break;//可选            case'D':                System.out.println("挂科");                break;//可选            default:                System.out.println("未知");        }    }
5.循环结构

1.while循环

  public static void main(String[] args) {        //输出1~100        int i = 0;//        System.out.println(i++);//        System.out.println(i++);//        System.out.println(i++);//        System.out.println(i++);//        System.out.println(i++);//        System.out.println(i++);//        System.out.println(i++);        while (i<=100){            i++;            System.out.println(i);        }    }
  public static void main(String[] args) {        //死循环        while(true){            //等待客户检查            //定时检查        }    }
 public static void main(String[] args) {        //计算1+2+3....100=?        int i = 0;        int sum = 0;        while(i<=100){            sum = sum +i;            i++;        }        System.out.println(sum);    }

2.do…while

 public static void main(String[] args) {        int i = 0;        int sum = 0;        do{            sum = sum +1;            i++;        }while(i<=100);        System.out.println(sum);    }
 public static void main(String[] args) {        //do....while至少执行一次        int a = 0;        while(a<0){            System.out.println(a);            a++;        }        System.out.println("===============");        do{            System.out.println(a);        }while (a<0);    }

3.for

 public static void main(String[] args) {        int a = 1;//初始化条件        while(a<=100){//条件判断            System.out.println(a);//循环体            a+=2;//迭代        }        System.out.println("while循环结束");        //初始化//条件判断 //迭代        for (int i = 0; i < 100; i++) {            System.out.println(i);        }        System.out.println("for循环结束!");        //死循环        for (; ;) {        }    }
 public static void main(String[] args) {        //计算1~100之间奇数和偶数的和        int oddSum = 0;        int evenSum = 0;        for (int i = 0; i < 100; i++) {            if(i%2!=0){               oddSum+= i;            }else {                evenSum+=i;            }        }        System.out.println("奇数和的"+oddSum);        System.out.println("偶数和的"+evenSum);    }
 public static void main(String[] args) {        //用while或for循环输出1-1000之间能被5整除的数,并且每行输出三个        for (int i = 0; i < 1000; i++) {           if(i%5==0){               System.out.println(i+"/t");           }           if(i%(5*3)==0){//每行               System.out.println();               //System.out.print("/n");           }        }        //pritntln  输出完全会换行        //print     输出完不会换行    }
  public static void main(String[] args) {        //打印九九乘法表        /*        * 1.我们先打印第一列        * 2.固定的1再用一个循环包起来        * 3.去掉重复项        * 4.调整样式        * */        for (int j = 1; j <= 9; j++) {            for (int i = 1; i <= j; i++) {                System.out.print(j+"*"+i+"="+j*i+"\t");            }            System.out.println();        }    }
  public static void main(String[] args) {        int[] number = {10,20,30,40,50};        //遍历数组        for (int x:number){            System.out.println(x);        }        System.out.println("==============");        for (int i = 0; i < 5; i++) {            System.out.println(number[i]);        }    }

4.break、continue

 public static void main(String[] args) {        int i = 0;        while(i<100){            i++;            System.out.println(i);            if(i==30){                break;            }        }        System.out.println("1,2,3");    }
  public static void main(String[] args) {        int i = 0;        while(i<100){            i++;            if(i%10==0){                System.out.println();                continue;            }            System.out.print(i);            System.out.print("\t");        }          }
    1.break在任何循环语句的主题部分,均可用break控制循环流程。    2.break用于强行退出循环,不执行剩余语句。(break语句也在switch语句中使用)    3.continue语句在循环语句体中,用于终止某次循环过程,即跳出循环体中尚未执行的语句,接着执行下一次是执行循环的判定。

训练:打印三角形

 public static void main(String[] args) {        for (int i = 1; i <= 5; i++) {            for(int j=5;j>=i;j--) {                System.out.print(" ");            }            for(int j=1;j<=i;j++){                System.out.print("*");            }            for(int j=1;j<i;j++){                System.out.print("*");            }            System.out.println();        }    }

三、Java方法详解


1.方法定义

(1).方法命名规则:首字母小写,后面驼峰规则
(2).形式:
修饰符 返回值类型 方法名(参数类型 参数名){
方法体;
return 返回值;
}

2.方法调用

值传递

public static void main(String[] args) {        //实际参数:实际调用传递的参数        int sum = add(1, 2);        System.out.println(sum);    }    //形式参数,用来定义作用    public static int add(int a,int b){        return a+b;    }    //方法重载    public static int add(int a,int b,int c){        return a+b+c;    }
3.方法重载

相同函数名称,形参不同

public static void main(String[] args) {        int max = max(10, 20);        System.out.println(max);    }    //比大小   方法重载“名字可以相同,参数类型(个数、类型、排列顺序)不同”    public static double max(double a,double b){        double result = 0;        if(a == b){            System.out.println("a = b");            return 0;//终止方法        }        if(a>b){            result = a;        }else {            result = b;        }        return result;    }    //比大小    public static int max(int a,int b){        int result = 0;        if(a == b){            System.out.println("a = b");            return 0;//终止方法        }        if(a>b){            result = a;        }else {            result = b;        }        return result;    }
4.命名行传参

在这里插入图片描述

5.可变参数

  public static void main(String[] args) {        //调用可变参数方法        printMax(12.11,21,121,1212,121);        printMax(new double[]{1,2,3});    }    public static void printMax(double...number){        if(number.length==0){            System.out.println("No argument passed");            return;        }        double result = number[0];        //排序!        for (int i = 1; i <number.length ; i++) {            if(number[i]>result){                result = number[i];            }        }        System.out.println("The max value is"+result);    }
6.递归

  //阶乘    public static void main(String[] args) {        System.out.println(f(3));    }    public static int f(int n){        if(n==1){            return n;        }else {            return n*f(n-1);        }    }

四、数组


1.定义与初始化


public class ArrayDemo01 {    //变量的类型 变量的名字 = 变量的值;    //数组类型    public static void main(String[] args) {        int[] nums; // 1.定义一个人数组        nums = new int[10]; // 2.创建一个数组        //赋值        for (int i = 0; i < 10; i++) {            nums[i] = i;            System.out.println("num["+i+"]="+nums[i]);        }        //求和        //nums.length 数组长度        int sum = 0;        for (int i = 0; i < nums.length; i++) {            sum = sum + nums[i];        }        System.out.println();        System.out.println("数组和为"+sum);    }}
 public static void main(String[] args) {        //静态初始化:创建+赋值        int[] a = {1,2,3,4,5,6,7,8};        System.out.println(a[0]);        //动态初始化:包含默认初始化        int[] b = new int[10];        b[0] = 10;        b[1] = 11;        System.out.println(b[0]);        System.out.println(b[1]);        System.out.println(b[2]);        System.out.println(b[3]);        System.out.println(b[4]);        System.out.println(b[5]);    }

3.数组使用


public class ArrayDemo03 {    public static void main(String[] args) {        int[] array = {1,2,3,4,5,6,7,8};        //打印全部数组元素        for (int i = 0; i <array.length ; i++) {            System.out.println(array[i]);        }        System.out.println("=============");        //计算机所有元素的和        int sum = 0;        for (int i = 0; i <array.length ; i++) {            sum += array[i];        }        System.out.println("sum="+sum);        System.out.println("==============");        //查找最大的元素        int max = array[0];        for (int i = 0; i <array.length ; i++) {          if(array[i]>max){              max = array[i];          }        }        System.out.println("max="+max);    }}
  public static void main(String[] args) {         int[] arrays = {1, 2, 3, 4, 5, 6};//         //JDK1.5  没有下标 arrays.for//         for (int array : arrays) {//             System.out.println(array);//         }         int[] revese = revese(arrays);         printArray(revese);     }    //打印数组元素    public static void printArray(int[] arrays) {        for (int i = 0; i <arrays.length ; i++) {            System.out.print(arrays[i]+"");        }    }    //反转数组    public static int[] revese(int[] arrays){        int[] result = new int[arrays.length];        for (int i = 0,j = arrays.length-1; i <arrays.length; i++,j--) {            result[j] = arrays[i];        }        return result;    }
   public static void main(String[] args) {        //[4][2] 面向对象        /*        * 1,2 array[0]        * 2,3 array[1]        * 3,4 array[2]        * 4,5 array[3]        * */        int[][] array = {{1,2},{2,3},{3,4},{4,5}};        for (int i = 0; i <array.length ; i++) {            for (int j = 0; j <array[i].length ; j++) {                System.out.println(+array[i][j]);            }        }    }
public static void main(String[] args) {        int[] a = {15,1,1,5,61,561,561,651,561};       //System.out.println(a);        //打印数组       // System.out.println(Arrays.toString(a));       printArrray(a);        System.out.println();       //数组排序 升序        Arrays.sort(a);        System.out.println(Arrays.toString(a));        System.out.println();        //填充        Arrays.fill(a,2,4,0);        System.out.println(Arrays.toString(a));    }    public static void printArrray(int[] a){        for (int i = 0; i <=a.length ; i++) {            if(i==0){                System.out.print("[");            }            if (i==a.length){                System.out.print("]");            }else{                System.out.print(a[i]+",");            }        }    }

冒泡排序

import java.util.Arrays;public class ArrayDemo07 {    public static void main(String[] args) {        int[] a = {1,222,45,564,64,4654,564,16,54,6,5,14};        int[] poposort = poposort(a);        System.out.println(Arrays.toString(poposort));    }    /*冒泡排序    *1.比较相邻元素,如果第1个数比第二个数大,交换他们的位置    *2.每一次比较,都会产生一个最大的,或者最小的数字    *3.下一次排序可以少一次排序!    *4.以此循环,直到结束    * */    public static int[] poposort(int[] array){        //临时变量        int temp=0;        //外层循环,判断走了多少次        for (int i = 0; i <array.length ; i++) {            boolean flag = false;//通过Flag标志位减少无意义的比较。            //内层循环,比较判断两个数,第一个数比第二的数大,则交换位置            for (int j = 0; j <array.length-1-i; j++) {                if(array[j+1]<array[j]){                    temp=array[j];                   array[j]=array[j+1];                   array[j+1]=temp;                   flag = true;                }            }            if (flag==false){                break;            }        }        return array;    }}

4.二维数组与稀疏数组使用


  public static void main(String[] args) {        //1.创建一个二维数组11*11  0:没有棋子   1:黑棋    2:白棋        int[][] array1 = new int[11][11];        array1[1][2] = 1;        array1[2][3] = 2;        //输出原始数据        System.out.println("输出原始数据");        for (int[] ints : array1) {            for (int anInt : ints) {                System.out.print(anInt+"\t");            }            System.out.println();        }        //转换为稀疏数组保存        //获得有效值的个数        int sum = 0;        for (int i = 0; i <11 ; i++) {            for (int j = 0; j <11 ; j++) {                if(array1[i][j]!=0){                    sum++;                }            }        }        System.out.println("有效值的个数:"+sum);        //创建一个稀疏数组        int[][] array2 = new int[sum+1][3];        array2[0][0] = 11;        array2[0][1] = 11;        array2[0][2] = sum;        //遍历二维数组,将非零值存放在稀疏数组中        int count = 0;        for (int i = 0; i <array1.length ; i++) {            for (int j = 0; j <array1[i].length; j++) {                if (array1[i][j] != 0) {                    count++;                    array2[count][0] = i;                    array2[count][1] = j;                    array2[count][2] = array1[i][j];                }            }        }        //输出稀疏数组        System.out.println("稀疏数组");        for (int i = 0; i <array2.length ; i++) {            System.out.println(array2[i][0]+"\t"+array2[i][1]+"\t"+array2[i][2]+"\t");        }        System.out.println("===============");        System.out.println("还原");        //1.读取稀疏数组        int[][] array3 = new int[array2[0][0]][array2[0][1]];        //2.给其中元素还原他的值        for (int i = 1; i <array2.length ; i++) {            array3[array2[i][0]][array2[i][1]] = array2[i][2];        }        //3.打印        for (int[] ints : array3) {            for (int anInt : ints) {                System.out.print(anInt+"\t");            }            System.out.println();        }    }

二维数组底层逻辑图:


二维数组底层逻辑


五、面向对象编程(OPP)


1.理解及定义


在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.方法定义及调用


/
* 修饰符 返回值类型 方法名(){
* //方法体
* return 返回值;
* }
* /


import java.io.IOException;//Demo类public class Demo01 {    //main方法    public static void main(String[] args) {    }    /*    * 修饰符 返回值类型 方法名(){    *   //方法体    *   return 返回值;    *  }    * */    //return 结束方法,返回一个结果    public String sayhellow(){        return"Hellow";    }    public void print(){        return;    }    public int max(int a,int b){        return a > b?a:b;//三元运算符    }    //数组下标越界:Arrayindexoutofbounds    public void readFile(String file)throws IOException {    }}

调用方法

  public static void main(String[] args) {        //调用静态方法直接用 类.方法();        Student.say();        //调用非静态方法        // 1.实例化 对象类型 对象名 = 对象值;        // 2.对象.方法        Student student = new Student();        student.play();        //或者 new Student().play()    }    //和类一起加载的    public  void a( ){        b();    }    //实例化之后才存在    public void b( ){        a();    }    //带static不可以调用不带的}

实际参数要对应形式参数的类型

public class Demo03 {    public static void main(String[] args) {        //实际参数要对应形式参数的类型        int add = Demo03.add(3, 2);//实际参数        System.out.println(add);    }    public static int add(int a,int b){//形式参数        return a+b;    }}

值传递

public class Demo04 {    //值传递    public static void main(String[] args) {        int a = 1;        System.out.println(a);//a:1        Demo04.chage(a);        System.out.println(a);//a:1    }    //返回值为空    public static void chage(int a){        a = 10;    }}

3.类与对象的关系


引用传递

//对象、内存public class Demo05 {    public static void main(String[] args) {        Person person = new Person();        System.out.println(person.name);//null        Demo05.change(person);        System.out.println(person.name);//qinyan    }    public static void change(Person person){        //person是一个对象:指向的--->Person person = new Person();这是一个具体的人,可以改变属性!        person.name= "qinyan";    }}//定义一个Person,有一个属性:nameclass Person{    String name;//NULL}
package com.oop.demo01;public class Student {    //静态方法    public static void say(){        System.out.println("学生说话了");    }    //非静态方法    public  void play(){        System.out.println("学生wan了");    }}

4.创建和初始化对象


构造器
在这里插入图片描述


* 构造器:* 1.与类名相同* 2.没有返回值*作用:* 1.new 的本质在调用构造方法* 2.初始化对象的值** 注意:一旦定义了有参构造,若想用无参构造,无参构造必须显示!!!,否则无意义*this.当前类 = 定义参数
//java---->classpublic class Person {    //Person类中存在一个空的Person方法    //一个类即使什么也不写,也会存在一个方法    //显示构造器    String name;    int age;    //实例化初始值    //1.使用new关键字必须有构造器    //2.用来初始化值    public Person(){//无参构造        this.name = "QINyan";    }    //有参构造:一旦定义了有参构造,无参构造必须显示,否则无意义    public Person(String name){//无参构造        this.name = "QINyan";    }    //alt+insert 生成构造器!!!!    public Person(String name, int age) {        this.name = name;        this.age = age;    }}/**   public static void main(String[] args) {        //Person类中存在一个默认的空的Person方法        Person person = new Person();        System.out.println(person.name);    }  
//学生类public class Student {    //属性:字段    String name;//默认null    int age;    //方法    public void study(){        System.out.println(this.name+"学习");    }    测试:      public static void main(String[] args) {        //类:抽象的,实例化        //类实例化后会返回一个自己的对象!        //student对象就是一个Student类的具体实例!        //不同的对象有相同的属性,可以给对象的属性赋不同的值        Student student = new Student();        Student student1 = new Student();        student.name =  "james";        student.age = 2;        System.out.println(student.name);        System.out.println(student.age);        student1.name = "curruy";        student1.age = 1;        System.out.println(student1.name);        System.out.println(student1.age);    }    }

构造器底层原理
在这里插入图片描述

public class Pet {    public String name;    public int age;    //无参构造    public void shout(){        System.out.println("哇哇哇哇");    }}/**     Pet dog = new Pet();        dog.name = "qqq";        dog.age = 1;        dog.shout();        System.out.println(dog.age);        System.out.println(dog.name);        Pet cat = new Pet();* */

5.opp三大特性-封装


1.提高程序的安全性,保护数据2.隐藏代码的实现细节3.统一接口4.系统可维护增加了
//类 private:私有public class Student {    private String name;    private int id;    private int age;    private char sex;    //提供一些可以操作这个属性的方法!    //提供一些publicd的get,set方法    //alt +insert  Fn    //get 获得这个数据    public String getName() {        return name;    }    //set 给这个数据设值    public void setName(String name) {        this.name = name;    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public char getSex() {        return sex;    }    public void setSex(char sex) {        this.sex = sex;    }    public int getAge() {        return age;    }    public void setAge(int age) {        if(age>120||age<0){//不合法            this.age = 3;        }else {            this.age = age;        }        this.age = age;    }}测试:     Student s1 = new Student();        System.out.println("\t\t学生信息情况表");        s1.setName("秦严");        System.out.println(s1.getName());        s1.setAge(18);        System.out.println(s1.getAge());        s1.setSex('w');        System.out.println(s1.getSex());        s1.setId(2020304621);        System.out.println(s1.getId()); 

6.opp三大特性-继承


1.person、student、teacher

//person 人  基类:父类//java中所有的类默认直接或者间接继承Objectpublic class Person {//extend Object        protected String name = "Kg";    public Person() {        System.out.println("无参构造Person");    }    //只能用public,不能用private,私有的不能被继承        public void print(){            System.out.println("person");        }}/** //继承用public 或者不加修饰符     int money = 1000_000;    public void say(){        System.out.println("哈哈哈哈哈哈哈哈哈");    }    //如果用private 可以构建一个get,set方法由子类来调用    private int money1 = 1444;    public int getMoney1() {        return money1;    }    public void setMoney1(int money1) {        this.money1 = money1;    }* */
//学生 is person 派生类:子类//子类继承父类,就会拥有父类的全部方法public class Student extends Person {    //ctrl + H 展开继承树    private String name = "Qy";    public Student() {        //隐藏代码,调用了父类的无参构造        super();//调用父类的构造器必须在子类构造器的第一行        System.out.println("无参构造Student");    }    public void print(){        System.out.println("student");    }    public void test1(){       print();       this.print();       super.print();    }    public void test(String name){        System.out.println(name);//方法参数中的        System.out.println(this.name);//子类中的        System.out.println(super.name);//父类 Person中的    }}/*1.*  Student student = new Student();        student.say();  2.*   Student student = new Student();        System.out.println("===============1");        student.test("秦严");        System.out.println("===============2");        student.test1();* */
//老师 is person  派生类:子类public class Teacher extends Person {}

2.A-B

public class A extends B{    //重写  @Override    @Override //注解:由功能的注释    public void test() {        super.test();        System.out.println("A=>test");    }}/*import com.oop.demo05.A;import com.oop.demo05.B;import com.oop.demo05.Student;//静态方法:方法的调用只和左边,调用的数据有关//非静态方法:重写* public static void main(String[] args) {        A a = new A();        a.test();//A        //父类的引用指向子类         B b = new A();//子类继承父类,并重写了父类的方法        b.test();//B    }* */
public class B {    //重写都是方法的重写与属性无关    public  void test(){        System.out.println("B=>test");    }}

注意:

 1. java中所有的类默认直接或者间接继承Object
 2.JAVA中类只有单继承,没有多继承! 一个儿子只能有一个爸爸,但是一个爸爸可以有多个儿子!
 3.Super-this(P,T,S):

super注意点:

super调用父类的构造方法,必须在构造方法的第一个super必须只能出现在子类的方法或者构造方法中!super和 this不能同时调用构造方法!

this注意点:
superVSthis:

1.代表的对象不同:
*** this: 本身调用者这个对象
*** super: 代表父类对象的应用

2.前提
*** this:没有继承也可以使用
*** super:只能在继承条件才可以使用

3.构造方法
*** this();本类的构造
*** super():父类的构造


方法重写(A,B)
子类继承父类,并重写了父类的方法

重写:需要有继承关系,子类重写父类
*** 1.方法名必须相同
*** 2.参数列表必须相同
*** 3.修饰符:范围可以扩大但不能缩小:public>protected>Default>private
*** 4.抛出的异常:范围可以缩小但不能扩大:classNotFoundException–>Exception(大)
重写,子类的方法和父类必须一致:方法体不同

为什么要重写:
***1. 父类的功能,子类不一定需要,或者不一定能满足!
***2.ALT+Insert(Fn):override

7.三大特性-多态


1.定义
在这里插入图片描述


2.instanceof(类型转换)引用类型
多态注意事项

1.多态是方法的多态,属性没有多态2.子类父类,有联系,类型转换异常! ClassCastException!3.存在条件:继承关系,方法需要重写,父类引用指向子类对象!Father f1 = new Son4.以下不能重写:
          1.static 方法 属于类 它不属于实例
          2.final 常量
          3.private 方法:
public class Person {    public void run(){        System.out.println("run");    }}/** 1. public void run(){        System.out.println("run!!!!!");    }** */
public class Student extends Person {    public void go(){        System.out.println("go");    }    }/*多态注意事项* 1.多态是方法的多态,属性没有多态* 2.子类父类,有联系,类型转换异常! ClassCastException!* 3.存在条件:继承关系,方法需要重写,父类引用指向子类对象!Father f1 = new Son* 4.以下不能重写:*               1.static 方法 属于类 它不属于实例*               2.final 常量*               3.private 方法:**1.  @Override    public void run() {        System.out.println("son");    }    public void eat(){        System.out.println("吃");    }    *    *    *    public static void main(String[] args) {        //一个对象的实际类型是确定的        //new Student();        //new Person();        //可以指向引用类型就不确定了:父类的引用指向子类        // Student 能调用的方法都是自己的或者调用父类的        Student s1 = new Student();        // Person 父类型 指向子类,不可以调用子类独有的方法        Person s2 = new Student();        Object s3 = new Student();        s2.run();        s1.run();//子类重写了父类的方法,执行子类的方法        //s2.eat();不能执行 对象能执行那些方法主要看左边类型,和右边关系不大        ((Student)s2).eat();//可以强转后执行    }    *    *2.    *   public static void main(String[] args) {        //Object>String        //Object>Person>Teacher        //Object>Person>Student        //System.out.println(X instanceof Y);//是否能编译通过取决于具有父子关系        //System.out.println(X instanceof Y);//true或者false取决于引用对象X指向的类型是不是Y的子类型        Object object = new Student();        System.out.println(object instanceof Student);//true        System.out.println(object instanceof Person);//true        System.out.println(object instanceof Object);//true        System.out.println(object instanceof Teacher);//flase        System.out.println(object instanceof String);//flase        System.out.println("=======================");        Person person = new Student();        System.out.println( person instanceof Student);//true        System.out.println( person instanceof Person);//true        System.out.println( person instanceof Teacher);//false        System.out.println( person instanceof Object);//true        //System.out.println( person instanceof String);//编译报错        System.out.println("=======================");        Student student = new Student();        System.out.println( student instanceof Student);//true        System.out.println( student instanceof Person);//true        System.out.println( student instanceof Object);//true       // System.out.println( student instanceof Teacher);//编译报错        //System.out.println( person instanceof String);//编译报错* */
public class Teacher extends Person {}/**   public static void main(String[] args) {        //类型之间的转换 父 子(高转低 强制转换   低转高 自动转换)        //父类引用指向子类对象        //student将这个对象类型强制转换成Student类型,就可以使用Student类型的方法了        Person person  = new Student();        ((Student)person).go();        //子类转换为父类可能丢失一些自己本来的方法        Student student = new Student();        Person person1 = student;    }** */

8.Static关键字、抽象类,接口


1.Static关键字

public class Person {    {        System.out.println("匿名代码块");    }    static {        System.out.println("静态代码块");    }    public Person() {        System.out.println("构造方法");    }    public static void main(String[] args) {        Person person = new Person();        System.out.println("=============");        Person person1 = new Person();        //静态代码块只执行一次    }}
public class Student {    //静态属性    private static int age;//静态变量 多线程    private int score;//非静态变量    //静态方法    public void run(){    }    public static void go(){    }    public static void main(String[] args) {        Student s1 = new Student();        System.out.println(Student.age);        //System.out.println(Student.score);类只能调用静态变量        System.out.println(s1.score);        System.out.println(s1.age);        Student.go();        go();        //Student.run(); 不可以编译        s1.run();    }}
//静态导入包import static java.lang.Math.random;import static java.lang.Math.PI;public class Test {    public static void main(String[] args) {        System.out.println(random());        System.out.println(PI);        //类被final定义,无法继承    }}

2.抽象类

抽象类的所有方法 继承他的子类 都必须实现的方法 除非也是抽象类public abstract class A extends
 Actionpublic class A extends Action {    @Override    public void something() {    }}
// abstract 抽象类: extends 单继承  (接口可以多继承)插排public abstract class  Action {    //约束 不实现    //abstract 抽象方法 只有方法名字,没有方法实现    public abstract void something();    //1.不能new这个抽象类,只能靠子类实现它:约束    //2.抽象类可以写普通方法,普通方法不能有抽象类}

3.接口
声明:interface
在这里插入图片描述
作用:
1.约束
2.定义一些方法,让不同的人实现
3.public static final
4.public abstract
5.接口不能实例化,接口不能构造方法
6.inplements可以实现多个接口
7.必须重写接口中的方法

public interface TimeService {    void time();}
// interface 是关键字,接口都需要有实现类public interface UserService {    //常量 public abstract final    int age = 99;    //接口中的所有定义都是抽象的 public abstract    public abstract void add(String name);    void delete(String name);    void update(String name);    void query(String name);}
//抽象类extends//类 实现接口 implements 接口//实现接口中的类 就要重写接口中的方法//接口可以实现多继承public class UserServiceImp implements UserService,TimeService {    @Override    public void add(String name) {    }    @Override    public void delete(String name) {    }    @Override    public void update(String name) {    }    @Override    public void query(String name) {    }    @Override    public void time() {    }}

9.内部类


public class Outer {    private int id = 11;    public void out(){        System.out.println("外部类");    }    public class inner{        public void out(){            System.out.println("内部类");        }        //获得外部类的私有属性        public void GetId(){            System.out.println(id);        }    }}//一个java中只有一个public类,可以有多个class类class a{    public static void main(String[] args) {    }}/**  public static void main(String[] args) {        Outer outer = new Outer();        //通过外部类实例化内部类        Outer.inner inner = outer.new inner();        inner.GetId();    }* */
public class Outer {    private int id = 11;    public void out(){        System.out.println("外部类");    }    public class inner{        public void out(){            System.out.println("内部类");        }        //获得外部类的私有属性        public void GetId(){            System.out.println(id);        }    }}//一个java中只有一个public类,可以有多个class类class a{    public static void main(String[] args) {    }}/**  public static void main(String[] args) {        Outer outer = new Outer();        //通过外部类实例化内部类        Outer.inner inner = outer.new inner();        inner.GetId();    }* */

六、异常机制

1.异常定义


在这里插入图片描述


2.异常结构体


在这里插入图片描述


1.Error与Exception
在这里插入图片描述
在这里插入图片描述
Ctrl Alt T:自动生成抛出异常

3.异常处理机制与自定义异常


在这里插入图片描述


在这里插入图片描述


public class Test {    public static void main(String[] args) {        int a = 0;        int b = 1;        try {//try监控区域            if(a==0){//throw throws                throw new ArithmeticException();//主动抛出异常            }            System.out.println(b/a);        } catch (ArithmeticException e) {//catch 异常捕获            e.printStackTrace();            System.out.println("程序出现异常,被除数不为0");        }finally {//处理善后工作            System.out.println("final");        }        //可以不要finall,在 假设 IO 资源 关闭        //捕获多个异常 从小到大        try {            new Test().a1();        } catch (RuntimeException e) {            System.out.println("出现异常1");        }        catch (Exception e) {            System.out.println("出现异常2");        }        catch (Throwable e) {            System.out.println("出现异常3");        }    }    public void a1(){        b1();    }    public void b1(){        a1();    }}
public class Test1 {    public static void main(String[] args) {        new Test1().tset(10,0);    }    public void tset(int a,int b){        if(b==0){            throw new ArithmeticException();//主动抛出异常,一般用在方法中        }        System.out.println(a/b);    }}

实际应用中的经验总结:


在这里插入图片描述



点击全文阅读


本文链接:http://zhangshiyu.com/post/83839.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1