2021-06-16 自动封箱装箱,解决double类型数值不精确问题正则表达式,流与File类

类与类的关系
    继承关系,而且只支持单继承 ,A extends B ,B是父类,子类可以使用父类所有非私有资源,子类对父类不满意,可以进行重写
接口与接口关系
    继承关系,可以多继承 Inter1 extends Inter2,Inter3  Inter2与Inter3是父接口 Inter1是子接口
    接口的继承关系类似于功能的汇总,接口一同时23的全部功能
类与接口之间的关系
    实现关系  一个类可以实现多个接口
    class A implements Inter1
    class A implements Inter1,Inter2
****************************************************************************************************
在不明确给出超类的情况下,Java会自动把Object类作为定义类的超类
Object---顶级父类---java中所有类都把Object作为超类
toString()方法默认打印的是地址值  重写后打印的是对象的属性与属性值
hashCode()对象的哈希码值-----一串数字,用来区分不同的对象
equals()方法--默认的是==比较,比较的是两个对象的地址值
        --重写后:比较的是两个对象的类型+所有属性值
****************************************************************************************************
String字符串 使用""来包裹
    String底层维护了一个char[]
    创建的两种方法
    方式一:char []value={'a','b','c'};String a=new String(value);
    方式二:String s="abc";有高效的效果,存在堆中常量池
    String重写了equals()方法,比较的是    两个字符串里面具体的值,而不是地址值
*******************************************************************************************************
正则表达式
作用;我们来定义一些规则,并校验指定的数据是否符合这样的规则
1.定义一个正则表达式:String regex="我们定义要匹配的规则"
2.判断是否符合这个表达式 matches()
=======================================================================================================
包装类
1.对基本类型进行封装,提供一些功能
2.基本数据类型与包装类想对应
Integer
  创建方式一:new Integer(5); 没有高效的效果
  创建方式二:Inteeger.valueOf(5);有高效的效果,限制范围[-128~127]
       TIPS:只有方式二的指定范围才有高效的效果
5.把字符串类型转成相应的包装类
i1.parseLnt("600"+10.5)------>610.5 i1是Integer类型的对象
d1.pareseDouble("2.2")+1---->3.2  d1是Double类型变量
*********************************************************************************************************
自动装箱:基本数据类型 ------>包装类
自动拆箱:包装类------->基本数据类型
**********************************************************************************************************
BigDecimal---浮点数运算不精确解决方案
1.创建工具类对象(double参数)--WarnIng 还是会出现不精确问题
new BigDecimal(String参数)---注意需要把double转String直接拼个""
2.通过工具类对象进行四则运算add加 /subtract减、mutiply乘、divide除
TIPS 注意除法除不尽的现象,会报错,注意设置保留位数和舍入方式
**************************************************************************************************************
流Steam
1.流是单方向的
2.输入流只能输入,输出流只能输出
3.流从头到尾只能顺序读一次
TIPS:方向一定要对,注意可以从程序的角度考虑
*===================================**************==================*****************==========****======**=====*
流的分类
1.根据操作单位不同:字节流(二进制,所有文件)字符流(字符,文本文档)
2.根据流向方向不同:输入流输出流
3.组合结构:字节输入流 字节输出流 字符输入流 字符输出流
=**********************************************************************************
在java中,根据处理的数据单位不同,可以把流分为字节流和字符流
字节流 : 针对二进制文件
字符流 : 针对文本文件,读写容易出现乱码的现象,在读写时,最好指定编码集为UTF-8
封装一个磁盘路径字符串,对这个路径可以执行一次操作
可以封装文件路径、文件夹路径、不存在的路径


Test

1.自动装箱与拆箱

package cn.tedu.api;

import org.junit.Test;

/*本类用于测试自动装箱与拆箱*/
public class TestBox {
    @Test
    public void test(){
        Integer i1=new Integer(127);
        Integer i2 = Integer.valueOf(127);
        /*自动装箱
        * 编译器会自动把int类型的127转换成Integer类型的127
        * 交给引用数据类型i3保存
        * Integer.valueOf(127);  注意方向:int----->Integer*/
        Integer i3=127;
        /*自动拆箱
        * 编译器会自动把Integer类型的i1中保存的127交给int类型的i4来保存
        * Integer--------->int*/
        int i4=i1;

    }
}

Integer Double类型创建的两种方式

package cn.tedu.api;

import org.junit.Test;

public class TestNumber {
    static Integer i0;

    @Test
    public void test() {
        System.out.println(i0);
        Integer integer = new Integer(5);
        Integer integer1 = new Integer(5);
        System.out.println(integer == integer1);//false
        /*Integer类型的数据使用value of方式创建,有高效的效果,注意范围(-128-127)
         * 在此范围内数据只会存一次,后续存值存的都是使用之前存储过的数据*/

        Integer integer2 = Integer.valueOf(127);
        Integer integer3 = Integer.valueOf(127);
        System.out.println(integer2 == integer3);//true
        Double aDouble = new Double(3.14);
        Double aDouble1 = new Double(3.14);
        Double aDouble2 = Double.valueOf(3.14);
        Double aDouble3 = Double.valueOf(3.14);
        /*Double没有高效的效果,只有Integer才有*/
        System.out.println(aDouble == aDouble1);
        System.out.println(aDouble2 == aDouble3);
        System.out.println(aDouble == aDouble3);
        System.out.println(aDouble == aDouble2);

    }

}

