JavaSE常用类

  • 数组
  • String
  • Object
  • Math
  • Date
  • File
  • Properties

1 数组

用于存储同一类型数据的一个容器。好处:可以对该容器中的数据进行编号,从0开始。数组用于封装数据,就是一个具体的实体。

  • 数组可以看成是多个相同类型数据组合,对这些数据的统一管理。
  • 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。
  • 数组的元素可以是任何数据类型,包括基本类型和引用类型。
  • C和C++中的数组都可以分配在栈上面,而JAVA中的数组是只能分配在堆上面的,因为JAVA中的数组是引用类型。

数组的创建与初始化 一维数组的声明方式有2种:

  • 格式一:数组元素类型 数组名[ ]; 即type var[ ];
  • 格式二:数组元素类型[ ] 数组名; 即type[ ] var;

一维数组的初始化化:

  • 动态初始化:数组定义与为数组元素分配空间和赋值的操作分开进行。

    Date days=new Date[3];
    days[0] =new Date(1,1,2020);
    
  • 静态初始化

    int a[ ] ={ 3, 9, 8};
    Date days[ ] ={
        new Date(1, 4, 2004),
        new Date(2,4,2004),
        new Date(3,4, 2004)
    };
    

二维数组

int[][] a=new int[3][];//a : int[] 类型的 数组 ,该数组有3个元素
a[0] =new int[2]; //a 的元素 a[0] 的数据类型为 int 类型的数组,空间大小为2

2 String

数组、集合、字符串之间的转换

将数组转换成集合

a. Arrays.asList( array )
例:List list = Arrays.asList(names);//将数组转换成集合。

将数组转换成字符串、也可将整数转换成字符串

b. String.valueOf( array)
例:
char [] ch1 = {'a','c','a','b','a'};
String str2 = String.valueOf(ch1);
例:
int num = 123456; 
String str =String.valueOf(num);

将字符串转换成数组

c. toCharArray()
例:
String str = "gdfgdfgd";
char[] ch = str.toCharArray();

将字符数组变成字符串特定格式输出

d.Arrays.toString(),如[1,2,3]
例:
String str1 = Arrays.toString(ch);
System.out.println(str1);

将字符串反转

e.str.reverse();
例:
StringBuffer sb =new StringBuffer("adfsdsd");
sb.reverse();

☆replace();函数

例1://将字符串"abcdabcdabdcadcbadcb"的字符出现的次数输出
String num="abcdabcdabdcadcbadcb";
String t=num.replace("a","");//将所有的a转化为空字符--消去字符a
System.out.println(num.length()-t.length());

☆replaceAll(),用正则表达式

例2://将字符串中的数字去除
String num1="ab23c7da45bc5da65bd5c67ad7cb9adcb";
String t1=num1.replaceAll("[0-9]", "");
System.out.println(t1);

例3://计算字符串的长度,一个字符算两个
byte[] b=str.getBytes();
System.out.println(b.length);//若出现一个汉字代表3个字节的情况,将Utf-8换成GBK就可以了
String m=str.replaceAll("[\\u4e00-\\u9fa5]", "xx");
System.out.println(m.length());

String类型是否可以被继承,为什么?

不能被继承,因为是被final修饰的类

String类型是否是基本类型,比较String类型变量时,== 和equals有何区别?

不是,是引用类型

如果 String类型是直接赋值 == 和 equals 效果相同
String a = “abc “;
String b = “abc”;
a == b 和 a.equals(b)都为true
如果String是通过new构建的 == 和equals效果不同
String a = new String(“abc”);
String b = new String(“abc”);
a ==b 结果为false a.equals(b)结果为true

char类型中是否可以存放一个汉字,为什么?

可以,char类型中存放的数据以Unicode码存放。

string中的方法:

  • charAt() 方法:一般与for循环一起,遍历字符串
String str=HelloJava,HelloWorld;
for(int i=0;i<str.length();i++){
	System.out.println(charAt(i));
}
  • concat() 方法;拼接字符串,将指定字符串连接到此字符串的结尾

    str.concat(“s”); //得到Hello Java,Hello Worlds
    
  • startWith() 方法;测试此字符串是否已指定的前缀开始,

    boolean str. startWith(“Hello”); //true
    
  • format() 方法:将字符串按照某种格式输出 int i=1;int j=2;
    System.out.println(String.format("%d+%d=%d",i,j,i+j));//1+2=3 indexOf(String) 方法:输出字符串第一次出现的索引,没有的话输出-1
    System.out.println(str.indexOf(“Hello”));//0

  • lastIndexOf() 方法:输出字符串最后一次出现的索引

  • replace(old String, new String) 方法:替换字符串

  • split() 方法 :分割字符串

  • substring(int start,int end) 方法:截取字符串

  • toCharArray() 方法:变成字符数组

  • trim() 方法:去掉字符串两端的空格,字符串中间的去不掉

  • toUpperCase() 方法:将字符串转化为大写

StringBuffer和StringBuilder区别

  • StringBuffer线程安全的,同步的,效率比较低,JDK1.0之后出现
  • StringBuilder线程不安全,不同步的,效率比较高,JDK1.5之后出现

StringBuilder

- `public StringBuilder()`:构造一个空的StringBuilder容器。
- `public StringBuilder(String str)`:构造一个StringBuilder容器,并将字符串添加进去。
- `public StringBuilder append(...)`:添加任意类型数据的字符串形式,并返回当前对象自身。
- `public String toString()`:将当前StringBuilder对象转换为String对象。

3 Object

Object:引用类型的根,是所有类的超类,是java中唯一一个没有父类的类

1、toString():将对象转成字符串,默认返回的格式:

类名@哈希值 = getClass().getName() + "@" + Integer.toHexString(hashCode())

