Java之常用类

文章详细阐述了Java中的Object类,包括其关键方法如`getClass()`、`toString()`、`hashCode()`和`equals()`,并探讨了字符串(String)类的特性,如不可变性、构造方法和转换功能。此外,还提到了集合框架、多线程、IO流、网络编程、反射和垃圾回收等相关概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常用类以及后面高级特性:集合框架,多线程,io流,网络编程,反射等等都是使用jdk提供API

API:Application Programming Interface:应用程序接口文档

Object类

需要将重点的类的重点功能--记住

举例:String类的拆分/将字符串转换成字符数组等等

java.lang.Object类:所有的类父类(包括自定义的类)

重点功能:

public final Class getClass():获取正在运行的类; (返回字节码文件对象) (跟后面反射有关系)

getClass()方法

在Java中获取一个类的字节码文件对象的方式有几种?
          有三种:
                 #1)public final Class getClass():获取正在运行的类;  (返回字节码文件对象)
                  2)在Java中任意类型的class属性   举例: Class c = 类名.class
                  3)Class类提供的一个静态方法
                  public static Class forName(String classPathName) :参数为当前类的全限定名称

代码实现:

public class ObjectDemo {
    public static void main(String[] args) throws ClassNotFoundException {


        //创建两个学生对象
        Student s1 = new Student() ;
        Student s2 = new Student() ;

        //public final Class getClass():获取正在运行的类;  (返回字节码文件对象)
        Class c1 = s1.getClass() ;
        System.out.println(c1) ;//class com.qf.object_01.Student  (class标记类  包名.类名-->类的全限定名称)
        Class c2 = s2.getClass() ;
        System.out.println(c2) ;
        System.out.println(c1==c2) ;//true:s1和s2都是com.qf.object_01.Student:类就加载一次,对象可以不断new!
        System.out.println("------------------------------------------") ;
        //在Java中任意类型的class属性:也可以获取到一个类的字节码文件!
        Class c3= Student.class ;
        System.out.println(c3) ;
        System.out.println(c3==c2);
        System.out.println("-----------------------------------------") ;
        //第三种获取字节码文件方式:Java提供Class类---跟反射相关的-提供静态功能-->返回值是它自己本身
        //public static Class forName(String className) throws ClassNotFoundException
        //这个方法在使用过程中,可能出现类找不到异常,谁调用这个方法,必须对这个异常处理---给上面抛出
        //这个方法的参数需要传递的是当前类的"全限定名称"
        //Class c4 = Class.forName("Student") ;//这里必须是全限定名称
        Class c4 = Class.forName("com.qf.object_01.Student") ;
        System.out.println(c4) ;
        System.out.println(c4==c3);
    }
}

toString()方法

public String toString():返回对象的字符串表示形式。

结果应该是一个简明扼要的表达,容易让人阅读。 建议所有子类覆盖此方法(否则,打印出来的是地址值!)

public int hashCode():返回对象的哈希码值,不同的对象,它的哈希码值不同

(理解为 "地址值",它不是实际意义的地址值----通过哈希算法算出来的)

	alt+ins---->toString:重写Object的toString方法

代码实现:

public class ObjectDemo {

    public static void main(String[] args) {
       // System.out.println("helloworld".hashCode());
        // System.out.println("hello".hashCode());

        //通过有参方法来创建Teacher类对象
        Teacher t = new Teacher("高圆圆",44) ;
        System.out.println(t) ;//直接输出对象名等价于---Object类的toString()
        System.out.println(t.toString());
        System.out.println("---------------------------------------");
        //Class c = t.getClass() ;
        //System.out.println(c) ;//class com.qf.object_02.Teacher --->Class类的ublic String getName() :获取类的全限定名称
        //String name = c.getName();
        //System.out.println(name);
       // int i = t.hashCode();
        //System.out.println(i);

        //Integer.toHexString(整数类型):将整数类型---转成十六进制数据,并且以字符串形式体现
        /*String str = Integer.toHexString(t.hashCode());
        System.out.println(name+"@"+str) */;

        //上面代码没有意义,建议所有子类都覆盖这个方法:



    }
}

任何类都继承Object类---toString方法源码

public String toString() {

return getClass().getName() + "@" + Integer.toHexString(hashCode());

//return this.getClass().getName() +"@" +Integer.Integer.toHexString(this.hashCode())

}

equals方法

==和equals的区别?

==连接的是两个基本数据类型:比较的数据值是否相同

而如果引用类型,比较的是引用类型的地址值是否相等!

equals:Object的equals方法默认比较的是两个对象的地址值相同,

如果你要比较成员信息的内容是否相同,必须重写Object的equals方法以及hashCode,重写之后比较的是内容是否相同(成员信息)

