Java之一文详解String字符串的用法

目录
  • 一. String字符串简介
    • 1. 概述
    • 2. 与字符的区别
    • 3. 定义方式
      • 3.1 构造方法定义
      • 3.2 直接赋值定义
  • 二. 字符串实用方法
    • 1. 字符串的比较方法
    • 2. 判断字符串是否为空
    • 3. 判断相关的方法
    • 4. 获取相关的方法
    • 5. 拼接、替换、截取、分割、去空格等方法
    • 6. 大小写转换的方法
    • 7. 字符串转数组的方法
    • 8. 其他类型转字符串的方式
    • 9. 格式化字符串的方法
  • 三. 结语

一. String字符串简介

1. 概述

String是Java里的一个类,属于引用类型,遵循引用类型的基本规律和要求。但它也有自己的一些特点,比如可以直接用双引号"......"来表示一个字符串,所以凡是用双引号括起来的一串字符都是String对象,如“Hello”在编译后就会成为一个String对象。

而且String是final类,一旦创建了一个String对象,理论上就不能再被改变,当然我们可以使用其他变量重新赋值的方式进行更改。

另外从名字上我们也可以猜测出,字符串与字符有一定的关系。实际上,String字符串的内部是通过一个private final char[]数组来实现数据存储的,所以我们可以通过如下方式来表示一个字符串:

String str = new String(new char[] {'H', 'e', 'l', 'l', 'o', 'y', 'y', 'g'}); 

当然,以上这种字符串的表达方式太过麻烦,而且由于String太常用了,所以Java就提供了"......"这种极简的表达方式供我们使用。

我们要知道,Java字符串的一个重要特点就是字符串的不可变性。这种不可变主要是通过final修饰String类,private final char[]字段对数据的存储,且没有提供任何可以修改char[]字段的方法来实现的。

2. 与字符的区别

壹哥之前给大家讲过java里的8种基本数据类型,我们知道,其中有一种比较特殊的char字符类型,可以在单引号中存储单个的字符元素,比如'A'、'9'、'国' 等。而我们今天要学习的String类,则是用双引号"..."来表达字符串的。作为初学者,我们一定要注意字符与字符串的区别:

  • 字符只能表示单个字符元素,必须用单引号''把单个的字符元素括起来,如'A'、'9'、'国' 等;
  • 字符串可以表示单个或多个字符元素,必须用双引号把单个或多个字符元素括起来,如"A"、"Hi"、"中国"等;
  • 字符是基本类型,其本质是一种数值;字符串是引用类型,其本质是一个java类。

3. 定义方式

String字符串的定义方式,常用的有如下两种:

通过构造方法创建字符串对象;

直接赋值。

我们在开发时,其实很少使用第一种方式,因为太过啰嗦,一般都是通过直接赋值的方式进行定义。

3.1 构造方法定义

Java为String类提供了11个构造方法创建String对象,这些方法提供了不同的参数来初始化字符串。当字符串变量被创建处理后,必须经过初始化才能使用。下面是通过构造方法定义String对象的几种方式,大家可以参考:

/**
 * @author 一一哥Sun
 * 千锋教育
 */
public class Demo01 {
    public static void main(String[] args) {
	//通过构造方法创建String对象
	//构造一个空字符串,相当于String s1="";
	String s1=new String();
	System.out.println("s1的长度="+s1.length()+",s1="+s1);

	//构造一个由内容的字符串,相当于String s1 = "一一哥";
	String s2 = new String("跟一一哥学Java");
	System.out.println("s2的长度="+s2.length()+",s2="+s2);

	//通过字节数组构建字符串对象
	byte[] b = {97,98,99,100};
	String s3=new String(b);
	System.out.println("s3的长度="+s3.length()+",s3="+s3);

	//通过字节数组构建字符串对象
	//参数1:字节数组;参数2:起始下标;参数3:长度
	String s4 = new String(b, 0, b.length);
	System.out.println("s4的长度="+s4.length()+",s4="+s4);

	//通过字符数组创建字符串对象
	char[] c = {'一','一','哥'};
	String s5 = new String(c, 0, c.length);
	System.out.println("s5的长度="+s5.length()+",s5="+s5);
    }
}

