Java基础补习---Day 10

文章详细介绍了Java编程中的抽象方法和抽象类的概念,包括它们的定义格式、特点及用途。同时,讲解了不同类型的代码块,如局部代码块、构造代码块和静态代码块的作用和执行顺序。此外,文章还深入探讨了String类型的特性,如构造方法和常用方法,以及正则表达式的概念和字符类、数量词的使用。
摘要由CSDN通过智能技术生成

一、抽象

(一)抽象方法

          1、抽象:抽取相似的,相同的代码部分
          2、抽象方法:只有方法的声明没有方法的实现,额外在声明上加上abstract关键字,表示一个抽象方法
          3、定义格式:
public abstract void 方法名(形参列表);

(二)抽象类

          1、可以定义抽象方法的类,普通类不能添加抽象方法
          2、格式:
abstract class 类名 {}
public class Demo01_Abstract {
    public static void main(String[] args) {
    Student stu = new Student();
    stu.test();
    }
}
abstract class Person {
    public abstract void test();
}
class Student extends Person {
    @Override
    public void test() {
    System.out.println("学生类的方法执行了");
    }
}

(三)抽象类特点

          1、抽象类和抽象方法都必须使用abstract关键字进行修饰
        (1)抽象类:abstract class 类名 {}
        (2)抽象方法:public abstract void 方法名(形参列表);
          2、抽象类和抽象方法的特点
        (1)抽象方法必须放在抽象类中
        (2)抽象类未必都是抽象方法
          3、抽象类不能创建对象,不能实例化
          4、抽象类的内容:
        (1)成员变量:可以有,子类终究是一个非抽象类,所有成员遍历用于给子类继承
        (2)构造方法:可以有;子类在创建对象的时候,子类构造需要访问父类构造,父类构造方法必须存 在,父类构造用于给自己私有的属性进行赋值
        (3)非抽象成员方法:可以有:书写一些子类共性的行为,子类就不需要创建方法,提高代码复用性
        (4)抽象方法:可以有;由于声明方法,等待子实现类实现抽象方法的逻辑
          5、抽象类的用途
        (1)虽然抽象类不能创建对象,但是抽象类可以被继承,如果子类是一个实现类,可以将具体的抽象方 法逻辑进行实现
        (2)如果子类依然是一个抽象类,就会继承抽象父类的抽象方法以及其他内容,等到再往下一级或者更 多级会遇到子实现类,这个时候再去实现抽象方法的逻辑
public class Demo01_Abstract {
    public static void main(String[] args) {
    Student stu = new Student();
    stu.test();
    //new Person();
    }
}
/**
* 抽象父类
*/
abstract class Person {
    //成员变量可以存在
    private String name;
    //成员方法可以存在
    public void show() { }
    //构造方法可以存在:用于子类调用以及给私有属性赋值
    public Person() {}
    public Person(String name) {
        this.name = name;
    }
    public abstract void test();
}
/**
* 抽象父类
*/
abstract class Teacher extends Person {
}
/**
* 子实现类
*/
class Student extends Person {
    public Student() {
    }
    public Student(String name) {
    super(name);
    }
    @Override
    public void test() {
    System.out.println("学生类的方法执行了");
    }
}

二、代码块

(一)概述

          1、使用大括号将一段代码包围起来,具有不同的名称、不同的作用
          2、分类:
        (1)局部代码块
        (2)构造代码块
        (3)静态代码块
        (4)同步代码块【线程】

(二)局部代码块

          1、格式:任意一对大括号包围起来
          2、位置:方法中
          3、作用:限定变量的生命周期
public class Demo02_BlockInMethod {
    public static void main(String[] args) {
        {
        int num1 = 20;
        }
        //不能访问
        //System.out.println(num1);
    }
}

(三)构造代码块

          1、格式:任意一对大括号包围起来
          2、位置:类成员位置(和方法平级)
          3、作用:用于执行所有的构造方法中共性的内容或者给成员变量赋值
public class Demo03_BlockInClass {
    public static void main(String[] args) {
        //默认初始化 > 显示初始化 > 构造代码块赋值 > 构造方法初始化
        //构造代码块赋值 > 构造方法赋值
        //new Test01("构造方法赋值").show();
        new Test01().show();
    }
}
class Test01 {
    String name = "显示初始化";
    {
        name = "构造代码块赋值";
    }
    public Test01() {
    }
    public Test01(String name) {
        this.name = name;
    }
    public void show() {
        System.out.println(name);
    }
}

(四)静态代码块

          1、格式:
static {

}
          2、位置:类成员位置
          3、执行特点
        (1)随着类的加载而加载
        (2)类只加载一次,所以静态代码块只执行一次
        (3)在最初执行,早于所有对象相关的内容
          4、作用
        (1)给静态成员变量赋值
        (2)用于执行哪些必须在最初执行的一些代码,例如:加载配置文件,加载驱动