equals重写之后,是比较里面的每一个成员信息是否一样,如果都一样;

还有比较两个成员对应的hashCode是否一样,如果一样,是同一个人!

代码实现:

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

        int a  = 20 ;
        int b = 20 ;
        System.out.println(a==b) ;//连
        System.out.println("---------------------------------------------------") ;
        Student s1 = new Student() ;
        Student s2 = new Student() ;
        System.out.println(s1==s2) ;
        System.out.println("----------------------------------------------------") ;
        Student s3 = new Student("高圆圆",33) ;
        Student s4 = new Student("高圆圆",33) ;
        System.out.println(s3 == s4);//false
        // public boolean equals(Object obj)指示一些其他对象是否相等。
        //idea生成了equals和hashCode
        System.out.println(s3.equals(s4));
     }
}

clone()方法

	Object的克隆方法:创建并返回此对象的"副本"----前提是自定义的类型必须实现Cloneable接口,否则无法克隆!
	protected Object clone() throws CloneNotSupportedException
public class ObjectDemo4 {
    public static void main(String[] args) throws CloneNotSupportedException {

        //创建一个学生对象
        //没有学习克隆之前
        Student s1 = new Student() ;
        s1.name = "高圆圆" ;
        s1.age = 44 ;
        System.out.println(s1);
        System.out.println("---------------------------") ;
        //定义一个Student类型的变量s2,将s1赋值给s2
        Student s2 = s1 ; //将堆内存地址值给它
        System.out.println(s2) ;

        System.out.println("------------使用Object类的clone方法------------------") ;
        //s1.clone() ;//次对象的类必须实现接口Cloneable ,才能进行克隆!
        //可以克隆了,实现接口了
        //protected Object clone() throws CloneNotSupportedException
        Object o = s1.clone(); // 相当于向上转型:

        //将强转为子类型:向下转型
        Student s3 = (Student) o;
        System.out.println(s3);
    }
}
如果一个接口没有成员变量,连成员方法都没有,将这类接口称为"标记接口"
 	Cloneable接口:某个类如果能够实现这个接口,那么这个类对象就可以克隆!
 	Object类的clone方法里面被 native:本地方法---非Java语言实现
      protected native Object clone() throws CloneNotSupportedException;
      JNI:Java Native Interface:Java本地接口---通过java语言调用底层语言C

finalize()方法-垃圾回收法

Object类的垃圾回收方法
protected void finalize()throws Throwable--跟gc垃圾回收器有关系
当jvm开启垃圾回收器的时候,就会回收堆内存中没有更多引用的对象(new 出来的东西)

当前垃圾回收器开始运行,会调用Object类的finalize()方法,来回收对象,子类重写了,会调用子类的finalize方法
public class ObjectDemo5 {
    public static void main(String[] args) {

        //创建一个人类
        Person p = new Person("高圆圆",44) ;
        System.out.println(p) ;
        System.out.println("--------------------------") ;
        p = null ; //堆内存没有东西了

        //System类--->public static void gc()运行垃圾回收器
        // 手动开启垃圾回收器 (java语言中自动回收)---jvm垃圾回收--是一个线程(垃圾回收线程)
        System.gc();
    }
}
Object的finalize方法的原码:
 protected void finalize() throws Throwable { }

Scanner类

java.util.Scanner:文本扫描器(键盘录入数据的)
   构造方法:
       public Scanner(InputStream source):
           创建一个文本扫描器对象,里面参数是字节输入流,读取键盘录入的一些数据
 
  成员方法:
 
   获取功能:除过不能录入char类型之外.都可以录入!
       int nextInt():录入int类型
       String next():录入字符串
       String nextLine():录入一行字符串
       ....
   判断功能
          boolean hasNextXXX()方法:判断下一个录入的是为XXX类型
 
 
          细节:
            如果先录入int,在录入String,在录入String(使用String nextLine())---String的值会被漏掉;
           解决方案:
                   1)使用String  next():录入单个字符串(推荐)
                   2)在使用nextLine()之前,重新创建一个新的Scanner对象;

String类

String类:代表字符串,是一个常量,创建之后,其值不能更改!
       举例:
               String s = "abc" ;  格式 开发中定义字符串就这个格式!
  字符串的底层就是一个字符数组组成!char[]--->String
 
  构造方法:
       public String():创建字符串对象
       public String(String original):将指定的字符串传进去,构造一个字符串对象
       public String(char[] value):将字符串数组---构造成String
       public String(char[] value,int offset,int count):将一部分字符数组转换成String
       public String(byte[] bytes)将字节数组---构造成String
       public String(byte[] bytes, int offset,int length):将一部分字节数组---构造成String
 
       如果存在类型转换问题:
               已知char[]--->String  public String(char[] value)
               已知byte[]--->String  public String(byte[] bytes)
 
        如果仅仅表示定义一个String对象---推荐的格式
               String 变量名 = "字符串常量" ;