3.2 直接赋值定义

下面是通过直接赋值的方式来定义String对象的方式,大家可以参考:

/**
 * @author 一一哥Sun
 * 千锋教育
 */
public class Demo02 {
    public static void main(String[] args) {
	//直接赋值的方式创建String对象
	//注意:null表示String对象为空,而""表示一个长度为零、内容为空的空字符串对象,但该对象不为空
	//定义一个值为null的空字符串
	String s1=null;
	System.out.println("s1="+s1);

	//定义一个内容为空,长度为零的字符串
	String s2 = "";
	System.out.println("s2的长度="+s2.length()+",s22="+s2);

	//定义一个带有内容的字符串
	String s3 = "一一哥";
	System.out.println("s3的长度="+s3.length()+",s3="+s3);
    }
}

我们要注意String s=nullString s=""的区别:

  • String s=null表示String对象为空,即字符串对象的引用指向了null,还没有指向任何的内存空间;
  • String s="" 是声明了一个字符串类型的引用,其值为"",表示是一个长度为零、内容为空的空字符串对象,但该对象不为空! 这个s对象的引用指向的是空字符串的内存空间。

以上内容,是对字符串定义和使用的常规操作,但实际上String字符串还有其他很多有用的方法,接下来壹哥就专门给大家介绍一下这些实用方法。

二. 字符串实用方法

1. 字符串的比较方法

在Java中,如果我们想比较两个字符串,其实主要是比较两个字符串的内容是否相同,所以应该使用 equals() 方法,而不要使用 == 进行比较。

/**
 * @author 一一哥Sun
 * 千锋教育
 */
public class Demo04 {
    public static void main(String[] args) {
	String s1 = "hello";
        String s2 = "hello";
        //==用于比较两个对象的地址
        System.out.println("s1==s2的结果:"+(s1 == s2));
        //equals()用于比较两个对象的内容
        System.out.println("s1.equals(s2)的结果:"+s1.equals(s2));
    }
}

大家注意,在上面的案例中,虽然使用==和equals()比较的结果都是true,但实际上这只是”凑巧“罢了。在本案例中,之所以使用”==“进行比较的结果也是true,这是因为Java编译器在编译期,自动把所有相同内容的字符串当作一个对象放入到了字符串常量池。所以s1和s2都指向了同一个引用地址,结果自然就是相同的。但如果我们把上述案例换一种写法,再利用”==“进行比较就不是这样的结果。

/**
 * @author 一一哥Sun
 * 千锋教育
 */
public class Demo04 {
    public static void main(String[] args) {
        //新的写法
        String s3 = "yiyige";
        //将字符串转为小写
        String s4 = "YIYIGE".toLowerCase();
        //此时s3和s4是指向两个不同引用地址的对象
        System.out.println("s3==s4的结果:"+(s3 == s4));
        System.out.println("s3.equals(s4)的结果:"+s3.equals(s4));
    }
}

从上面的案例中,我们可以得出一个结论,要想比较两个字符串,应该使用 equals() 方法,而不是"=="方法!

2. 判断字符串是否为空

另外在前面的代码案例中,壹哥还给大家介绍了两种定义String字符串对象的方式,并在第2种方式中给大家提到了null与""两种为空的情况。而我们在实际开发中,判断一个字符串对象是null与"",其实是一种非常常见的操作,那么我们该怎么判断String对象是否是null或""呢?

/**
 * @author 一一哥Sun
 * 千锋教育
 */