2、 boolean equals(Object obj):用于比较两个对象是否相等,其实内部比较的就是两个对象地址。

equals()和 == 的区别: ==:可以判断基本数据类型和引用数据类型

  • 对于引用数据类型,表示两个对象的引用是否相等,即栈里面引用的地址是否相等
  • 对于基本数据类型,表示两个变量的数值是否相等
  • equals:可以判断引用数据类型
  • 引用数据类型:表示两个对象的引用是否相等,但是包装类、String、Date、File除外(这些判断的是对象的值是否相等,即堆内存里面的值是否相等)

3. hashcode() 返回的是对象的内存地址对应的int类型数据,但是我们可以重写hashCode()方法,返回的就不再是内存地址。

hashcode()相同的对象,这两个对象不一定相同;如果两个对象相同,则hashcode()一定相同。因此,重写equals方法必须先重写hashcode方法

4、Class getClass():获取任意对象运行时的所属字节码文件对象。

通常equals,toString,hashCode,在应用中都会被复写,建立具体对象的特有的内容。

4 Math

Math方法

Math.ceil(2.4);//3取比值大的最小整数
Math.ceil(-2.4);//-2
Math.floor(2.5);//2取比值小的最大整数
Math.round(2.5);//3四舍五入
Math.round(-2.5);//-2
Math.random()//范围是[0,1)

获取随机数的方法

  • **Math.random()**获取[0,1)的值,取不到1; 用法:
(int)Math.random()\*n+1;//取到1到n之间的整数

Random r = new Random(); 
int n = r.nextInt(n)+1;

5 Date

date与String 格式的时间转换

//SimpleDateFormat类:改变时间的格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date=new Date();
//将日期格式转换成指定的字符串
String time = sdf.format(date);
System.out.println(time);//现在的时间以yyyy/MM/dd HH:mm:ss格式输出
 
//将格式化的字符串转换成日期对象
Date date=sdf.parse(“1995/07/1203:00:00”);
System.out.println(date);

6 File

java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。

构造方法

  • public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
  • public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。
  • public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。

常用方法

1 获取功能的方法

  • public String getAbsolutePath() :返回此File的绝对路径名字符串。
  • public String getPath() :将此File转换为路径名字符串。
  • public String getName() :返回由此File表示的文件或目录的名称。
  • public long length() :返回由此File表示的文件的长度。

** 绝对路径和相对路径**

  • 绝对路径:从盘符开始的路径,这是一个完整的路径。
  • 相对路径:相对于项目目录的路径,这是一个便捷的路径,开发中经常使用。

2 判断功能的方法

  • public boolean exists() :此File表示的文件或目录是否实际存在。
  • public boolean isDirectory() :此File表示的是否为目录。
  • public boolean isFile() :此File表示的是否为文件。

3 创建、删除功能的方法

  • public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
  • public boolean delete() :删除由此File表示的文件或目录。
  • public boolean mkdir() : 创建由此File表示的目录。
  • public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。
// 创建一级目录
Filef2=new File("newDir");    
System.out.println("是否存在:"+f2.exists());// false
System.out.println("是否创建:"+f2.mkdir());    // true
System.out.println("是否存在:"+f2.exists());// true

// 创建多级目录
Filef3=new File("newDira\\newDirb");
System.out.println(f3.mkdir());// false
Filef4=new File("newDira\\newDirb");
System.out.println(f4.mkdirs());// true

目录的遍历

  • public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
  • public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。

7 Properties

java.util.Properties 继承于Hashtable ,来表示一个持久的属性集。它使用键值结构存储数据,每个键及其对应值都是一个字符串。该类也被许多Java类使用,比如获取系统属性时,System.getProperties 方法就是返回一个Properties对象。

构造方法

  • public Properties() :创建一个空的属性列表。

基本的存储方法

  • public Object setProperty(String key, String value) : 保存一对属性。
  • public String getProperty(String key) :使用此属性列表中指定的键搜索属性值。
  • public Set< String> stringPropertyNames() :所有键的名称的集合。

与流相关的方法

  • public void load(InputStream inStream): 从字节输入流中读取键值对。 参数中使用了字节输入流,通过流对象,可以关联到某文件上,这样就能够加载文本中的数据了。文本数据格式:
filename=a.txt
length=209385038
location=D:\\a.txt

小贴士:文本中的数据,必须是键值对形式,可以使用空格、等号、冒号等符号分隔。

Date补充

Date

  • public Date():分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
  • public Date(long date):分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。

tips: 由于我们处于东八区,所以我们的基准时间为1970年1月1日8时0分0秒。

// 创建日期对象,当前的时间
System.out.println(new Date()); // Tue Jan 16 14:37:35 CST 2018
// 创建日期对象,把当前的毫秒值转成日期对象
System.out.println(new Date(0L)); // Thu Jan 01 08:00:00 CST 1970
  • public long getTime() 把日期对象转换成对应的时间毫秒值。

DateFormat

java.text.DateFormat 是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。

java.text.DateFormat:是日期/时间格式化子类的抽象类

成员方法:

  • String format(Date date) 按照指定的模式,把Date日期,格式化为符合模式的字符串
  • Date parse(String source)把符合模式的字符串,解析为Date日期
  • DateFormat类是一个抽象类,无法直接创建对象使用,可以使用DateFormat类的子类SimpleDateFormat

参数pattern是一个字符串,代表日期时间的自定义格式。

格式规则

y
M
d
H
m
s

DateFormat format = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
- public String format(Date date):将Date对象格式化为字符串。
- public Date parse(String source):将字符串解析为Date对象。

eg:

DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
String str = "2018年12月11日";
Date date = df.parse(str);
System.out.println(date); // Tue Dec 11 00:00:00 CST 2018