面试题:
        s1和s2有什么区别?
         String s1 = "hello" ;
         String s2 = new String("hello") ;
 
     第一个格式:
           创建一个对象,直接在常量池中创建;
      第二个格式:
           需要在堆内存开辟空间,而且指向常量池地址:内存创建了两个对象!
 
    两个都是创建字符串实例,但是推荐第一种,从内存角度考虑,消耗内存资源不严重!
/**
 *看程序,写结结果
 *
 * 考点:
 *      ==和equals的区别:
 *
 *      ==:连接的是两个引用类型的数据,比较的是两个对象的地址是否相同
 *      Object的equals():默认比较的是两个对象的地址值是否相同,子类重写了equals(),就比较两个对象的内容是否相同
 *
 *      
 *
 */
public class StringDemo3 {
    public static void main(String[] args) {

        String s1 = "hello" ;
        String s2 = "world" ;
        String s3 = "helloworld" ;
        System.out.println((s1+s2)==s3) ;
        System.out.println((s1+s2).equals(s3)) ;//String类重写了Object的equals方法,只管字符串内容是否一样
        System.out.println("----------------------------") ;
        System.out.println(("hello"+"world")==s3) ;//常量先相加,然后常量池中找,存在返回地址;否则常量池开空间
        System.out.println(("hello"+"world").equals(s3)) ;//比较内容是否相同
    }
}

字符串常量相加:

先相加,然后看结果,是否在常量池中,如果有,直接返回值地址;否则开空间

字符变量相加:

先在常量池开辟空间,然后在操作;

String类中常用的获取功能:

       1)public char charAt(int index) 获取指定索引值对应的字符
       2)public int length()  :字符串特有功能:获取字符串长度
 
       3)public String concat(String str):拼接功能 将指定的字符串拼接到该字符串末尾,获取新的字符串
 
       4)public int indexOf(String str)返回指定字符串第一次出现索引值
       public int lastIndexOf(String str):返回指定子字符串最后一次出现的索引值
 
 
       5)public String[] split(String regex):字符串拆分功能
 
       6)截取功能
               public String substring(int beginIndex,int endIndex)
               从指定位置开始,截取到endIndex-1处结束,包前不包后
               public String substring(int beginIndex)
              从指定位置开始默认截取到末尾!

String类的常用的转换功能:

       public byte[] getBytes(): 将字符串转换成字节数组 (编码过程:将能看懂的东西--->变成看不懂的!)
                           (使用平台默认字符集)
 
       public char[] toCharArray()  :将字符串转换成字符数组  (使用居多)
 
       public static String valueOf(常见的基本类型int/long/double/float/boolean/Object):
           String的万能方法:将上面的常用类型--转换成String
 
       public String toUpperCase():将指定字符串转换成大写
       public String toLowerCase():将指定字符串转换成小写
例1:
import java.util.Scanner;

/**
 * 需求:
 *      键盘录入一个字符串,将字符串的第一个字符转换成小写,其余字符转换成大写(不考虑特殊字符)
 *      举例:
 *              "Helloworld"---->"hELLOWORLD"
 *
 *      分析:
 *              1)创建键盘录入对象
 *              2)将字符串的第一个字符,截取出来 substring(0,1)--->将截取后的字符---转换成大写
 *              3)从第二个字符开始,截取出来 substring(1)--->将截取后的字符串---转换小写
 *              4)将2)和4)拼接----concat(指定的字符串)
 *
 *
 *
 */
public class StringTest {
    public static void main(String[] args) {
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in) ;

        //提示并录入字符串
        System.out.println("请输入一个字符串:") ;
        String line = sc.nextLine() ;

        /*//1)先将line的第一个字符截取出来
        String s1 = line.substring(0,1) ;
        //2)将s1--->转换成大写
        String s2 = s1.toUpperCase() ;

        //3)将line字符串 从第二个字符开始截取出来
        String s3 = line.substring(1) ;
        //4)将s3-->转换成小写
        String s4 = s3.toLowerCase() ;

        //5)将s2和s4拼接---String的concat拼接功能
        String result = s2.concat(s4) */;
       // System.out.println(result) ;

        //一步走 :链式编程
        String result = line.substring(0,1).toUpperCase().concat(line.substring(1).toLowerCase()) ;
        System.out.println(result);
        System.out.println("--------------------------------------");