public class Demo03 {
    public static void main(String[] args) {
	//判断字符串对象是否为null或""
	//注意null表示String对象为空,而""表示是一个长度为零、内容为空的空字符串对象,但该对象不为空
        //定义一个值为null的空字符串
	String s1=null;
	//判断方式1:判断对象是否为null
	if(s1==null) {
            System.out.println("s1字符串对象为null,s1="+s1);
	}

	//定义一个内容为空,长度为零的字符串
	String s2 = "";
	//判断方式2:这种判断写法存在异常隐患,字符串对象s2有可能为null,如果s2.equals()调用时,s2可能为null,此时就会出现空指针异常
	if(s2.equals("")) {
            System.out.println("s2的长度="+s2.length()+",s2="+s2);
	}

	//判断方式3:对上面的判断方式进行改进,用以下方式进行判断,就会消除空指针异常的隐患
	if("".equals(s2)) {
            System.out.println("s2的长度="+s2.length()+",s2="+s2);
	}

	//判断方式4:判断一个空串的长度是否为0,这种判断字符串是否为空的方式效率更高
	if(s2.length()==0) {
            //我们也可以直接使用字符串的isEmpty()方法,其内部实现与此方式相同。
            System.out.println("s2的长度="+s2.length()+",s2="+s2);
	}

	//判断方式5:更全面严谨的判断。s==null一定要写在前面,因为如果s为null,先调用后面的s.length()就会出现空指针异常
	if(s2 == null || s2.length() == 0) {
            System.out.println("s2的长度="+s2.length()+",s2="+s2);
	}

	//判断方式6:或者我们直接使用字符串的isBlank()方法
	if(s2.isBlank()) {
            System.out.println("s2的长度="+s2.length()+",s2="+s2);
	}
    }
}

在实际开发时,我们一般是采用第5种判断方式,这种判断方式更为严谨,能够把两种”为空“的情况都考虑到。当然,我们也可以直接使用字符串对象提供的isEmpty()或isBlank()方法,进行判空。另外我们要特别注意,防止出现空指针异常,并且也要考虑采用哪种方式判断为空的情况效率更高。

3. 判断相关的方法

String字符串中提供了几个与字符串判断相关的方法,可以对一个字符串进行各种判断,这几个方法如下:

  • equals(): 判断两个字符串的内容是否相同;
  • equalsIgnoreCase(): 判断两个字符串是否相等,忽略大小写;
  • isEmpty(): 判断字符串是否为空串"",主要是判断字符串长度是否为0;
  • isBlank(): 判断字符串是否为空串"",主要是判断字符串中是否包含空白字符;
  • startsWith(): 判断字符串是否以指定的字符串开头;
  • endsWith(): 判断字符串是否以指定的字符串结尾;
  • contains(): 判断字符串中是否包含指定的字符串,参数是CharSequence类型,而不是String。
/**
 * @author 一一哥Sun
 * 千锋教育
 */
public class Demo05 {
    public static void main(String[] args) {
	String s1 = "yiyige";
	//判断两个字符串的内容是否相同
	System.out.println("yiYige".equals(s1));
	//判断两个字符串是否相等,忽略大小写
	System.out.println("yiyige".equalsIgnoreCase(s1));

	//判断字符串是否为空,或是否有空白字符
	//长度为0,字符串为空
	String s2="";
	//长度不是0,字符串不为空
	String s3=" ";
	//长度不是0,字符串不为空
	String s4=" \n";

	//判断字符串是否为空串""
	System.out.println("s2为空吗?"+s2.isEmpty());//true
	System.out.println("s3为空吗?"+s3.isEmpty());//false
	System.out.println("s4为空吗?"+s4.isEmpty());//false

	//判断字符串是否是空串或有空白字符
	System.out.println("s2为空吗?"+s2.isBlank());//true
	System.out.println("s3为空吗?"+s3.isBlank());//true
	System.out.println("s4为空吗?"+s4.isBlank());//true

	String s5 = "1234567890123";
	//判断字符串是否以指定的字符开头
	System.out.println(s5.startsWith("12"));

	//判断字符串是否以指定的字符串开头,并指定开始位置
	System.out.println(s5.startsWith("34", 2));

	//判断字符串是否以指定的字符串结尾
	System.out.println(s5.endsWith("23"));

	//判断字符串中是否包含指定的字符串
	System.out.println(s5.contains("SB"));
    }
}

