Java知识点速记(三)

注:本文为本人在慕课网:Java入门第三季学习后整理的学习笔记,方便自己查阅。笔记资料均来自慕课网:Java入门第三季https://www.imooc.com/learn/110,如侵删。

一.Java中的字符串

1.字符串的创建

这里写图片描述

2.字符串的不变性

String 对象创建后则不能被修改,是不可变的,所谓的修改其实是创建了新的对象,所指向的内存空间不同。如下所示:
这里写图片描述
运行结果:这里写图片描述
其中1. 通过 String s1=”爱慕课”; 声明了一个字符串对象, s1 存放了到字符串对象的引用,在内存中的存放引用关系如下图所示:这里写图片描述
然后通过 s1=”欢迎来到:”+s1; 改变了字符串 s1 ,其实质是创建了新的字符串对象,变量 s1 指向了新创建的字符串对象,如下图所示:
这里写图片描述
2、 一旦一个字符串在内存中创建,则这个字符串将不可改变。如果需要一个可以改变的字符串,我们可以使用StringBuffer或者StringBuilder
3、 每次 new 一个字符串就是产生一个新的对象,即便两个字符串的内容相同,使用 ”==” 比较时也为 ”false” ,如果只需比较内容是否相同,应使用 ”equals()” 方法
另:“==” 和 equals() 的区别
==: 判断两个字符串在内存中首地址是否相同,即判断是否是同一个字符串对象
equals(): 比较存储在两个字符串对象中的内容是否一致

3.字符串的常用方法

这里写图片描述
注意:
1. 字符串 str 中字符的索引从0开始,范围为 0 到 str.length()-1
2. 使用 indexOf 进行字符或字符串查找时,如果匹配返回位置索引;如果没有匹配结果,返回 -1
3. 使用 substring(beginIndex , endIndex) 进行字符串截取时,包括 beginIndex 位置的字符,不包括 endIndex 位置的字符

练习使用字符串方法——功能:判断 Java 文件名是否正确,判断邮箱格式是否正确。其中:合法的文件名应该以 .java 结尾;合法的邮箱名中至少要包含 “@” , 并要求 “@” 在 “.” 之前

public class HelloWorld {
    public static void main(String[] args) {
        // Java文件名
        String fileName = "HelloWorld.java"; 
        // 邮箱
        String email = "[email protected]";
        // 判断.java文件名是否正确:合法的文件名应该以.java结尾
        /*
        参考步骤:
        1、获取文件名中最后一次出现"."号的位置
        2、根据"."号的位置,获取文件的后缀
        3、判断"."号位置及文件后缀名
        */
        //获取文件名中最后一次出现"."号的位置
        int index = fileName.lastIndexOf(".");
        // 获取文件的后缀
        String prefix=fileName.substring(index+1,fileName.length());
        // 判断必须包含"."号,且不能出现在首位,同时后缀名为"java"
        if (index!=-1&&index!=0&& prefix.equals("java")) {
            System.out.println("Java文件名正确");
        } else {
            System.out.println("Java文件名无效");
        }

        // 判断邮箱格式是否正确:合法的邮箱名中至少要包含"@", 并且"@"是在"."之前
         /*
        参考步骤:
        1、获取文件名中"@"符号的位置
        2、获取邮箱中"."号的位置
        3、判断必须包含"@"符号,且"@"必须在"."之前
        */
        // 获取邮箱中"@"符号的位置
        int index2 = email.indexOf("@");
        // 获取邮箱中"."号的位置
        int index3 = email.indexOf('.');

        // 判断必须包含"@"符号,且"@"必须在"."之前
        if (index2 != -1 && index3 > index2) {
            System.out.println("邮箱格式正确");
        } else {
            System.out.println("邮箱格式无效");
        }
    }
}

示例:
这里写图片描述
运行结果:
这里写图片描述
另:字节是计算机存储信息的基本单位,1 个字节等于 8 位, gbk 编码中 1 个汉字字符存储需要 2 个字节,1 个英文字符存储需要 1 个字节。所以我们看到上面的程序运行结果中,每个汉字对应两个字节值,如“学”对应 “-47 -89” ,而英文字母 “J” 对应 “74” 。同时,我们还发现汉字对应的字节值为负数,原因在于每个字节是 8 位,最大值不能超过 127,而汉字转换为字节后超过 127,如果超过就会溢出,以负数的形式显示。