        //调用方法
        String result2 = getStr(line) ;
        System.out.println(result2);
    }
    public static String getStr(String s){
        return
                s.substring(0,1).toUpperCase().concat(s.substring(1).toLowerCase()) ;
    }

}
例2:
/**
 * 需求:
 *           已知数组静态初始化的
 *            int[] arr  = {24,57,69,13,98} ;
 *            定义功能,将数组转换成String --->把数组遍历出来--->每一个元素拼接成String
 *                    [元素1, 元素2, 元素3, ....] (不允许使用Arrays工具类的toString(数组对象))
 */
public class StringTest2 {
    public static void main(String[] args) {
          //已知数组
        int[] arr  = {24,57,69,13,98} ;
        //调用将数组转换String的方法
        String result = arrayToString(arr) ;
        System.out.println(result) ;
    }
    //将转换成String
    public static String arrayToString(int[] array){
        //定义一个最终结果变量
        String s = "" ;
        s += "[" ;//或者使用字符串的concat功能
        //遍历数组
        for(int  x = 0 ; x < array.length ; x++){
            if(x==array.length-1){
                //最后一个元素
                s+=array[x] +"]" ;
            }else{
                //中间元素
                s+= array[x] +", ";
            }
        }
        return s ;
    }

}

String类判断功能以及其他功能:

       public boolean contains(String str):判断大串中是否包指定的子字符串
       public boolean equals(Object anObject)):比较两个字符串内容是否相同
       public boolean equalsIgnoreCase(String anotherString)):忽略大小写比较
       public boolean startsWith(String prefix):字符串是否以指定的前缀开头
       public boolean endsWith(String str):字符串是否以指定的后缀结尾
 
  其他功能:
       public String replace(char oldChar,char newChar)替换功能:使用指定的新的字符替换以前的字符
       public String trim():删除前后两端空格
 
               应用场景:trim():  使用io(intput输入 Output输出)流进行 读写复制(文件内容在网络中传输)
    文件内容前后有一些空字符出现,获取到文件内容之后,先去trim()去除两端空格
面试题
/**
 * 面试题:
 * String s1 = "hello" ;
 * String s2 = "hel" ;
 * 这个两个字符串按照字典顺序比较结果是怎么计算的?
 *
 * --->两个字符串--->底层是以字符数组存储-获取字符数组长度,获取长度的最小值
 * 使用最小值作为 while循环条件, 如果没有取到最小值,一直循环,
 *          循环逻辑:
 *                 通过获取两个字符数组的每一个字符,如果都相同,最终临界条件达到 ,两个字符数组长度相减
 *
 *              如果获取到字符,如果两个字符不相等,直接是两个字符---对应的ASCII码表的值相减---直接得到字典顺序的值!
 */
public class StringTest {
    public static void main(String[] args) {
        String s1 = "hello" ;
        String s2 = "hel" ;
        //public int compareTo(String another)
        System.out.println(s1.compareTo(s2)) ;
        System.out.println("-----------------------------") ;
        String s3 = "abc" ;
        int i = s1.compareTo(s3);
        System.out.println(i);
    }



}

class Demo{
    private final void m1(){

    }
}

StringBuffer类

	StringBuffer:字符串缓冲区,线程安全的,支持可变的字符序列!
	 什么叫线程安全----->后面讲的多线程
 	线程安全----> 意味"同步"---->执行效率低!---"银行类的网站!"
 	线程不安全---->意味"不同步"---->执行效率高!----"论坛的网站!"---不安全--->"锁机制"来解决线程安全问题(多线程)

StringBuffer和StringBuilder的区别?

StringBuffer和StringBuilder的区别?
        这两个类都是字符串缓冲区,都支持可变的字符序列,(都有相同的功能)
        前者:使用在多线程环境里面,能够保证线程安全----意味着同步----->执行效率低
        后者:是StringBuffer的简易替换,用于在单线程环境中,线程不安全---不同步---执行效率高!
        单线程使用StringBuilder:效率高(速度快)
 
 构造方法
       public StringBuffer():无参构造方法,里面空的字符序列,初始容量16个字符(默认容量足够大)  -
       public StringBuffer(String str):将字符串构造为StringBuffer类型,容量是大小:当前的里面的字符串长度+16
       前两个构造方法使用居多!
       public StringBuffer(int capacity):创建一个字符串缓冲区,指定容量大小
  获取字符串缓冲区的长度 ---int length()
  获取字符串缓冲区的容量---int capacity()

StringBuffer的添加/删除的功能

