Java基础:常用类学习笔记


Java常用类

基本数据类型的包装类

Java是面向对象的语言,但并不是“完全面向对象”的,如基本数据类型就不是对象。Java中的基本数据类型没有方法和属性,而包装类就是为了让这些拥有方法和属性,实现对象化交互。如:将数据类型存储到Object[]数组或集合中的操作等等。 为了解决不足,java在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的统称为包装类(Wrapper Class)。

基本数据类型 包装类
byte Byte
boolean Boolean
short Short
char Character
int Integer
long Long
folat Folat
double Double

数值型包装类都继承至Number,而字符型和布尔型继承至Object。

基本数据和包装类之间的转换

装箱:基本数据类型转换为包装类;拆箱:包装类转换为基本数据类型。包装类对象的初始值为null(是一个对象)。

public class WrapperDemo1 {
    public static void main(String[] args){
        //1.自动装箱
        int t1=1;
        Integer t2=t1;
        //2.手动装箱
        Integer t3=new Integer(t1);
        System.out.println("int类型t1="+t1);
        System.out.println("自动装箱,Integer类型对象t2="+t2);
        System.out.println("手动装箱,Integer类型t3="+t3);

        //1.自动拆箱
        int t4=t2;
        //2.手动拆箱
            //通过intValue()方法返回int值,还可以利用其他方法装换为其他类型
        int t5=t2.intValue();
        System.out.println("自动拆箱,int型t4="+t4);
        System.out.println("手动拆箱,int型t5="+t5);
    }
}

基本数据类型和包装类的转换

  • Integer.toString(): 将整型转换为字符串。
  • Integer.parseInt(): 将字符串转换为int类型。
  • valueOf(): 把字符串转换为包装类然后通过自动拆箱。
public class WrapperDemo2 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //基本数据类型转换为字符串
        int t1=12;
        String t2=Integer.toString(t1);
        System.out.println("int转换为String:"+t2);
        //字符串转换为基本数据类型
        //通过paerInt方法
        int t3=Integer.parseInt(t2);
        //通过valeOf,先把字符串转换为包装类然后通过自动拆箱
        int t4=Integer.valueOf(t2);
        System.out.println("t3:"+t3);
        System.out.println("t4:"+t4);
    }
}

Java为了提高拆装箱效率,在执行过程中提供了一个缓存区(对象池)【类似于常量数组】,如果传入的参数是,-128<参数<127会直接去缓存查找数据,如果有久直接产生,如果没有就隐式调用new方法产生。

包装类的比较

public boolean equals(Object anObject): 如果给定对象与字符串相等,则返回 true;否则返回 false。

public interface Comparator: 此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序。包装类实现了此接口。

public int compareTo( NumberSubClass referenceName ): 该方法用于将 Number及其子类的对象与方法的参数进行比较,两个不同类型的数据不能用此方法来比较。 参数referenceName可以是一个 Byte, Double, Integer, Float, Long 或 Short 类型的参数。

a.compareTo(b) 返回值 排序
a < b 负整数 升序
a = b 0 不变
a > b 正整数 降序
public class WrapperDemo3 {
 public static void main(String[] args) {
        //简写
        Integer i2 = 20;
        Integer i3 = 10;
        System.out.println(i2.equals(i3));
        System.out.println(i2.compareTo(i3));
        /*打印:
        false
        1 */
    }
}

java.lang.String 类

String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象。String类对象创建后不能修改,赋值后将会生成新的对像来存放新的内容,原先的对象依旧在内存中,但是s不在指向它,那么这个对象就会成为垃圾内存,在某一个特定的时刻有Java虚拟机回收。

String字符串变量的创建:

  • 声明:String 变量名;
  • 声明并初始化:String 变量名="初始值";
String str;
String str = "字符串";

String常用方法:

  • int length(): 返回值为 int 类型。得到一个字符串的字符个数(中、英、空格、转义字符皆为一个字符,计入长度)
