Java学习第九天

本文详细介绍了Java中的String类常用API,包括字符串的定义、比较、转换、拼接、截取等操作,并对比了不同拼接方法的性能。此外,还涉及到Math类的随机数生成和日期对象Date的使用。最后,讨论了Java中的抽象类和接口的概念及其应用,以及抽象类和接口在实际编程中的选择。
摘要由CSDN通过智能技术生成

Java学习第九天

String常用API

 //String 字符串的定义和初始化
        String str1 = "hqyj";//不创建对象,在常量池中保存的常量
        String str2 = new String("hqyj");//创建一个实例对象
        System.out.println(str1 == str2);//false
        System.out.println(str1.equals(str2));//true

        //字符串相关的方法
        char c = str1.charAt(1);//返回指定下标的字符
        System.out.println(c);

        byte[] bytes = str1.getBytes();//获取字符串的字节数组
        System.out.println(Arrays.toString(bytes));

        String s = str1.toUpperCase();//字符串转大写字母
        System.out.println(s);
        String s1 = str1.toLowerCase();//字符串转小写字母
        System.out.println(s1);

        long st1 = System.currentTimeMillis();
        String concat = str1.concat(str2);//拼接;两个字符串
        String str3 = str1 + str2;//拼接字符串
        System.out.println(concat);
        System.out.println(str3);
        long end1 = System.currentTimeMillis();
        System.out.println(end1 - st1);//时间戳 = 1
        /*
        字符串创建之后不能改变长度,所以做字符串的拼接会不断创建新的对象,性能不高
        如果遇到大量字符串拼接,换用StringBuffer(线程安全) 或 StringBUilder(线程不安全)
        */
        long st = System.currentTimeMillis();
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append(str1);
        stringBuffer.append(str2);
        str3 = stringBuffer.toString();
        System.out.println(str3);
        long end = System.currentTimeMillis();
        System.out.println(end - st);//时间戳 = 0

        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(str1);
        stringBuilder.append(str2);
        str3 = stringBuffer.toString();
        System.out.println(str3);

        boolean y = str1.endsWith("y");//判断一个字符串是否是某个字符串结尾
        System.out.println(y);
        boolean z = str1.startsWith("h");//判断一个字符串是否是以某个字符串开头
        System.out.println(z);

        boolean yj = str1.contains("yj");//字符串中是否包含某个字符串
        System.out.println(yj);

        str1 = "This is a String";
        int i = str1.indexOf("String");//返回指定字符串第一次出现的起始下标
        System.out.println(i);//10
        System.out.println(str1.indexOf("is"));//2
        System.out.println(str1.lastIndexOf("is"));//5,返回指定字符串最后一次出现的起始下标。
        System.out.println(str1.indexOf("is", 3));//从下标3开始找第一次出现的指定字符串的下标
        System.out.println(str1.indexOf("of"));//若未找到指定的字符串,返回-1.

        //数组的length是属性,字符串的length是方法
        System.out.println(str1.length());//字符串的长度(有多少个字符)

        System.out.println(str1.substring(1, 6));//两个参数:截取str1中1-6的字符串,包前不包后(左闭右开)
        System.out.println(str1.substring(6));//一个参数:从6的位置开始截取字符串直到结束

        str2 = "        a b c         ";
        System.out.println(str2.trim());//去掉字符串的前后空格,字符串中间的不会去除

        System.out.println(str3.replace("hq", "**"));//替换字符串(旧字符串,新字符串)

        String[] s2 = str1.split(" ");
        System.out.println(Arrays.toString(s2));//按照指定的符号将字符串拆分成一个数组。
        System.out.println(Arrays.toString((str1.split(""))));//用空字符串做split,把一个字符串的所有字符拆分为字符数组。

Math

  • random() 产生0-1的随机数(小数)

  • Math.floor() 取小数的最大整数(向下取整)

  • Math.sell() 取小数的最小整数(向上取整)

  • Math.round() 四舍五入取整

    double random = Math.random();//产生一个0-1的随机数
            int i = (int) (random * 100);
            System.out.println(i);
            System.out.println(Math.floor(random * 100));//向下取整
            System.out.println(Math.ceil(random * 100));//向上取整
    
            System.out.println(Math.round(3.14));
    