StringBuffer的添加/删除的功能
  添加:
       public StringBuffer append(任意java类型) 可以将任意类型的元素添加(在末尾追加)到字符串缓冲区中,返回值是字符串缓冲区本身

     public StringBuffer insert(int offset,任意java类型):在指定位置处的序列前面插入新的序列
  删除:
          public StringBuffer deleteCharAt(int index):在指定位置处删除指定的字符,返回字符串缓冲区本身
          public StringBuffer delete(int start,int end):从指定位置start处开始到end-1处的字符序列删除,
                          返回值字符串缓冲区本身

   开发中使用居多:追加功能以及删除 deletCharAt(int  index)使用居多

StringBuffer的特有功能-字符串缓冲区反转功能:

     public StringBuffer reverse() :字符串缓冲区反转功能,将字符串缓冲区中所有的字符序列反转!
例:
 *需求:
 *      键盘录入一个字符串,将字符串反转
 *
 *    方式1:不让你使用StringBuffer的特有功能,让你使用String
 *       1)将录入的字符串---->转换成字符数组
 *       2)定义一个String s = "" ;
 *       3)将字符数组倒着遍历
 *       for(int i = 字符数组.length-1;i>0 ;i --){
 *           s += 字符数组[i] ;
 *
 *       }
 *       4)返回结果变量s
public class StringBufferDemo3 {
    public static void main(String[] args) {

        //创建键盘录入对象
        Scanner sc = new Scanner(System.in) ;

        //提示并录入数据
        System.out.println("请输入一个字符串:" ) ;
        String line = sc.nextLine() ;

        //调用一个功能完成
        String result = reverse(line);
        System.out.println(result) ;
        System.out.println("---------------------------------------") ;
        String result2 = reverse2(line);
        System.out.println(result2);
    }

    //方式2:使用StringBuffer的反转功能
    public static String reverse2(String s){
       /*StringBuffer sb = new StringBuffer() ;
       sb.append(s) ;
       return sb.reverse().toString() ;*/

         return new StringBuffer(s).reverse().toString() ;
    }


    public static String reverse(String s){
        //定义一个空字符串
        String result = "" ;
        //将s字符串-->转换功能  --->字符数组
        char[] chs = s.toCharArray();
        for(int x = chs.length-1 ; x >= 0 ; x--){
            result += chs[x] ;
        }
        return  result ;
    }
}

StringBuffer其他功能-替换功能:

      替换功能
      
 public StringBuffer replace(int start,int end,String str)
 使用指定的字符串str从指定位置开始到end-1处进行替换,返回该字符串缓冲区本身
 public String substring(int start):从指定位置开始截取,默认截取到末尾,返回被截取后的字符串
 public String substring(int start,int end):从指定位置开始截取到指定位置end-1处,返回被截取后的字符串
//String<---->StringBuffer相互转换  (重点)

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

        //String---->StringBuffer
        String s = "hello" ;
       // StringBuffer sb = s ;

        //方式1)可以通过StringBuffer的有参构造方法
        //StringBuffer(String str)
        //创建一个字符串缓冲
        StringBuffer sb = new StringBuffer(s) ;
        System.out.println(sb) ;

        System.out.println("-------------------------") ;
        //方式2:通过StringBuffer的无参构造方法+append(String str)
        StringBuffer sb2  = new StringBuffer() ;
        sb2.append(s) ;
        System.out.println(sb2);


        System.out.println("---------------StringBuffer-->String------------------");
        //有一个字符串缓冲区--->里面存在字符序列
        StringBuffer buffer = new StringBuffer("100") ;
        //方式1) -->public String toString()
        String str = buffer.toString();
        System.out.println(str) ;
        System.out.println("----------------------------------------") ;
        //方式2:String类的构造方法
        //public String(StringBuffer buffer)
        String str2 = new String(buffer)  ;
        System.out.println(str2) ;


    }
}

String和StringBuffer的区别?

String特点:字符串是一个常量,一旦被创建,其值不能被更改

String作为形式参数,形参的改变不会影响实际参数;

而除过String这个引用类型之外,形式参数的改变直接影响实际参数!

StringBuffer特点:

字符串缓冲区支持可变的字符串,线程安全,执行效率低!

Integer类

功能:十进制转换成对应的进制的方法(静态方法)

拆箱和装箱:

四类八种的基本数据类型都会自动提升 对应的引用类型              jdk5以后新特性:自动拆装箱

           拆箱:
                  这些包装类类型--->降为 基本类型
           装箱:
                  就是基本类型--->提升  对应的引用类型

              基本类型                       引用类型的默认值null
                  byte                        Byte
                  short                       Short
                  int                         Integer(特殊)
                  long                        Long

                  float                       Float
                  double                      Double

                  char                        Character(特殊)

                  boolean                     Boolean
                  
      这些四类八种中的基本数据类型可以String进行相互转换的---->中间桥梁 ---->对应的基本类型的包装类类型!
      String-->Integer--->int
          "100"  --->100

       String--Long-->long



       Integer和Character涉及相关功能