String a="矜君99 \t\n";
int l = a.length();
System.out.println(l);
//打印:7
  • char charAt(int index) : 返回值为 char 类型。从字符串中取出指定位置的字符
String str="矜君99";
char c = str.charAt(2);  
System.out.println("指定字符为:" + c); //打印:指定字符为:9
  • char toCharArray(): 返回值为 char 数组类型。将字符串变成一个字符数组
String str="矜君99";
char c[] = str.toCharArray(); 
for (int i = 0; i < c.length; i++){
    System.out.print(c[i]);
}//打印:矜君99
  • int indexOf(String str) : 返回指定子字符串第一次出现的字符串内的索引。
  • int indexOf(String str, int fromIndex) : 返回指定子串的第一次出现的字符串中的索引,从指定的索引开始。
 public static void main(String[] args) {
        String a="等什么君唱了什么新歌";
        int i1 = a.indexOf("什");
        int i2 = a.indexOf("么",3);
        System.out.print(i1+" "+i2);
    }//打印:1 7
  • String substring(int beginIndex,int endIndex): 返回一个字符串,该字符串是此字符串的子字符串。
    public static void main(String[] args) {
        String a = "等什么君唱了什么新歌";
        String b = a.substring(1,3);
        System.out.print(b);
    }//打印:什么
  • boolean startsWith(String): 测试此字符串是否以指定的前缀开始,返回一个布尔值。
  • boolean endsWith(String): 测试此字符串是否以指定的后缀结束,返回一个布尔值。
public static void main(String[] args) {
        String a = "等什么君唱了什么新歌";
        boolean b1 = a.startsWith("等");
        boolean b2 = a.endsWith("歌");
        System.out.print(b1+" "+b2);
    }//打印:true true

java.util.Scanner 类

简单的文本扫描器,可以使用正则表达式解析原始类型和字符串,可以通过该类获取用户输入。

Scanner 类构造方法

  • Scanner(File source): 使用文件类对象构造扫描器。
  • Scanner(InputStream source) : 使用输入流对象构造扫描器。
  • Scanner(Path source): 使用指定路径文件构造扫描器。

Scanner 类常用方法

  • void close(): 关闭扫描器。
  • boolean hasNextXxx(): Xxx可以是Double,Byte,Int等,判断下一个输入项是否是Xxx。
  • boolean hasNext(): 判断是否有下一个输入项。
  • String nextLine(): 获取下一行字符串,包含回车。
  • Xxx nextXxx(): 获取下一个输入,不包含回车。
import java.util.Scanner;
public class Demo1 {
    public static void main(String args[]){
        Scanner sc=new Scanner(System.in);
        //通过标准输入流构造Scanner
        System.out.println("Please input an integer!");
        if(sc.hasNextInt())//如果如果是Int数打印该数字
            System.out.println("The number is "+sc.nextInt());
        else//如果不是打印错误信息
            System.out.println("Input error!");
    }
}

java.lang.Math 类

Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。

  • public static int abs(int a): 求绝对值 。
  • public static double ceil(double a) : 向上取整 。
  • public static double floor(double a) : 向下取整 。
  • public static int max(int a,int b) : 返回二者较大值。
  • public static double pow(double a,double b) : 返回a的b次方。
  • public static double random(): 生成0~1之间的随机小数 。
  • public static int round(float a): 四舍五入为整数 。
  • public static double sqrt(double a): 开方运算。
public class MathDemo {
    public static void main(String[] args) {
        System.out.println(Math.abs(-12.7));
        System.out.println(Math.ceil(12.7));
        System.out.println(Math.rint(12.4));
        System.out.println(Math.random());
        System.out.println("sin30 = " + Math.sin(Math.PI / 6));
        // 计算30°的正弦值,参数是用弧度表示的角,即π的六分之一
        System.out.println("cos30 = " + Math.cos(Math.PI / 6));
        // 计算30°的余弦值,这些计算三角函数的方法,其参数和返回值的类型都为double
        System.out.println("tan30 = " + Math.tan(Math.PI / 6));
        // 计算30°的正切值
    }
}/*打印:
$ javac MathDemo.java
$ java MathDemo
12.7
13.0
12.0
0.8011998172263968
sin30 = 0.49999999999999994
cos30 = 0.8660254037844387
tan30 = 0.5773502691896257 */