String StringBuffer StringBuilder

package cn.tedu.api;

import org.junit.Test;

/*本类用于字符串拼接 StringBuffer线程安全*/
public class TestString {
    @Test
    public void test(){
        String s="abcdefghijklmnopqrstuvwxyz";

   /* method(s);*/
        /*StringBuffer*/
    method1(s);

    }
    private void method1(String s) {

        /*优化一 使用StringBuilder StringBuffer*/
        StringBuilder builder=new StringBuilder();
        StringBuffer buffer = new StringBuffer();
        long l = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++) {
            /*优化2 不再使用+拼接,而是使用append()拼接*/
            buffer.append(s);
            builder.append(s);
        }
        long l1 = System.currentTimeMillis();
        System.out.println("花费时间为"+(l1-l)+"ms");
    }

    private void method(String s) {
        String result="";
        long l = System.currentTimeMillis();
        for (int i = 0; i <10000 ; i++) {
            result+=s;
        }
        long l1 = System.currentTimeMillis();
        System.out.println("花费时间为"+(l1-l)+"ms");
        //  System.out.println(result);
    }

}

正则表达式练习

package cn.tedu.api;

import org.junit.Test;

import java.util.Scanner;

/*本类用于正则表达式练习*/
public class TestRegex {
    public static void main(String[] args) {
        new TestRegex().test();
    }
    public void test() {
        System.out.println("请输入身份证号");
        String id = new Scanner(System.in).nextLine();
       /* String regex = "[0-9]{17}[0-9x]";*/
        /*单个斜杠在程序中被认为是转义字符,如果真的需要一个斜杠,需要在斜杠前面再加一个用来转义的斜杠*/
        String regex="\\d{17}[0-9x]";
        if (id.matches(regex)) {
            System.out.println("么毛病老铁");
        } else {
            System.out.println("犊子");
        }
    }
}

Big  类解决double类型精确度不够问题

package cn.tedu.bigdecimal;

import java.math.BigDecimal;
import java.util.Scanner;

/*本类用于解决浮点数运算不精确的问题*/
public class TestBigDecimal {
    public static void main(String[] args) {
        //  f1();
        f2();
    }


    private static void f1() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入第一个小数");
        double v = scanner.nextDouble();
        System.out.println("请输入第二个小数");
        double v1 = scanner.nextDouble();
        System.out.println(v + "+" + v1 + "=" + (v + v1));
        System.out.println(v + "-" + v1 + "=" + (v - v1));
        System.out.println(v + "*" + v1 + "=" + (v * v1));
        System.out.println(v + "/" + v1 + "=" + (v / v1));
    }

    private static void f2() {
        /*WarIng 不要使用Double类型的构造方法
        * 因为还是不精确的,要使用String类型的构造方法
        * double转为String直接拼个空串就行*/
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入第一个小数");
        double v = scanner.nextDouble();
        System.out.println("请输入第二个小数");
        double v1 = scanner.nextDouble();
        BigDecimal bigDecimal = new BigDecimal(v+"");
        BigDecimal bigDecimal1 = new BigDecimal(v1+"");
        BigDecimal bd;
        //加
        bd = bigDecimal.add(bigDecimal1);
        System.out.println(bd);
        //减
        System.out.println(bigDecimal.subtract(bigDecimal1));
        //乘
        System.out.println(bigDecimal.multiply(bigDecimal1) );
        //除
        /*有与除法会出现除不尽的现象,数据仍没有办法精确展示
        * 所以我们需要提前设置保留位数与取舍规则*/
        System.out.println(bigDecimal.divide(bigDecimal1,3,BigDecimal.ROUND_HALF_DOWN));
    }
}

测试File类常用方法

package cn.tedu.file;
/*本类用于测试File类*/

import org.junit.Test;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;

public class TestFile {
    @Test
    public void test() throws IOException {
        File file = new File("G:\\IO\\1.txt");
        System.out.println(file.length());
        System.out.println(file.exists());//判断指定文件是否存在
        System.out.println(file.isFile());//判断是否是文件
        System.out.println(file.isDirectory());//判断是否是文件夹
        System.out.println(file.getName());//获取文件名字
        System.out.println(file.getParent());//获取当前file目录
        System.out.println(file.getAbsoluteFile());//获取当前file的绝对路径
        /*测试文件的创建与删除*/
        file = new File("G:\\IO\\2.txt");
        //创建文件夹 文件不存在的话立即创建并返回true
        //如果文件已经存在返回false 前提是路径要对
        System.out.println(file.createNewFile());
        System.out.println(file.createNewFile());
        file = new File("G:\\IO\\m\\d\\s\\a");//创建多层文件夹
        // System.out.println(file.mkdir());
        System.out.println(file.mkdirs());
        System.out.println(file.delete());//只能删除空文件夹
        System.out.println(file.delete());//只能删除空文件夹
        file = new File("G:\\IO\\2.txt");//删除文件
        System.out.println(file.delete());
        //文件列表测试
        file = new File("E\\IO");
        String[] list = file.list();
        System.out.println(Arrays.toString(list));
        File[] files = file.listFiles();
        System.out.println(Arrays.toString(files));
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ᥬ᭄?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值