public class IntegerDemo {
    public static void main(String[] args) {
        //public static String toOctalString(int i) 以字符串形式体现八进制
        //public static String toHexString(int i)  以字符串形式体现16进制
        //public static String toBinaryString(int i)以字符串形式体现的2进制
        System.out.println(Integer.toBinaryString(100));
        System.out.println(Integer.toOctalString(100));
        System.out.println(Integer.toHexString(100));
        System.out.println("-------------------------------------");
        //public static final int MAX_VALUE:常量:获取int的最大值
        //public static final int MIN_VALUE:常量:获取int的最小值
        System.out.println(Integer.MIN_VALUE) ;
        System.out.println(Integer.MAX_VALUE) ;

    }
}
Integer类表示包含int类型的值
 Integer类的构造方法:
      public Integer(int value):创建一个Integer实例,里面包含的int类型的值
      public Integer(String s) throws NumberFormatException: 将数字字符串转换成Integer的实例
              可能会出现数字格式化异常(字符串如果不是数字字符串,就会出现这个异常)
public class IntegerDemo2 {
    public static void main(String[] args) {
        //创建一个Integer实例
        //public Integer(int value):创建一个Integer实例,里面包含的int类型的值
        int a = 100 ;
        Integer i = new Integer(a) ;
        System.out.println(i) ;
        System.out.println("-----------------------------") ;
        // public Integer(String s) throws NumberFormatException:
        //Integer i2 = new Integer("hello") ;//NumberFormatException:数字格式化异常
        Integer i2 = new Integer("50") ;

        System.out.println(i2);


    }
}

int基本类型和引用String的相互转换 (重点)

int基本类型和引用String的相互转换  (重点)

 String---int:                int  变量名 = Integer.parseInt(已知的数字字符串) 推荐
 int---->String:            Integer类提供静态方法        String 变量名 = Integer.toString(int类型的值)
public class IntegerDemo4 {
    public static void main(String[] args) {

        //int---->String
        //方式1)比较简单
        int i = 100 ;
        String s = "" ;
        s += i ; //拼接符号 s = s+i
        System.out.println(s) ;//"100"
        System.out.println("-----------------------------------------") ;
        //方式2):int---->Integer----->String
        //int-->Integer
        //Integer integer = new Integer(i) ; //有参构造方法
        Integer integer = Integer.valueOf(i);
        //Integer--->String
        String str = integer.toString();
        System.out.println(str);

        System.out.println("----------------------------------------------") ;
        //方式3:Integer---->String
        //public static String toString(int i)
        String str2 = Integer.toString(i);
        System.out.println(str2);


        System.out.println("---------------------String-->Integer->int----------------------------") ;
        //推荐一步执行:
        //Integer类提供了静态方法
        //public static int parseInt(String s)throws NumberFormatException:要转的字符串必须为数字字符串

        //万能方法:String--->long  --->Long引用提供静态方法 public static long pasreLong(String str)
        //...
        String source = "1990" ;
        int value = Integer.parseInt(source);
        System.out.println(value) ;
        System.out.println("------------------------------------------");
        //分步执行
        //String--->Integer---->int
        //Integer(String str)
        Integer ii = new Integer(source) ;
        //Integer--->int     public int intValue() :
        int value2 = ii.intValue();
        System.out.println(value2) ;
    }
}

Integer是int类型的包装类类型,它里面的特点

Integer是int类型的包装类类型,它里面的特点

   Integer:
   将int类型赋值给Integer变量 这种格式,执行底层方式valueOf(int i)


   public static Integer valueOf(int i) {
          如果i的值在-128~127之间,直接从内部类--->IntegerCache缓存去中取数据
         if (i >= IntegerCache.low && i <= IntegerCache.high)
             return IntegerCache.cache[i + (-IntegerCache.low)]; //  cache属性:Integer cache[] 长度 =i+128
         return new Integer(i);   //如果上if不成立,重新开辟新的空间创建Integer实例
     }

Character类

char类型的包装类类型:Character
 构造方法:
      public Character(char value):包含char类型的值
 成员方法:
      判断功能:
          public static boolean isDigit(char ch):判断当前这个字符是否为数字
          public static boolean isLowerCase(char ch):判断当前这个字符是否小写
          public static boolean isUpperCase(char ch):判断当前这个字符是否大写
需求:键盘录入一个字符串,统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数。(不考虑其他字符)
    举例:
         "Hello123World"
 
      提示:统计字符定义三个统计变量,分别代表大写字母字符,小写字母字符,数字字符
            'A'-'Z' 大写
            'a'-'z' 小写
            '0'-'9' 数字
 