java.util.Random类

用于产生随机数,可以设置种子。

构造方法

  • public Random(): 以当前时间为种子。
  • public Random(long seed): 指定种子。

常用方法

  • public int nextInt(): 返回一个int数。
  • public int nextDouble(): 返回一个Double数。
  • public int nextInt(int n): 返回一个数t,0<=t
import java.util.Random;

public class RandomDemo {
    public static void main(String[] args) {
        Random random = new Random();
        //随机生成一个整数 int范围
        System.out.println(random.nextInt());
        //生成 [0,n] 范围的整数  设n=100
        System.out.println(random.nextInt(100 + 1));
        //生成 [0,n) 范围的整数  设n=100
        System.out.println(random.nextInt(100));
        //生成 [m,n] 范围的整数  设n=100 m=40
        System.out.println((random.nextInt(100 - 40 + 1) + 40));
        //随机生成一个整数 long范围
        System.out.print(random.nextLong());
        //生成[0,1.0)范围的float型小数
        System.out.println(random.nextFloat());
        //生成[0,1.0)范围的double型小数
        System.out.println(random.nextDouble());
    }
}/*打印:
677177918
28
14
88
-42585247394659156490.79453605
0.1549074727290829 */

java.lang.System类

System 类提供了以下功能:

  • 标准输入,标准输出和错误输出流;
  • 访问外部定义的属性和环境变量;
  • 加载文件和库的方法;
  • 以及用于快速复制数组的实用方法。

System 类不能被实例化,只可以使用其静态方法。

常用方法

  • public static void arraycopy(Object src,int srcPos, Object dest,int desPos,int length): 从指定的源数组中复制一个数组,从源数组指定的位置开始,到目标数组指定的位置 。
  • public static long currentTimeMillis() : 返回以毫秒为单位的当前时间(从1970年到现在的毫秒数)。
  • public static void exit(int status): 终止当前正在运行的Java虚拟机,status为 0时退出。
  • public static void gc(): 运行垃圾收集器。
  • public static Properties getProperties() : 取得当前系统的全部属性。
  • public static String getProperty(String key): 获取指定键的系统属性。
import java.util.Arrays;

public class SystemDemo {
    public static void main(String[] args) {
        int[] a = {7, 8, 9, 10, 11};
        int[] b = {1, 2, 3, 4, 5, 6};
        //从数组a的第二个元素开始,复制到b数组的第三个位置 复制的元素长度为3
        System.arraycopy(a, 1, b, 2, 3);
        //输出结果
        System.out.println(Arrays.toString(b));
        System.out.println("当前时间:" + System.currentTimeMillis());
        System.out.println("java版本信息:" + System.getProperty("java.version"));
        //运行垃圾收集器
        System.gc();
        //退出
        System.exit(0);
    }
}/* 打印:
[1, 2, 8, 9, 10, 6]
当前时间:1544670501472 */

java.util.Arrays类

Arrays 类包含用于操作数组的各种方法(例如排序和搜索)。还包含一个静态工厂,允许将数组转为 List。

常用方法

  • List asList(T... a): 返回由指定数组构造的 List 。
  • void sort(Object[] a): 对数组进行排序
  • void fill(Object[] a, Object val): 为数组的所有元素都赋上相同的值
  • boolean equals(Object[] a, Object[] a2): 检查两个数组是否相等
  • int binarySearch(Object[] a, Object key): 对排序后的数组使用二分法查找数据
import java.util.Arrays;
import java.util.Random;

