JavaSE——基础知识回顾12之常用类

文章目录

今天所学内容比较重要,关系到以后的项目开发中所需要的一些比较常用的知识点,最好熟记于心


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 文章目录
  • 前言
  • 一、基本的常用类分类说明
  • 二、内容部分
    • (1)、包装类
      • 1、什么是包装类?
      • 2、包装类的继承关系详解
      • 3、装箱与拆箱
      • 4、总结:
    • (2)、String类
      • 1、String类的分析
      • 2、String类中常用的方法
      • 3、案例演示
      • 4、StringBuffer 与 StringBuilder
      • 5、面试题
      • 总结:
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、基本的常用类分类说明

常用的类分为六大类
1、内部类(前面已经提到过,本次任务就不作过多解释)
2、Object类(前面也已经讲过具体请看基础回顾第9章)
3、包装类(本次任务重点讲解对象)
4、String类型(重点讲解)
5、BigDecimal类(只做了解,打算放到下一次任务做一个具体的解释)
6、时间类型(部分重点详解)

以上就是常用类的基本分类,按照计划先讲解今天的重点任务,一、对包装类的讲解 二、对String类的讲解

二、内容部分

(1)、包装类

1、什么是包装类?

概念:基本数据类型所对应的应用数据类型,Object可统一所有的数据,包装类的默认值是null。
包装类出现的原因:由于Java是一门纯面向对象语言,但是对于八大基本数据类型而言却不能独自实例化对象,为了填这一个坑,于是Java就推出了包装类这一个概念,各个数据类型都有与之所对应的包装类,并且可以创建对象,并且每一个包装类对最终继承于超类 Object(之前我就说过,Object类是所有类的父类,此处正有体现)

2、包装类的继承关系详解

继承关系如下:

基本数据类型 对应的引用数据类型 继承关系
byte Byte extends Number extends Object
short Short extends Number extends Object
int Integer extends Number extends Object
long Long extends Number extends Object
float Float extends Number extends Object
double Double extends Number extends Object
char Character extends Object
boolean Boolean extends Object

巧法妙记:
1、数值型都继承Number
2、int的包装类Integer
3、char的包装类Character

3、装箱与拆箱

装箱:包装类–>基本数据类型

public class Test01{
  	public static void main(String[] args){
         int i=100;
         Integer integer =Integer.valueOf(i);//装箱操作,即将int类型的值 装箱转换成 Integer类型的值
         System.out.println(integer);//100,只不过是Integer类型的值

         System.out.println(integer.getClass().getSimpleName());// Integer,   获取数值类型(为了给大家证明这是一个数值类型)
	}
}

拆箱:包装类–>基本数据类型

public class Test02{
	public static void main(String [] args){
	    Integer integer=new Integer(100);
	    int i=integer.intValue();//拆箱
	    System.out.println(i);
	    System.out.println(i.getClass().getSimpleName());// int ,可以看出该数值的类型

    }
}

JDK1.5:在JDK1.5版本过后,便出现了自动拆箱与自动装箱
自动装箱:基本数据类型–>包装类

//实现自动装箱
public class Test03{
	public static void main(String[] args){
			int i=100;
			Integer integer=i;//自动装箱(底层实现:Integer.valueOf(i))
			System.out.println(integer);
            System.out.println(integer.getClass().getSimpleName());// Integer,   获取数值类型(为了给大家证明这是一个数值类型)
			
   }
}
//实现自动拆箱
public class Test04{
	public static void main(String[] args){
        Integer integer=new Integer(100);
        int i=integer;//自动拆箱(底层实现:integer.intValue();)
        System.out.println(i);
        System.out.println(i.getClass().getSimpleName());// int ,可以看出该数值的类型
   }
}

案例:实现将 字符串数组转换成int数组

package net.yzy.knowledge.lesson22;

public class Test05 {
    public static void main(String[] args) {
        /**
         * 需求将字符串数组转换为int类型
         * {"1","2","3","4","5","6","7"}
         */
        String []str={"1","2","3","4","5","6","7"};
        int [] num=new int[str.length];

        for (int i=0;i<=str.length-1;i++){
            //先将字符串数组转换成Integer类型
            //再通过自动拆箱将Integer类型转换成int类型
            num[i]= Integer.valueOf(str[i]);

        }
        for (int b:num
             ) {
            System.out.print(b+"\t");
        }
        System.out.println();
        System.out.println(num.getClass().getSimpleName());//int[]
    }
}