import java.util.Scanner;

public class CharacterTest {
    public static void main(String[] args) {
        //定义一个三个统计变量
        int upperCount = 0 ;
        int lowerCount = 0 ;
        int digitCount = 0 ;

        //键盘录入一个字符串
        Scanner sc= new Scanner(System.in) ;
        //提示并录入数据
        System.out.println("请您输入一个字符串:") ;
        String line = sc.nextLine() ;

        //选择核心代码--->快速抽取一个方法:ctrl+alt+M--->修改方法名即可!
        getCharCount(upperCount, lowerCount, digitCount, line);


    }

    private static void getCharCount(int upperCount, int lowerCount, int digitCount, String line) {
        //将字符串转换成字符数组
        char[] chs = line.toCharArray();
        //遍历字符数组
       /* for(int x = 0 ; x < chs.length ; x++){
            //获取每一个字符
            char ch = chs[x] ;
            //判断
            if(ch >= 'A' && ch <= 'Z'){
                //大写字母字符
                upperCount++;
            }else if(ch >='a' && ch <= 'z'){
                //小字母字符
                lowerCount++ ;
            }else{
                //数字字符
                digitCount++ ;
            }
        }*/
        //使用另一种方式
        for(int x = 0 ;  x < chs.length ; x++){
            char ch = chs[x] ;//获取字符
            //使用Character类提供的特有功能
            if(Character.isUpperCase(ch)){
                upperCount ++ ;
            }else if(Character.isLowerCase(ch)){
                lowerCount ++ ;
            }else if (Character.isDigit(ch)){
                digitCount++ ;
            }else{
                System.out.println("没有其他字符类型");
            }
        }


        System.out.println("大写字母字符共有:"+ upperCount +"个,小写字母有:"+ lowerCount +
                "个,数字字符有:"+ digitCount +"个");
    }
}

System类

java.lang.System:不能实例化:提供了静态字段(静态变量)
      public static final PrintStream out :标准 打印输出流
      public static final PrintStream err  标准错误输出流
      public static final InputStream in  标准输入流

System类常用的成员方法:

      public static long currentTimeMillis() 计算当前系统时间毫秒值  (很少单独用)
                      用来计算当前某个程序的时间复杂度(运行效率)

      public static void gc() 收到开启垃圾回收器   ---会调用finalize(),回收没有更多引用的对象
      public static void exit(int status): 参数为0:终止jvm
      public static void arraycopy(
                                 Object src,  //原对象
                                  int srcPos,   //原对象中的某个位置
                              Object dest,      //目标对象
                              int destPos,       //目标对象的某个位置
                              int length)      //指定的长度

Random类

java.util.Random:伪随机数生成器  可以产生随机数 比Math.random()麻烦
      两个构造方法:
              public Random() :无参构造方法(推荐)
              public Random(long seed):有参构造,创建一个指定long类型的变量的随机数生成器
      两个成员方法:
              public int nextInt(): 产生伪随机数在,取值是int类型 的范围内
              public int nextInt(int n):产生0-n之间的随机数(推荐)

Collection类

Collection:单例集合顶层次的根接口,不能new,没有直接子实现类,是通过它子接口的子实现类来实例化!
 泛型: 集合里面创建的时候,如果不带泛型可能程序安全问题;带了<>,模拟创建数组的时候,明确了数据类型!
 <E>:element
 <T>:Type
 <K>:Key键
 <V>:Value值

 基本功能:
      添加元素:
              boolean add(E e):添加元素
      删除:
              boolean remove(Object o):删除指定的元素
              void clear():暴力删除:清空集合
      判断:
              boolean contains(Object o):是否包含指定的元素
              boolean isEmpty():判断集合是否为空
Iterator<E> iterator():Collection专有迭代器(遍历集合) (过渡)

 Iterator迭代器接口:
      boolean hasNext(): 判断迭代器里面是否下一个可以遍历的元素
      E next():获取迭代器的下一个元素 (和迭代器中的类型一致)

        开发中---集合遍历---->都用jdk5以后新特性:增强for循环 代替上面迭代器
 // 需求:
 //       使用Collection<Student>存储5个学生对象,使用Iterator<E> iterator()进行遍历!
          
          public class CollectionDemo2 {
    public static void main(String[] args) {

        //使用Collection存储String字符串并进行遍历---使用Collection迭代器
        Collection<String> c = new ArrayList<>() ;

        //添加String
        c.add("android") ;
        c.add("JavaEE") ;
        c.add("mysql") ;
        c.add("hadoop") ;
        //c.add(100) ;

        //获取Collection的迭代器
        //Iterator<E> iterator()
        Iterator<String> it = c.iterator();
        //E next() //E---类型需要和泛型的类型一致的

        

        //while循环
        while(it.hasNext()){
            String s = it.next();
            System.out.println(s+"---"+s.length());
        }

        
    }
}

