2021年7月29日

讲师:王博

复习:

类的声明

class 类名{

成员属性;//特征 变量

成员方法;//行为

}

对象的实例化

类名 对象 = new 类名();

构造方法

构造方法决定你实例化对象的形式

构造方法真正的目的是对成员属性进行赋值

封装

对属性进行封装

1.写成员变量的时候加修饰符 private

2.需要写set  get方法

3.如果想要赋值,通过set方法  想要取值,通过get方法

继承

class B extends A{}

  1. 继承是可以把属性和方法从父类中继承过来的(非私有化)
  2. 子类可以重写父类的方法

多态

父类的引用指向子类的对象

Father father = new Son();

抽象类

abstrace 类名{

抽象方法

非抽象方法

}

接口

interface 接口名{

抽象方法;

}

今日内容:

·static关键字

·异常

·String

1static关键字【重点】

static字面意思:静态

static修饰的东西和对象无关

1.1生活的静态的东西

饮水机:

1公开的资源

2和你们(对象)没有关系

3共大家使用的

为什么使用静态的东西?

每人发一个饮水机,开心。

1.2static修饰成员变量

static int age;

注意事项

1使用static修饰变量的时候,只需要记住一种调用方式

类名.属性名字;

2代码中没有创建任何类对象的时候,static修饰的成员变量已经被加载

3分析内存:只有是static修饰的成员变量,都是在.class【字节码文件】文件,编译阶段,就直接加载到了内存的数据区。该过程是早于对象创建的,整个数据区静态的成员属性是伴随着整个程序的结束而结束

4保存区域

类对象  堆区。静态的成员属性保存在数据区

1.3static修饰成员方法

声明方式:

一个正常的方法前面写static

public void eat(){}

publc static void eat(){}

这个就是静态方法

静态方法的调用方式

类名.方法名();

【注意事项】

1静态的成员方法可以摆脱对象束缚,直接通过类名可以调用

2内存分析:静态的成员方法随着.class文件的加载而加载。会被加载到方法区。这个时候方法的创建要早于对象的创建。

3静态的成员方法中,能不能使用非静态的成员属性和成员方法?

不能,因为静态的方法要早于对象的创建,非静态的属性和方法是对象创建的时候才调用的

4静态方法不能被重写

5静态方法中能不能创建对象?可以创建

package com.liujinghe.b_staticmechod;

class SingleDog{
    //成员属性
    String name;
    int age;
    static int test = 20;//静态的成员属性
    public void eat(){
        System.out.println("单身狗,吃狗粮");
    }
    //静态方法
    public static void testStaticMethod(){
        System.out.println("静态的成员方法");
    }
}
class XiaoMing extends SingleDog{
//    @Override//重写的严格限制,这个报错,证明不是重写的,是子类独有的
//    public static void testStaticMethod(){
//        System.out.println("我是子类的静态方法");
//    }
}
public class Demo {
    public static void main(String[] args) {
        SingleDog.testStaticMethod();
        SingleDog singleDog = new SingleDog();
    }
}

 

 

1.4static可以修饰代码块【静态代码块】【重点】

语法格式

static {

代码;

}

类文件只有加载,静态代码块一定加载

静态代码块也是优于对象的创建

目的:为了在实例化对象之前,做一些准备工作

执行顺序:静态代码块 》构造代码块 》构造方法

 

2异常【重要】

2.1什么是异常

生活中异常

你:医生,我难受

医生:哪里难受

你:头疼

医生:为什么头疼

你:可能是昨天敲一夜代码

医生:还有什么症状吗

你:还有嗓子不舒服

医生:回家喝点烫水就好了

错误和异常  都是有前因和后果

java代码中异常:

运行时候的异常:

ArrayIndexOutOfBoundsException:数组下标越界的异常

NullPointerException:空指针异常

ClassNotFoundException:找不到该类

SQLExceptionsql语句异常

FileNotFoundException:文件找不到异常

num1/num2

2.2Throwable【不常用】

Throwablejava中处理异常和错误的类

两个直接子类

error:错误,只能避免,无法处理,用java是没有办法解决的,所以不学

exception:异常,是能够使用java代码处理的。要学

构造方法:

Throwable();无参数构造方法,异常信息时null

Throwable(String message);创建一个Throwable对象,异常信息为message

方法:

String getMessage();获取异常信息的字符串

String toString();获取当前异常信息描述的字符串

void printTrace();展示异常和错误的前因后果

 

 

package com.liujinghe.d_throwable;

public class Demo {
    public static void main(String[] args) {
        Throwable throwable = new Throwable("一个异常");
        System.out.println(throwable.getMessage());
        System.out.println(throwable.toString());
        throwable.printStackTrace();
    }
}

2.3模拟写异常

package com.liujinghe.d_throwable;

import java.util.Arrays;