应用场景:集合(类似数组的容器),但是集合只能存引用数据类型,如果想存储基本数据类型,就可以把基本数据类型转换为对应的包装类对象

4、总结:

相对而言,Integer部分难度较小,可能是知识点比较浅,但是如果看底层代码的话,我只能说任重而道远,有些时候底层代码看懂了还不一定会用。

(2)、String类

1、String类的分析

说明:String 是一个不可变的类,即一旦一个String对象被创建,包含在这个对象中的字符序列是不可改变的。

2、String类中常用的方法

String str = "123abc";
		
		str = str.concat("DEF123");//在此字符串末尾追加字符串,并返回新的字符串
		str = str.substring(2);//从开始下标处截取到字符串末尾,并返回新的字符串
		str = str.substring(1, 7);//从开始下标处(包含)截取到结束下标处(不包含),并返回新的字符串
		str = str.toUpperCase();//转大写,并返回新的字符串
		str = str.toLowerCase();//转小写,并返回新的字符串
		
		str = "   123 a  bcD EF 123        ";
		
		str = str.trim();//去除首尾空格,并返回新的字符串
		str = str.replace('2', '-');//替换字符,并返回新的字符串
		str = str.replaceFirst("3", "林成");//替换第一个出现的字符串,并返回新的字符串
		str = str.replaceAll("1", "xxx");//替换字符串,并返回新的字符串
		str = str.replaceAll(" ", "");//替换字符串,并返回新的字符串
		
		System.out.println("判断两个字符串内容是否相同:(区分大小写)" + str.equals("xxx-林成abcDEFxxx-3"));
		System.out.println("判断两个字符串内容是否相同:(不区分大小写)" + str.equalsIgnoreCase("XXX-林成ABCdefxxx-3"));
		System.out.println("判断此字符串是否以某个字符串开头:" + str.startsWith("xxx"));
		System.out.println("判断此字符串是否以某个字符串结尾:" + str.endsWith("-3"));
		
		System.out.println("查询此字符串第一次在目标字符串中的下标:" + str.indexOf("-"));
		System.out.println("查询此字符串最后一次在目标字符串中的下标:" + str.lastIndexOf("-"));
		
		System.out.println("获取指定下标上的字符:" + str.charAt(4));
		
		System.out.println(str);

3、案例演示

//将其他类型转换成字符串类型
package net.yzy.knowledge.lesson22;

public class Test06 {
    public static void main(String[] args) {
        //将其他的类型转换成字符串类型
        int i=100;
        System.out.println(String.valueOf(i));
        System.out.println(String.valueOf(i).getClass().getSimpleName());//String 类型结果

        boolean a=true;
        System.out.println(String.valueOf(a));
        System.out.println(String.valueOf(a).getClass().getSimpleName());//String 类型结果
    }
}

JavaSE——基础知识回顾12之常用类_第1张图片

package com.dream.string_class;
public class Test03 {
	public static void main(String[] args) {
		/**
		 * 知识点:String类的常用方法
		 * 注意:String是一个不可变的类, 即一旦一个String对象被创建, 包含在这个对象中的字符序列是不可改变的, 直至该对象被销毁。
		 * 
		 *  练习:完成一个邮箱格式的校验 [email protected]
			(1),“@”不能在第一位
			(2),“.”不能在最后一位
			(3),“@”和“.”中间应该有字符
			(4),***@***.***
		 */
		String email = "[email protected]";
		int index1 = email.indexOf("@");//获取“@”的下标
		int index2 = email.indexOf(".");//获取“.”的下标
		if(index1 == 0 || index2 == email.length()-1 || (index2-index1)<=1){
			System.out.println("邮箱格式错误");
		}
	}
}

4、StringBuffer 与 StringBuilder

说明:StringBuffer与StringBuilder的用法及其相似
StringBuffer的案例:

public class Test01 {
	