public class Demo04_StaticInClass {
    public static void main(String[] args) {
        System.out.println(Test02.name);
    }
}
class Test02 {
    static String name;
    static {
        name = "陈舒婷";
    }
}

三、String

(一)概述

          1、String类型表示字符串,属于Java.lang底下,不需要导包
          2、所有的字符串常量也是String类型的对象
          3、字符串字面值常量,存储在方法区的静态区中
          4、String类型本身为一个常量,不能修改
public class Demo05_String {
    public static void main(String[] args) {
        String str1 = new String("");
        String str = "qwe";
        //计算对象的地址值
        System.out.println(str.hashCode());
        str = "asd";
        System.out.println(str.hashCode());
        str1.charAt(1);
        str.charAt(1);
    }
}

(二)构造方法

          1、 String():创建一个空字符串
          2、 String(byte[] bytes, int offset, int length):将byte数组的一部分解析为字符串
          3、 String(char[] value, int offset, int count):将char数组的一部分解析为字符串
          4、后面补充

007d620ecd404d0d9734cbc0bf08229f.png

public class Demo06_StringCon {
    public static void main(String[] args) {
        String str1 = new String();
        System.out.println(str1);
        byte[] arr1 = {23, 56, 78, 41, 67, 34, 99, 22};
        String str2 = new String(arr1, 3, 3);
        System.out.println(str2);
        char[] arr2 = {'a', '4', 'g', '8'};
        String str3 = new String(arr2, 0, arr2.length);
        System.out.println(str3);
    }
}

(三)常用方法

          1、判断功能的方法
          equals(Object obj):判断调用者字符串和参数字符串内容是否相等
          equalsIgnoreCase(String anotherString):忽略大小写判断调用者字符串和参数字符串内容是否 相等
          contains(String str):判断参数字符串是否为调用者字符串的子串;参数是否为调用者的一部分
          startsWith(String prefix):判断调用者字符串是否以参数字符串开头
          endsWith(String suffix):判断调用者字符串是否以参数字符串结尾
          isEmpty():判断调用者字符串是否为空串
public class Demo08_Judge {
    public static void main(String[] args) {
        //equals(Object obj):判断调用者字符串和参数字符串内容是否相等
        String str1 = "abc";
        String str2 = "AbC";
        boolean boo = str1.equals(str2);
        System.out.println(boo);
        if (str1.equals(str2)) {
            System.out.println("相等");
        }
        //equalsIgnoreCase(String anotherString): 忽略大小写判断调用者字符串和参数字符串内容是否相等
        System.out.println(str1.equalsIgnoreCase(str2));
        //contains(String str):判断参数字符串是否为调用者字符串的子串;参数是否为调用者的一部分
        String str3 = "abcdefg";
        System.out.println(str3.contains(str1));
        //startsWith(String prefix):判断调用者字符串是否以参数字符串开头
        String name = "张三丰";
        System.out.println(name.startsWith("张"));
        //endsWith(String suffix):判断调用者字符串是否以参数字符串结尾
        System.out.println(name.endsWith("丰"));
        //isEmpty():判断调用者字符串是否为空串
        System.out.println(name.isEmpty());
    }
}
          2、获取功能的方法
          length():返回字符串的长度
          charAt(int index):从调用者字符串上获取指定索引的char值
          substring(int beginIndex):从指定索引处开始截取字符串直到结尾
          substring(int beginIndex, int endIndex):截取字符串的一部分,从开始索引到结束索引,结束 索引不包含
          indexOf(int ch):获取指定字符第一次出现的索引
          indexOf(int ch, int fromIndex):获取指定字符第一次出现的索引,从指定位置开始查找
          indexOf(String str):获取指定字符串第一次出现的索引
          indexOf(String str, int fromIndex):获取指定字符串第一次出现的索引,从指定位置开始查找
          lastIndexOf(int ch):倒序查找,获取指定字符第一次出现的索引
          lastIndexOf(int ch, int fromIndex):倒序查找,获取指定字符第一次出现的索引,从指定位置 开始查找
          lastIndexOf(String str):倒序查找,获取指定字符串第一次出现的索引
          lastIndexOf(String str, int fromIndex):倒序查找,获取指定字符串第一次出现的索引,从指定 位置开始查找