public class Demo2 {
    public static void main(String[] args) {
        test(1,0,new int[5]);
        //java.lang.ArithmeticException: / by zero
    }
    public static void test(int num1,int num2,int [] arr){
        int ret = 0;
       // ret = num1/num2;
        System.out.println(ret);
        //java.lang.ArrayIndexOutOfBoundsException: 7
        arr[7]=33;//超出索引
        System.out.println(Arrays.toString(arr));
    }
}

2.4异常的解决方案

两种方案:

1捕捉:

2抛出:

2.4.1捕捉异常【重点】

语法格式:

try-catch

try-catch-finally

1.try{

有可能出现的异常

}catch(异常对象){

针对于当前异常进行处理的方案

}

2.try{

有可能出现的异常

}catch(异常对象1){

针对于当前异常进行处理的方案

}catch(异常对象2){

真的当前

}

package com.liujinghe.e_throwable;

import java.util.Arrays;

public class Demo3 {
    public static void main(String[] args) {
        test(1,4,new int[3]);
    }
    public static void test(int num1,int num2,int  [] arr){
        int ret=0;
        try{
            //有可能出现异常的代码
            ret=num1/num2;
            arr[6]=78;//代码之前如果出现异常就不会往下执行了
        }catch(Exception e){
            System.out.println(e.getMessage());
            System.out.println(e.toString());
            e.printStackTrace();
        }
        System.out.println(ret);
        System.out.println(Arrays.toString(arr));
    }
}

3try{

 

}catch(){

 

}finally{

无论出没出现异常都要执行的代码

}

package com.liujinghe.e_throwable;

public class Demo4 {
    public static void main(String[] args) {
        test(4,0);
    }
    public static void test(int num1,int num2){
        int ret=0;
        try{
            ret=num1/num2;
        }catch (Exception e){
            System.out.println(e.getMessage());
            System.out.println(e.toString());
        }finally {
            System.out.println("这个是不管出没出异常,我都会执行");
        }
        System.out.println(ret);
    }
}

2.4.2抛出异常

throw  throws

throw:用在方法中抛出异常的对象

throws:用在方法的声明位置,告诉调用者,当前抛出的异常有哪些

package com.liujinghe.e_throwable;

public class Demo6 {
    public static void main(String[] args) throws InterruptedException {
        Thread.sleep(-3000);
    }

}

 

2.4.3自定义异常

java给咱们提供了很多的异常类对象,但是有的时候却满足不了咱们生活中的异常信息,生活中有些逻辑异常,无法使用java给咱们提供的异常类对象

例如:

你是一个优质的单身人士;

买东西没钱

上网没网钱

吃饭没有碗

喝水没有被子

睡觉没有床

自定义异常

自己建一个类,去继承Exception

package com.liujinghe.e_throwable;

class SinglePerson extends Exception{
    public SinglePerson() {

    }

    public SinglePerson(String message) {
        super(message);
    }

}
public class Demo7 {
    public static void main(String[] args) {
        try {
            buyOneFreeOne(true);
        } catch (SinglePerson singlePerson) {
            System.out.println(singlePerson.getMessage());
            System.out.println(singlePerson.toString());
        }
    }
    public static void buyOneFreeOne(boolean isSingleDog) throws SinglePerson {
        if(isSingleDog){
            throw new SinglePerson("单身狗不能进店");
        }
        System.out.println("情侣买一送一");
    }
}

 

 

 

 

3String

想学一个类,需要注意哪些点?

1打开官方手册

2搜索String

3看这个类的关系,继承谁?子类是谁?

4看这个类的构造方法

5看这个类下面重要的方法

6这些方法注意三点:方法的功能  方法的参数  方法的返回值

处理字符串的类

3.1判断两个字符串是否相等

==;判断的是内容和地址

equals方法;判断的是内容

开发中比较字符串的时候一定要用equals

package com.liujinghe.f_string;

public class Demo2 {
    public static void main(String[] args) {
        String str1 = "烤羊排";
        String str2 = "烤羊排";
        //第二种声明方式
        String str3 = new String("烤羊排");
        String str4 = new String("烤羊排");

        /**
         * == 不但比较内容,也比较地址
         * str1 == str2 栈区存放
         * str1 == str3 str1在栈区,str3在堆区
         * str3 == str4 都在栈区,内存地址不一样
         */
        System.out.println(str1 == str2);
        System.out.println(str1 == str3);
        System.out.println(str3 == str4);
        //开发中不能使用==来判断两个字符串是否相等
        //使用equals方法
        System.out.println(str1.equals(str2));
        System.out.println(str1.equals(str3));
        System.out.println(str3.equals(str4));
    }
}

 

作业

1今日代码至少三次

2每人写一遍关于static的博客

3String类下面的方法(如果不会可以百度)

length

charAt

indexOf

lastIndexOf

endswith

isEmpty

contains

equalsIgnoreCase

valueOf

toCharArray

replace

split

subString

toUpper

toLower

trim

 

posted @ 2021-07-29 17:22  张三疯321  阅读(33)  评论(0编辑  收藏  举报