public class ArraysDemo {
    public static void main(String[] args) {
        int[] arr = new int[10];
        //将数组元素都设为9
        Arrays.fill(arr, 9);
        System.out.println("fill:" + Arrays.toString(arr));
        Random random = new Random();
        for (int i = 0; i < arr.length; i++) {
            //使用100以内的随机数赋值数组
            arr[i] = random.nextInt(101);
        }
        //重新赋值后的数组
        System.out.println("重新赋值:" + Arrays.toString(arr));
        //将索引为5的元素设为50
        arr[5] = 50;
        //排序
        Arrays.sort(arr);
        //排序后的数组
        System.out.println("sort排序后:" + Arrays.toString(arr));
        //查找50的位置
        int i = Arrays.binarySearch(arr, 50);
        System.out.println("值为50的元素索引:"+i);
        //复制一份新数组
        int[] newArr = Arrays.copyOf(arr, arr.length);
        //比较
        System.out.println("equals:"+Arrays.equals(arr, newArr));
    }
}/* 打印:
fill:[9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
重新赋值:[2, 19, 48, 40, 95, 72, 69, 18, 12, 51]
sort排序后:[2, 12, 18, 19, 40, 48, 50, 51, 69, 95]
值为50的元素索引:6
equals:true  */

java.util.Date类

Date 类表示日期和时间,里面封装了操作日期和时间的方法。Date 类经常用来获取系统当前时间。

构造方法

  • Date(): 构造一个 Date 对象并对其进行初始化以反映当前时间
  • Date(long date): 构造一个 Date 对象,并根据相对于 GMT 1970 年 1 月 1 日 00:00:00 的毫秒数对其进行初始化
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateDemo {
    public static void main(String[] args) {
        String strDate, strTime;
        Date objDate = new Date();
        System.out.println("今天的日期是:" + objDate);
        long time = objDate.getTime();
        System.out.println("自1970年1月1日起以毫秒为单位的时间(GMT):" + time);
        strDate = objDate.toString();
        //提取 GMT 时间
        strTime = strDate.substring(11, (strDate.length() - 4));
        //按小时、分钟和秒提取时间
        strTime = "时间:" + strTime.substring(0, 8);
        System.out.println(strTime);
        //格式化时间
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(formatter.format(objDate));
    }
}/*
打印:
今天的日期是:Wed Dec 12 14:43:15 CST 2018
自1970年1月1日起以毫秒为单位的时间(GMT):1544596995669
时间:14:43:15
2018-12-12 14:43:15
*/

Date 类的很多方法自 JDK 1.1 开始就已经过时了。

java.util.Calendar类

在早期的 JDK 版本中,Date 类附有两大功能:

  1. 允许用年、月、日、时、分、秒来解释日期。
  2. 允许对表示日期的字符串进行格式化和句法分析。

在 JDK1.1 中提供了 Calendar 类来完成第一种功能,DateFormat类来完成第二项功能。DateFormat 是 java.text 包中的一个类。与 Date 类有所不同的是,DateFormat 类可以接受用各种语言和不同习惯表示的日期字符串。

Calendar 类是一个抽象类,它完成 Date 类与普通日期表示法之间的转换,而我们更多的是使用 Calendar 类的子类 GregorianCalendar 类。它实现了世界上普遍使用的公历系统。当然我们也可以继承 Calendar 类,然后自己定义实现日历方法。

GregorianCalendar 类的构造方法

构造方法 说明
GregorianCalendar() 创建的对象中的相关值被设置成指定时区,缺省地点的当前时间,即程序运行时所处的时区、地点的当前时间
GregorianCalendar(TimeZone zone) 创建的对象中的相关值被设置成指定时区 zone,缺省地点的当前时间
GregorianCalendar(Locale aLocale) 创建的对象中的相关值被设置成缺省时区,指定地点 aLocale 的当前时间
GregorianCalendar(TimeZone zone,Locale aLocale) year - 创建的对象中的相关值被设置成指定时区,指定地点的当前时间

(突然发现用表格写方法更加方便,前面的以后有空再改成表格)