4. 获取相关的方法

String字符串中提供了几个与字符串获取相关的方法,这几个方法如下:

  • charAt(): 获取指定下标位置上对应的字符,并返回char类型;
  • indexOf(): 获取指定字符串在原字符串中的下标索引位置,如果不包含该字符串则返回-1;
  • lastIndexOf() :该方法与indexOf()类似,但该方法是从后往前找,找到指定字符最后出现的位置;
  • length(): 该方法用于返回字符串对象中包含的字符数量,即可以获取字符串的长度。
/**
 * @author 一一哥Sun
 * 千锋教育
 */
public class Demo06 {
    public static void main(String[] args) {
	String s1 = "abcn12c3fcds";
	//charAt(index),获取指定下标位置上对应的字符,并返回char类型
	System.out.println("下标索引位置3上的字符是:"+s1.charAt(3));

	//indexOf("字符串"),获取指定字符串在原字符串中的下标位置,如果不包含该字符串则返回-1
	System.out.println("字符串的索引位置是:"+s1.indexOf("cn2"));

	//lastIndexOf("字符串"),与indexOf()方法类似,区别是该方法是从后往前找,找到指定字符最后出现的位置
	System.out.println("指定字符的索引为:"+s1.lastIndexOf("c"));

	//length(),获取字符串的长度
	System.out.println("字符串的长度是:"+s1.length());
    }
}

5. 拼接、替换、截取、分割、去空格等方法

String字符串中提供了拼接、替换、截取、分割等方法,这几个方法如下:

  • concat(): 将某个字符串连接到该字符串的结尾,并返回拼接后的字符串,相当于s1 = s1 + "world";
  • join(): 用指定的字符串连接字符串数组;
  • replace(): 将字符串中指定的字符串替换成指定的字符串;
  • replaceAll() :利用正则表达式,将字符串中指定的字符串替换成指定的字符串;
  • substring(start,end): 字符串截取,从指定的下标索引开始和结束,范围是左闭右开,注意索引是从0开始;
  • substring(index) 字符串截取,从指定的索引下标开始一直截取到字符串的最后;
  • split(): 字符串切割,按照指定的字符串对原字符串进行切割;
  • trim() :不改变原有字符串内容,只是去除字符串首尾的空白字符,包括空格、\t、\r、\n。
/**
 * @author 一一哥Sun
 * 千锋教育
 */
public class Demo07 {
    public static void main(String[] args) {
        //用指定的字符串连接字符串数组
	String[] arr = {"A", "B", "C"};
	String str = String.join("***", arr); // "A***B***C"
	System.out.println("新的字符串str="+str);
        String s1 = "hello,SB";
	//将字符串与指定的字符串进行拼接,相当于s1 = s1 + "world";
	s1 = s1.concat("world");
	System.out.println("新的字符串="+s1);

	//字符串替换:将字符串中指定的字符串替换成指定的字符串
	s1 = s1.replace("SB", "**");
	System.out.println("新的字符串="+s1);

        String s2 = "A,,B;C ,D";
        //利用正则表达式,将字符串中指定的字符串替换成指定的字符串;
	//通过正则表达式,把匹配的子串统一替换为","
	s2 = s2.replaceAll("[\,\;\s]+", ","); // "A,B,C,D"
	System.out.println("新的字符串s2="+s2);

	//字符串截取,从指定的下标开始和结束,范围是左闭右开
	s1 = s1.substring(0, 5);
	System.out.println("新的字符串="+s1);

	//字符串截取,从指定的下标开始一直截取到字符串的最后。
	//注意:StringIndexOutOfBoundsException
	s1 = s1.substring(3);
	System.out.println("新的字符串="+s1);

	//字符串切割,按照指定的字符串对原字符串进行切割
	String s2 = "zhangsan-lisi-wangwu";
	//利用指定的分隔符进行分割
	String[] s = s2.split("-");
	System.out.println(Arrays.toString(s));

        //去除字符串前后的空格
	String s3 = "      你好,       哈哈      ";
	s3 = s3.trim();
	System.out.println("新的字符串s3="+s3);
    }
}