Collection集合高级功能:

Object[] toArray():集合的传统方式遍历 将集合转换成对象数组(以后不会用的)

Calendar类-日历类

java.util.Calendar:日历类(抽象类)
  提供了获取年,年中的月,月中的日期,小时,小时分钟数,分钟中的秒数都可以获取到

  如果有一个类是抽象类,可以直接new子类,或者是它提供了一些静态方法---->
          完成了一些事情,创建子类对象,返回值是当前抽象类的本身

 成员方法:
      public static Calendar getInstance() 创建日历对象
      public int get(int field):通过日历对象获取日历中的字段值

                  参数:Calendar中提供的一些静态字段
                              public static final int YEAR:年份
                              public static final int DAY_OF_MONTH/public static final int DATE:月中的日期
                              public static final int MONTH:月份

      public abstract void add(int field,int amount):给指定的日历字段值添加或者减去时间偏移量

BigDecimal类-对小数进行精确计算

BigDecimal这个类是对小数可以进行精确计算的!
 构造方法:

      public BigDecimal(String val):将String类型数据构造成BigDecimal
          将double数据---使用"小数字符串"

  成员方法:
          public BigDecimal add(BigDecimal augend):求和
          public BigDecimal subtract(BigDecimal subtrahend):相减
          public BigDecimal divide(BigDecimal divisor):小数除法
          public BigDecimal divide(BigDecimal divisor,int roundingMode):除法,第二个参数舍入模式

                            BigDecimal提供的模式  public static final int ROUND_HALF_UP:四舍五入
                              ...
          public BigDecimal divide(BigDecimal divisor,
                          int scale,//保留几位小数
                          int roundingMode)     //舍入模式
          public BigDecimal multiply(BigDecimal multiplicand):乘法

Date类

	java.util.Date:表单特定的日期时间,还允许格式化和解析日期字符串
 		构造方法:
      		public Date():创建当前日期对象:获取当前系统日期时间
     		public Date(long date):里面传入long类型的时间毫秒值,获取的表示从标准基准时间(称为“时代”)即1970年1月1日00:00:00 GMT起的指定毫秒数
		成员方法:
      		public long getTime():将Date对象转换成long类型时间毫秒值
      		public void setTime(long time):设置日期时间,参数时间毫秒值
      
      
      
	java.util.Date重点如何和String日期文本相互转换!

 		他们之间要进行转换需要使用类DateFormat
		 DateFormat是日期/时间格式化子类的抽象类,它以语言无关的方式格式化和分析日期或时间
 		它具体的子类:SimpleDateFormat是一个具体的类,允许格式化(日期文本),解析(文本日期)

		构造方法:
 		     public SimpleDateFormat(String pattern):参数是日期模式         "yyyy-MM-dd"
   		   pattern的组成:
     		         y:表示年份中某个值----->yyyy 表示年 "1996/2023/..."
     		         M:表示年中的月份------>MM     表示月:七月-->"07" 十月 -->"10"
      		        d:表示月中的日期值----->dd   表示 "01","11","31"..
 		成员方法
     		 将Date---->String:格式化  public final String format(Date date)
     		 将String日期---->Date:解析

                              public Date parse(String source)throws ParseException

例:

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

/**
 * 键盘录入出生年月日,计算来到这个世界多少天了?
 *
 * 分析:
 *      1)键盘录入String dateStr = "1990-02-27"
 *      2)将dateStr日期字符串---->java.util.Date
 *      3)获取当前那个Date日期时间 毫秒值  long getTime()
 *      4)System提供了一个方法获取当前系统时间毫秒值
 *      5)时间差值---然后换算成天
 */
public class DateTest {
    public static void main(String[] args) throws ParseException {
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in) ;

        //提示并录入数据
        System.out.println("请输入您的出生年月日:" ) ;
        String dateStr = sc.nextLine() ;//yyyy年MM月dd日/yyyy-MM-dd

        //将dateStr---->java.util.Date
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd") ;
        Date date = sdf.parse(dateStr);

        //获取当前date所在时间毫秒值
        long oldTime = date.getTime();
        //获取当前系统时间毫秒值
        long nowTime = System.currentTimeMillis() ;

        long time = nowTime - oldTime ;


        System.out.println("您来到这个时间有:"+(time/1000/60/60/24)+"天");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小周不要掉头发

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

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

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

打赏作者

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

抵扣说明:

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

余额充值