4.StringBuilder 类

在Java中,除了可以使用 String 类来存储字符串,还可以使用 StringBuilder 类或 StringBuffer 类存储字符串。
String类具有不变性,对String对象的“修改”实质上又创建了许多新的对象,但是 StringBuilder 类存储的字符串,对其做追加和插入等操作,是在原字符串上进行的操作,系统并不会新增其他对象。
StringBuilder 和StringBuffer ,它们基本相似,不同之处,StringBuffer 是线程安全的,而 StringBuilder 则没有实现线程安全功能,所以性能略高。因此一般情况下,如果需要创建一个内容可变的字符串对象,应优先考虑使用 StringBuilder 类。
这里写图片描述
例如:在下面的示例代码中,创建了 StringBuilder 对象,用来存储字符串,并对其做了追加和插入操作。这些操作修改了 str 对象的值,而没有创建新的对象,这就是 StringBuilder 和 String 最大的区别。
这里写图片描述
运行结果:这里写图片描述

二.Java中的常用类

1.包装类

为了让基本数据类型也具备对象的特性, Java 为每个基本数据类型都提供了一个包装类,这样我们就可以像操作对象那样来操作基本数据类型。
基本类型和包装类之间的对应关系:这里写图片描述
包装类主要提供了两大类方法:
1. 将本类型和其他基本类型进行转换的方法(1.2节)
2. 将字符串和本类型及包装类互相转换的方法(1.3节)

1.1 Integer 包装类

以 Integer 包装类为例,来看下包装类的特性。

1.1.1将字符串和本类型及包装类互相转换

Integer 包装类的构造方法:
这里写图片描述
示例
这里写图片描述

1.1.2 Integer 类型和基本数据类型之间的转换

Integer包装类的常用方法:
这里写图片描述

public class HelloWorld {
    public static void main(String[] args) {

        // 定义int类型变量,值为86
        int score1 = 86; 

        // 创建Integer包装类对象,表示变量score1的值
        Integer score2=new Integer(score1);

        // 将Integer包装类转换为double类型
        double score3=score2.doubleValue();

        // 将Integer包装类转换为float类型
        float score4=score2.floatValue();

        // 将Integer包装类转换为int类型
        int score5 =score2.intValue();

        System.out.println("Integer包装类:" + score2);
        System.out.println("double类型:" + score3);
        System.out.println("float类型:" + score4);
        System.out.println("int类型:" + score5);
    }
}

运行结果:
Integer包装类:86
double类型:86.0
float类型:86.0
int类型:86

1.2基本类型和包装类之间的转换——装箱,拆箱

1.2.1装箱

装箱:把基本类型转换成包装类,使其具有对象的性质,又可分为手动装箱和自动装箱
这里写图片描述

1.2.2拆箱

拆箱:和装箱相反,把包装类对象转换成基本类型的值,又可分为手动拆箱和自动拆箱
这里写图片描述

public class HelloWorld {
    public static void main(String[] args) {

        // 定义double类型变量
        double a = 91.5;
         // 手动装箱
        Double b = new Double(a);       
        // 自动装箱
        Double c = a;      

        System.out.println("装箱后的结果为:" + b + "和" + c);

        // 定义一个Double包装类对象,值为8
        Double d = new Double(87.0);
        // 手动拆箱
        double e = d.doubleValue() ;
        // 自动拆箱
        double f = d;

         System.out.println("拆箱后的结果为:" + e + "和" + f);
    }
}

1.3基本类型和字符串之间的转换

基本类型转换为字符串有三种方法:

  1. 使用包装类的 toString() 方法

  2. 使用String类的 valueOf() 方法

  3. 用一个空字符串加上基本类型,得到的就是基本类型数据对应的字符串
    这里写图片描述
    将字符串转换成基本类型有两种方法:

  4. 调用包装类的 parseXxx 静态方法

  5. 调用包装类的 valueOf() 方法转换为基本类型的包装类,会自动拆箱
    这里写图片描述