import javax.crypto.spec.PSource;
public class Demo09_Get {
    public static void main(String[] args) {
        String str1 = "qwertyuiop";
        //length():返回字符串的长度
        int length = str1.length();
        System.out.println(length);
        //charAt(int index):从调用者字符串上获取指定索引的char值
        char c = str1.charAt(3);
        System.out.println(c);
        //substring(int beginIndex):从指定索引|处开始截取字符串直到结尾
        String substring = str1.substring(5);
        System.out.println(substring);
        //substring(int beginIndex, int endIndex):截取字符串的一部分, 从开始索弓到结束索引,结束索粥|不包含
        String sub = str1.substring(2, 5);
        System.out.println(sub);
        String str = "abcabcacbegcbacabac";
        //indexOf(int ch):获取指定字符第一-次出现的索弓|
        int c1 = str.indexOf('c');
        System.out.println(c1);
        //indexOf(int ch, int fromIndex):获取指定字符第一次出现的索引, 从指定位开始查找
        int c2 = str.indexOf('c', 3);
        System.out.println(c2);
        //indexOf(String str):获取指定字符串第一-次出现的索引
        int index = str.indexOf("cba");
        System.out.println(index);
        //indexOf(String str, int fromIndex):获取指定字符串第一次出现的索引,从指定位置开始查找
        //lastIndexOf(int ch):倒序查找,获取指定字符第-次出现的索引|
        //lastIndexOf(int ch, int fromIndex):倒序查找,获取指定字符第一次出现的索引, 从指定位置开始查找
        //lastIndexOf(String str):倒序查找,获取指定字符串第一次出现的索引
        //lastIndexOf(String str, int fromIndex):倒序查找,获取指定字符串第一次出现的索引, 从指定位开始查找
    }
}
          3、转换功能的方法
          getBytes():将调用者字符串转为byte数组
          toCharArray(): 将调用者字符串转为char数组
          toUpperCase():将调用者字符串全部变为大写
          toLowerCase():将调用者字符串全部变为小写
          concat(String str):将参数字符串拼接到调用者字符串之后
          valueOf(int i):将其他数据类型转为字符串【该方法是静态的】
import javax.crypto.spec.PSource;
import java.util.Arrays;
public class Demo10_Transition {
    public static void main(String[] args) {
        String str1 = "abCeDf";
        //getBytes():将调用者字符串转为byte数组
        byte[] arr = str1.getBytes();
        System.out.println(Arrays.toString(arr));
        //toCharArray():将调用者字符串转为char数组
        char[] chars = str1.toCharArray();
        System.out.println(Arrays.toString(chars));
        //toUpperCase():将调用者字符串全部变为大写
        String str2 = str1.toUpperCase();
        System.out.println(str2);
        //toLowerCase():将调用者字符串全部变为小写
        String str3 = str1.toLowerCase();
        System.out.println(str3);
        //concat(String str):将参数字符串拼接到调用者字符串之后
        String concat = str1.concat(str2);
        String concat1 = concat.concat(str3);
        System.out.println(concat1);
        System.out.println(str1.concat(str2).concat(str3));
        //valueOf(int i):将其他数据类型转为字符串[该访法是静态的]
        String str4 = String.valueOf(3);
        String str5 = String.valueOf(5.5);
        String str6 = String.valueOf('*');
    }
}
          4、分割功能的方法
          split(String regex):将此字符串按照给定的正则表达式,拆分为字符串数组
import java.util.Arrays;
public class Demo07_IsTrue {
    public static void main(String[] args) {
        String str = "se2ftg2hg2hjt22sdf2vb2mn2gfy2rt2sex2vbh2ui2ty2e2r";
        String[] arr = str.split("2");
        System.out.println(Arrays.toString(arr));
        String[] arr2 = str.split("");
        System.out.println(Arrays.toString(arr2));
    }
}

四、正则表达式

(一)概述

          1、概述:就是一个字符串
          2、作用:不仅仅表示一个字符串,还可以表示一类字符串
          3、好处:可以用很简洁的代码写出复杂的逻辑
          4、弊端:很难写出正确的正则

(二)字符类

          1、概述:普通的字符串也是一个正则表达式,只不过该字符串只能表示他自己本身
          2、判断一个字符串是否和某个正则表达式匹配的时候,需要使用方法: matches(String regex)
          3、字符类型:表示单个字符,使用符号[],只要使用了[],无论里面写多少个内容,都表示单个字符, 只是允许出现[]里面的任何内容一次

3b585b20fc4c4f2e827e8eaaf7eb8094.png

public class Demo11_Regex {
    public static void main(String[] args) {
        //表示中括号中的字符出现一次为true
        System.out.println("c".matches("[abc]"));
        System.out.println("&".matches("[^abc]"));
        System.out.println("Q".matches("[a-zA-Z]"));
    }
}

(三)数量词

          1、字符类只能表示一个字符,结合数量词可以表示一串字符
          2、注意:数量词只表示紧挨着他的左边的那个字符类

ef191d3449ae4dd3b5cbb20901293d81.png

public class Demo11_Regex {
    public static void main(String[] args) {
        System.out.println("r".matches("[abc]?"));
        System.out.println("aaav".matches("[abc]*"));
        //5-15 数字 0不能开头
        System.out.println("".matches("[1-9][0-9]{4,14}"));
    }
    private static void test() {
        //表示中括号中的字符出现一次为true
        System.out.println("c".matches("[abc]"));
        System.out.println("&".matches("[^abc]"));
        System.out.println("Q".matches("[a-zA-Z]"));
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值