	public static void main(String[] args) {
		/**
		 * 知识点:StringBuffer
		 * 
		 * StringBuffer代表可变的字符序列。
		 * StringBuffer称为字符串缓冲区,
		 * 它的工作原理是:
		 * 			预先申请一块内存,存放字符序列,
		 * 			如果字符序列满了,会重新改变缓存区的大小,以容纳更多的字符序列。
		 * 			StringBuffer是可变对象,这个是String最大的不同
		 * 
		 * 继承关系:StringBuffer extends AbstractStringBuilder
		 */
		
		//默认字符串缓冲区:16个字符
		//StringBuffer sb = new StringBuffer();
		
		//自定义字符串缓冲区:100个字符
		//StringBuffer sb = new StringBuffer(100);
	
		//自定义字符串缓冲区:"123abc".length() + 16 : 22个字符
		StringBuffer sb = new StringBuffer("123abc");
		sb.append("DEF123");//在末尾追加字符串
		sb.insert(6, "xxx");//在指定下标处插入字符串
		sb.setCharAt(3, 'A');//替换指定下标上的字符
		sb.replace(6, 9, "为生命而怒吼");//从开始下标处(包含)替换到结束下标处(不包含)的字符串	
		sb.deleteCharAt(1);//删除指定下标上的字符
		sb.delete(5, 11);//从开始下标处(包含)删除到结束下标处(不包含)的字符串
		sb.reverse();//反转字符串

		//321FEDcbA31
		System.out.println(sb);	
	}
}

StringBudilder的案例:

public class Test01 {
	
	public static void main(String[] args) {
		/**
		 * 知识点:StringBuilder
		 * 
		 * StringBuilder代表可变的字符序列。
		 * StringBuilder称为字符串缓冲区,
		 * 它的工作原理是:
		 * 			预先申请一块内存,存放字符序列,
		 * 			如果字符序列满了,会重新改变缓存区的大小,以容纳更多的字符序列。
		 * 			StringBuilder是可变对象,这个是String最大的不同
		 * 
		 * 继承关系:StringBuilder extends AbstractStringBuilder
		 */
		
		//默认字符串缓冲区:16个字符
		//StringBuilder sb = new StringBuilder();
		
		//自定义字符串缓冲区:100个字符
		//StringBuilder sb = new StringBuilder(100);
	
		//自定义字符串缓冲区:"123abc".length() + 16 : 22个字符
		StringBuilder sb = new StringBuilder("123abc");
	
		sb.append("DEF123");//在末尾追加字符串
		sb.insert(6, "xxx");//在指定下标处插入字符串
		sb.setCharAt(3, 'A');//替换指定下标上的字符
		sb.replace(6, 9, "用良心做教育");//从开始下标处(包含)替换到结束下标处(不包含)的字符串
		
		sb.deleteCharAt(1);//删除指定下标上的字符
		sb.delete(5, 11);//从开始下标处(包含)删除到结束下标处(不包含)的字符串
		sb.reverse();//反转字符串
		
		//321FEDcbA31
		System.out.println(sb);
		
		/**
		 * StringBuffer vs StringBuilder
		 * 
		 * 相同点:使用上一模一样,因为他们都继承AbstractStringBuilder
		 * 
		 * StringBuffer:线程安全的,效率低
		 * StringBuilder:线程不安全的,效率高
		 */
		
	}
}

5、面试题

package com.dream.string_class;

public class Test04 {
	
	public static void main(String[] args) {
		/**
		 * 知识点:深入String创建对象问题
		 * 
		 * 	面试题1:下列代码创建几个String对象(考点:常量池中的值必须是唯一的)
		 * 		String str1 = "abc";
				String str2 = "abc";
				答案:一个
			
			 面试题2:下列代码创建几个String对象(考点:常量池中的值必须是唯一的)
			 	String str1 = new String("abc");
				String str2 = new String("abc");
				答案:三个
		 */		
	}
}
package com.dream.string_class;
public class Test05 {
	public static void main(String[] args) {
		/**
		 * 知识点:深入String创建对象问题
		 */
		String str1 = "abc";
		String str2 = "abc";
		System.out.println(str1 == str2);//true
		
		//两个常量字符串直接在编译时拼接
		String str3 = "ab" + "c";
		System.out.println(str3 == str1);//true
		
		//两个常量字符串直接在编译时拼接
		final String s1 = "ab";
		final String s2 = "c";
		String str4 = s1+s2;
		System.out.println(str4 == str1);//true
		
		//两个变量字符串拼接底层是创建StringBuilder对象
		String s3 = "ab";
		String s4 = "c";
		String str5 = s3+s4;//new StringBuilder(s3).append(s4).toString()
		System.out.println(str5 == str1);//false
	}
}

总结:

以上便是对String类的知识进行总结,后期如果有更新会按时进行更改。

总结

今天的主要内容为以上部分,若有问题,QQ:1091416907私聊,不说了 赶地铁回家了。

你可能感兴趣的:(雍某人的Java成神之路,java)