public class HelloWorld {
    public static void main(String[] args) {

        double m = 78.5;
        //将基本类型转换为字符串
        String str1 =Double.toString(m);

        System.out.println("m 转换为String型后与整数20的求和结果为: "+(str1+20));

        String str = "180.20";
        // 将字符串转换为基本类型
        Double a =Double.parseDouble(str);

        System.out.println("str 转换为double型后与整数20的求和结果为: "+(a+20));
    }
}

2.使用 Date 和 SimpleDateFormat 类表示时间

2.1Date类

在程序开发中,经常需要处理日期和时间的相关数据,此时我们可以使用 java.util 包中的 Date 类。这个类最主要的作用就是获取当前时间,使用 Date 类的默认无参构造方法创建出的对象就代表当前时间,我们可以直接输出 Date 对象显示当前的时间,我们来看下 Date 类的使用
这里写图片描述

2.2 SimpleDateFormat 类

使用 SimpleDateFormat 来对日期时间进行格式化,如可以将日期转换为指定格式的文本,也可将文本转换为日期。
1. 使用 format() 方法将日期转换为指定格式的文本
这里写图片描述
运行结果: 2014-06-11 09:55:48
代码中的 “yyyy-MM-dd HH:mm:ss” 为预定义字符串, yyyy 表示四位年, MM 表示两位月份, dd 表示两位日期, HH 表示小时(使用24小时制), mm 表示分钟, ss 表示秒,这样就指定了转换的目标格式,最后调用 format() 方法将时间转换为指定的格式的字符串。
2. 使用 parse() 方法将文本转换为日期
这里写图片描述
运行结果: 这里写图片描述
注意:

1、 调用 SimpleDateFormat 对象的 parse() 方法时可能会出现转换异常,即 ParseException ,因此需要进行异常处理

2、 使用 Date 类时需要导入 java.util 包,使用 SimpleDateFormat 时需要导入 java.text 包

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class HelloWorld {

    public static void main(String[] args) throws ParseException {

        // 使用format()方法将日期转换为指定格式的文本
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd HH:mm");
        SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        // 创建Date对象,表示当前时间
        Date now=new Date();

        // 调用format()方法,将日期转换为字符串并输出
        System.out.println(sdf1. format(now));
        System.out.println(sdf2.format(now));
        System.out.println(sdf3.format(now));

        // 使用parse()方法将文本转换为日期
        String d = "2014-6-1 21:05:36";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

         // 调用parse()方法,将字符串转换为日期
        Date date =sdf.parse(d);

        System.out.println(date);
    }
}

运行结果:
2018年08月03日 22时55分01秒
2018/08/03 22:55
2018-08-03 22:55:01
Sun Jun 01 21:05:36 CST 2014

3Calendar 类

java.util.Calendar 类是一个抽象类,可以通过调用 getInstance() 静态方法获取一个 Calendar 对象,此对象已由当前日期时间初始化,即默认代表当前时间,如 Calendar c = Calendar.getInstance();
这里写图片描述

其中,调用 Calendar 类的 getInstance() 方法获取一个实例,然后通过调用 get() 方法获取日期时间信息,参数为需要获得的字段的值, Calendar.Year 等为 Calendar 类中定义的静态常量。
Calendar 类提供了 getTime() 方法,用来获取 Date 对象,完成 Calendar 和 Date 的转换,还可通过 getTimeInMillis() 方法,获取此 Calendar 的时间值,以毫秒为单位。如下所示:
这里写图片描述
运行结果:这里写图片描述

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class HelloWorld {

    public static void main(String[] args) {
        // 创建Calendar对象
        Calendar c = Calendar.getInstance();

        // 将Calendar对象转换为Date对象
        Date date =c.getTime(); 

        // 创建SimpleDateFormat对象,指定目标格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        // 将日期转换为指定格式的字符串
        String now = sdf.format(date);
        System.out.println("当前时间:" + now);
    }
}

运行结果:当前时间:2018-08-03 23:03:19

4.Math类

Math 类位于 java.lang 包中,包含用于执行基本数学运算的方法, Math 类的所有方法都是静态方法,所以使用该类中的方法时,可以直接使用类名.方法名,如: Math.round();
常用方法:
这里写图片描述
这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/Leo_Huang720/article/details/81348496