6. 大小写转换的方法

String字符串中提供了将字符串转为小写、大写等方法,这几个方法如下:

  • toUpperCase(): 将字符串中的字母都变成大写;
  • toLowerCase(): 将字符串中的字母都变成小写。
/**
 * @author 一一哥Sun
 * 千锋教育
 */
public class Demo08 {
    public static void main(String[] args) {
	String s1 = "abcADC你好123";
	//将字符串中的字母变成大写
	System.out.println("转换后新的字符串="+s1.toUpperCase());
	//将字符串中的字母变成小写
	System.out.println("转换后新的字符串="+s1.toLowerCase());
    }
}

7. 字符串转数组的方法

String字符串中提供了将字符串转为字节、字符数组的方法,这几个方法如下:

  • getBytes(): 将字符串转变成字节数组;
  • toCharArray(): 将字符串变成字符数组。
/**
 * @author 一一哥Sun
 * 千锋教育
 */
public class Demo08 {
    public static void main(String[] args) {
	String s1 = "abcd你好";
        //将字符串转变成字节数组
	byte[] b = s1.getBytes();
	System.out.println(Arrays.toString(b));

	//将字符串变成字符数组
	char[] c = s1.toCharArray();
	System.out.println(Arrays.toString(c));
    }
}

8. 其他类型转字符串的方式

我们可以利用如下几种方式将其他类型转为String字符串:

  • 利用"+"号拼接: 通过拼接得到一个新的字符串对象;
  • valueOf()方法: 将其他的类型的数据转换成String类型;
  • 构造方法:也可以使用字符串对应的构造方法,将字节、字符数组类型转为字符串对象,效率较低。
/**
 * @author 一一哥Sun
 * 千锋教育
 */
public class Demo08 {
    public static void main(String[] args) {
	//其他类型转字符串的方式
	int i = 10;

	//方式1:利用+号进行转换
	String s1 = i+"";
	System.out.println("整形转字符串s1="+s1);

	//方式2:将其他的类型的数据转换成String类型
	String s2 = String.valueOf(i);
	System.out.println("整形转字符串s2="+s2);

	//方式3:将字节数组转为字符串
	byte[] nums= {97, 98, 99, 100};
	String s3=new String(nums);
	System.out.println("整形转字符串s3="+s3);
    }
}

9. 格式化字符串的方法

除了以上这些方法之外,String还提供了几个可以用于格式化字符串的方法,如下:

  • format(): 可以将字符串进行格式化操作。
/**
 * @author 一一哥Sun
 * 千锋教育
 */
public class Demo09 {
    public static void main(String[] args) {
	//实例方法:String对象.format()
        //%d、%s、%.2f都是占位符
	String s = "恭喜你,%s, 你的得分是:%d!";
        System.out.println(s.formatted("壹壹哥", 99));

        //静态方法:String类.format()
        System.out.println(String.format("恭喜你,%s, 你的成绩是:%.2f!", "一一哥2", 46.5));
    }
}

在上面的案例中,涉及到了几个占位符,主要是配合参数进行格式化。当使用占位符时,就需要参数类型要和占位符要求的一致。常用的占位符含义如下:

  • %s 表示字符串;
  • %d 表示整数;
  • %x 表示十六进制整数;
  • %f 表示浮点数。

另外占位符还可以带格式,例如%.2f是表示显示两位小数。如果你不确定到底该用哪个占位符,可以选择使用%s,因为%s可以显示任何数据类型。