TimeZone 是 java.util包中的一个类,其中封装了有关时区的信息。每一个时区对应一组 ID。类 TimeZone 提供了一些方法完成时区与对应 ID 两者之间的转换。

例如:

//太平洋时区的 ID 为 PST
TimeZone tz0 = TimeZone.getTimeZone("PST")
//getDefault()可以获取主机所处时区的对象
TimeZone tz1 = TimeZone.getDefault()

Locale 只是一种机制,它用来标识一个特定的地理、政治或文化区域获取一个 Locale 对象的构造方法:

//调用Locale类的构造方法
Locale l0 = new Locale(String language)
Locale l1 = new Locale(String language, String country)
Locale l2 = new Locale(String languge, String country, String variant)

//调用Locale类中定义的常量
Locale  l1 = Locale.CHINA

实例:

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

public class CalendarDemo {
    public static void main(String[] args) {
        System.out.println("完整显示日期时间:");
        // 字符串转换日期格式
        DateFormat fdate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String str = fdate.format(new Date());
        System.out.println(str);

        // 创建 Calendar 对象
        Calendar calendar = Calendar.getInstance();
        // 初始化 Calendar 对象,但并不必要,除非需要重置时间
        calendar.setTime(new Date());

        // 显示年份
        System.out.println("年: " + calendar.get(Calendar.YEAR));

        // 显示月份 (从0开始, 实际显示要加一)
        System.out.println("月: " + calendar.get(Calendar.MONTH));


        // 当前分钟数
        System.out.println("分钟: " + calendar.get(Calendar.MINUTE));

        // 今年的第 N 天
        System.out.println("今年的第 " + calendar.get(Calendar.DAY_OF_YEAR) + "天");

        // 本月第 N 天
        System.out.println("本月的第 " + calendar.get(Calendar.DAY_OF_MONTH) + "天");

        // 3小时以后
        calendar.add(Calendar.HOUR_OF_DAY, 3);
        System.out.println("三小时以后的时间: " + calendar.getTime());
        // 格式化显示
        str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar.getTime());
        System.out.println(str);

        // 重置 Calendar 显示当前时间
        calendar.setTime(new Date());
        str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar.getTime());
        System.out.println(str);

        // 创建一个 Calendar 用于比较时间
        Calendar calendarNew = Calendar.getInstance();

        // 设定为 5 小时以前,后者大,显示 -1
        calendarNew.add(Calendar.HOUR, -5);
        System.out.println("时间比较:" + calendarNew.compareTo(calendar));

        // 设定7小时以后,前者大,显示 1
        calendarNew.add(Calendar.HOUR, +7);
        System.out.println("时间比较:" + calendarNew.compareTo(calendar));

        // 退回 2 小时,时间相同,显示0
        calendarNew.add(Calendar.HOUR, -2);
        System.out.println("时间比较:" + calendarNew.compareTo(calendar));

        // calendarNew创建时间点
        System.out.println((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendarNew.getTime()));
        // calendar创建时间点
        System.out.println((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar.getTime()));
        System.out.println("时间比较:" + calendarNew.compareTo(calendar));
    }
}/*
打印:
完整显示日期时间:
2020-06-07 12:01:42
年: 2020
月: 5
分钟: 1
今年的第 159天
本月的第 7天
三小时以后的时间: Sun Jun 07 15:01:42 UTC 2020
2020-06-07 15:01:42:819
2020-06-07 12:01:42:823
时间比较:-1
时间比较:1
时间比较:0
2020-06-07 12:01:42:823
2020-06-07 12:01:42:823
时间比较:0  
*/

注意:这里会涉及到 calendarNewcalendar 的创建时间点,calendarNew 经过增加和减少时间后恢复到原来的时间点,也就是最终比较的是谁先创建好,时间点靠后的大一些,而 calendarNew 创建的时间点只有可能是大于等于 calendar 的,需要根据实际的创建时间点进行比较。

相关