Data

  • 日期对象Date

  • 日期格式对象SimpleDataFormat

    Date data = new Date();//创建一个当前日期时间的日期对象
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm-ss");
    
            /*
            * y 年
            * M 月
            * d 日
            * H 小时
            * m 分钟
            * s 秒钟
            * 日期(-)和时间(:)的符号可以自行改变
            *注意大小写
            * */
    
            String format = sdf.format(data);
            System.out.println(format);
    
    

抽象关键字abstract

抽象的作用是如果子类都会重写(不一样)方法,定义为抽象方法,节省代码量。

抽象类里面也可以有非抽象的方法,所有子类的代码都一样的方法就在父类中定义,代码重用。

abstract可用于修饰方法和类

抽象方法或类的特性

  • abstract用于修饰方法,该方法是抽象方法,如果用于修饰类,该类就是抽象类
  • 一个类如果有抽象的方法,类也必须要定义为抽象类
  • 抽象类不能直接被实例化
  • 如果继承抽象类,必须要重写(实现(implements))父类中的抽象方法。否则子类也只能定义为抽象类。
  • 抽象类里可以有非抽象类的方法。
  • 抽象类可以有构造方法,子类实例化时会调用父类的构造方法
  • 构造方法不能用abstract修饰,因为构造方法只能重载不能重写
  • 静态方法也不能用abstract修饰

动物的抽象类,有一个抽象方法shout()

public abstract class Animal {

    public Animal() {
        System.out.println("Animal的构造方法");
    }

    public abstract void shout();

    public void eat(){
        System.out.println("吃东西");
    }
}

动物类的子类Cat,重写父类的抽象方法

public class Cat extends Animal{
    @Override
    public void shout() {
        System.out.println("小猫咪");
    }
}

抽象面试题

  • 抽象类中有构造方法吗?

    有,抽象类的构造方法在子类中可以调用

  • 执行构造方法的时候,一定会创建出实例对象?

    不一定,子类创建对象时,如果默认构造方法,父类(不管是抽象还是默认)的默认构造方法也会被调用

接口 interface

接口中的方法都是没有实现的方法,可以理解为全是抽象方法

接口的作用一般是定义规范(方法名、参数、返回类型),它的实现类必须按照接口的方法的定义去实现方法。

接口还用于框架或设计模式中,利用多态的特性,便于程序的扩展。

接口可以实现多接口,弥补了类的继承只能单继承的缺点。

定义接口的语法:

修饰符 interface 接口名{

}

接口实现的语法:

[修饰符] [abstract] (可以不写) class 类名 implement 接口名{

}

接口的实现类可以是抽象类,如果是抽象类就不要求实现每一个方法;具体类就必须实现所有方法。

Usb interface

public interface Usb {
    void init();//初始化usb接口
    void send();//发送数据
    void reject();//弹出usb设备

}

实现类

Usb 2.0

public class Usb2 implements Usb{

    @Override
    public void init() {
        System.out.println("Usb 2.0 初始化");
    }

    @Override
    public void send() {
        System.out.println("Usb 2.0 传输数据");
    }

    @Override
    public void reject() {
        System.out.println("Usb 2.0 弹出设备");
    }
}

Usb3.0

public class Usb3 implements Usb{

    @Override
    public void init() {
        System.out.println("Usb 3.0 初始化");
    }

    @Override
    public void send() {
        System.out.println("Usb 3.0 传输数据");
    }

    @Override
    public void reject() {
        System.out.println("Usb 3.0 弹出设备");
    }
}

测试类

public class UsbTest {
    public static void main(String[] args) {
        Usb usb = new Usb3();
        usb.init();
        usb.send();
        usb.reject();
    }
}

接口特点

  • 接口定义的关键字是interface,接口实现的关键字是implement
  • 接口中的所有方法都只定义,不实现
  • 接口的方法不写访问修饰符,默认是public
  • 接口的属性默认是public static final,相当于常量
  • 接口不能被实例化
  • 接口没有构造方法
public interface Usb {
    //接口的属性默认是public static final,接口中的属性就是常量
    //等效于public static final String name = "Usb01";
    String name = "Usb01";

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值