以上这些方法,就是String字符串中的一些常用方法,当然并不是全部的方法。

三. 结语

至此,String字符串对象的定义方式,以及String类中常用的API方法给大家介绍完了,我们要掌握本文的重点内容,比如:

  • 掌握String对象的定义方式;
  • 掌握字符串对象的比较方式;
  • 掌握字符串判空的方式及方法;
  • 了解java中的常用占位符;
  • 掌握其他重要方法。

以上就是Java之一文详解String字符串的用法的详细内容,更多关于Java String字符串用法的资料请关注我们其它相关文章!

(0)

相关推荐

  • JAVA中截取字符串substring用法详解

    substring public String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串.该子字符串始于指定索引处的字符,一直到此字符串末尾. 例如: "unhappy".substring(2) returns "happy" "Harbison".substring(3) returns "bison" "emptiness".substring

  • Java字符串拼接新方法 StringJoiner用法详解

    Java中如何输出像1-2-3-4-5 这样的字符 抱歉对于这个问题我甚至不能想到一个合适的标题,但是不重要 以下操作基于 jdk 1.8 StringJoiner sj = new StringJoiner("-", "", ""); sj.add("1").add("1").add("2"); String desiredString = sj.toString(); 在1.8版本中

  • Java字符串相关类StringBuffer的用法详解

    目录 一.StringBuffer 介绍 二.方法详解 1.构造方法 2.增 StringBuffer append(…) 3.删 StringBuffer delete(int start,int end) 4.改 StringBuffer replace(int start,int end,String str) 5.插入 StringBuffer insert(int offset, · · · ) 6.反转 StringBuffer reverse() 一.StringBuffer 介绍

  • Java String类简单用法实战示例【字符串输出、比较】

    本文实例讲述了Java String类简单用法.分享给大家供大家参考,具体如下: 一 String类的实例化方式 1 代码 public class NewString { public static void main(String args[]) { String str1= "Hello World!"; // 直接赋值建立对象str1 System.out.println("str1:" + str1) ; //输出 String str2 = new St

  • JAVA中字符串函数subString的用法小结

    String str;str=str.substring(int beginIndex);截取掉str从首字母起长度为beginIndex的字符串,将剩余字符串赋值给str: str=str.substring(int beginIndex,int endIndex);截取str中从beginIndex开始至endIndex结束时的字符串,并将其赋值给str; demo: 复制代码 代码如下: class Test { public static void main(String[] args)

  • Java 常量池详解之字符串常量池实现代码

    目录 1.字符串常量池(String Constant Pool) 1.1:字符串常量池在Java内存区域的哪个位置? 1.2:字符串常量池是什么? 1.3 字符串常量池生成的时机? 如何将String对象放入到常量池 String 对象代码案例解析 new string(“abc”)创建了几个对象 解析public native String intern() 方法 Integer 对象代码案例解析 为啥Integer i1 =10 跟Integer.valueOf(10) 是相等的? 为啥I

  • 一文详解Java中字符串的基本操作

    目录 一.遍历字符串案例 二.统计字符次数案例 三.字符串拼接案例 四.字符串反转案例 五.帮助文档查看String常用方法 一.遍历字符串案例 需求:键盘录入一个字符串,使用程序实现在控制台遍历该字符串 思路: 1.键盘录入一个字符串,用 Scanner 实现 2.遍历字符串,首先要能够获取到字符串中的每一个字符 public char charAt(int index):返回指定索引处的char值,字符串的索引也是从0开始的 3.遍历字符串,其次要能够获取到字符串的长度 public int

  • 一文详解Java线程的6种状态与生命周期

    目录 1.线程状态(生命周期) 2.操作线程状态 2.1.新创建状态(NEW) 2.2.可运行状态(RUNNABLE) 2.3.被阻塞状态(BLOCKED) 2.4.等待唤醒状态(WAITING) 2.5.计时等待状态(TIMED_WAITING) 2.6.终止(TERMINATED) 3.查看线程的6种状态 1.线程状态(生命周期) 一个线程在给定的时间点只能处于一种状态. 线程可以有如下6 种状态: New (新创建):未启动的线程: Runnable (可运行):可运行的线程,需要等待操作

  • 一文详解Java线程中的安全策略

    目录 一.不可变对象 二.线程封闭 三.线程不安全类与写法 四.线程安全-同步容器 1. ArrayList -> Vector, Stack 2. HashMap -> HashTable(Key, Value都不能为null) 3. Collections.synchronizedXXX(List.Set.Map) 五.线程安全-并发容器J.U.C 1. ArrayList -> CopyOnWriteArrayList 2.HashSet.TreeSet -> CopyOnW

  • 一文详解Java中Stream流的使用

    目录 简介 操作1:创建流 操作2:中间操作 筛选(过滤).去重 映射 排序 消费 操作3:终止操作 匹配.最值.个数 收集 规约 简介 说明 本文用实例介绍stream的使用. JDK8新增了Stream(流操作) 处理集合的数据,可执行查找.过滤和映射数据等操作. 使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询.可以使用 Stream API 来并行执行操作. 简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式. 特点 不是数据结构

  • 一文详解Java中的Stream的汇总和分组操作

    目录 前言 一.查找流中的最大值和最小值 二.汇总 三.连接字符串 四.分组 1.分组 2.多级分组 3.按子组数据进行划分 后记 前言 在前面的文章中其实大家也已经看到我使用过collect(Collectors.toList()) 将数据最后汇总成一个 List 集合. 但其实还可以转换成Integer.Map.Set 集合等. 一.查找流中的最大值和最小值 static List<Student> students = new ArrayList<>(); ​ static

  • 一文详解Java中流程控制语句

    目录 概述 判断语句 if if...else if..else if...else if语句和三元运算符的互换 选择语句 switch case的穿透性 循环语句 for while do...while for 和 while 的小区别 跳出语句 break continue 死循环 嵌套循环 概述 在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的.也就是说,程序的流程对运行结果有直接的影响.所以,我们必须清楚每条语句的执行流程.而且,很多时候我们要通过控制语句的执行顺序

  • 一文详解Java中的类加载机制

    目录 一.前言 二.类加载的时机 2.1 类加载过程 2.2 什么时候类初始化 2.3 被动引用不会初始化 三.类加载的过程 3.1 加载 3.2 验证 3.3 准备 3.4 解析 3.5 初始化 四.父类和子类初始化过程中的执行顺序 五.类加载器 5.1 类与类加载器 5.2 双亲委派模型 5.3 破坏双亲委派模型 六.Java模块化系统 一.前言 Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最 终形成可以被虚拟机直接使用的Java类型,这个过程

  • 一文详解Java闭锁和栅栏的实现

    目录 题目描述 -闭锁 题目 解题思路 代码详解 题目二描述 :栅栏 题目 解题思路 代码详解 题目描述 -闭锁 题目 有3个线程,线程A和线程B并行执行,线程C需要和线程A和B执行完成后才能执行,使用闭锁CountDownLatch实现 解题思路 创建一个类 :Abc Test CountDownLatch初始化值为2 新增 A B线程,在线程里执行逻辑后,计算-1 countDownLatch.countDown() 新增C线程,等待A,B线程来完成 countDownLatch.await

  • 一文详解Java如何创建和销毁对象

    目录 一.介绍 二.实例构造(Instance Construction) 2.1 隐式(implicitly)构造器 2.2 无参构造器(Constructors without Arguments) 2.3 有参构造器(Constructors with Arguments) 2.4 初始化块(Initialization Blocks) 2.5 构造保障(Construction guarantee) 2.6 可见性(Visibility) 2.7 垃圾回收(Garbage collect

随机推荐