Java的字符串、数组与流程控制
视频链接: 无
—— Aiden & 涩谷第一情弱
字符串
我们先复习一下Java的字符类型数据的创建与使用:
1 | char c = 'a'; |
那么我们如何创建字符串类型数据呢?
简单创建
我们先回忆下C语言的字符串创建:
1 | char a1[5] = {'S', 'A', 'S', 'T', '\0'}; |
c语言中用字符数组来代替c语言字符串的表达。
Java字符数组和c语言的有些差别
- Java字符串不需要显式以null终止字符(‘\0’)来标志字符串的结束。
- Java无法和c语言一样让字符数组用字符串直接赋值给字符数组。可以用String对象来赋值。(后面会讲)
- Java字符数组长度可以动态变化,不需要提前指定大小。
1
2
3char a1[] = {'S', 'A', 'S', 'T'};// 不需要'\0'和指定长度
System.out.println(a1);
// char a2[] = "hello"; 不能运行,会报错
String对象使用
基本使用
相比使用字符数组而言,在Java中,使用String对象来表示字符串更为常用。现在先不用知道类与对象的意思,把String当成char数组就行了。
1 | String s = ""; // 空字符串,包含0个字符,注意String首字母要大写 |
转义字符
因为字符串使用双引号”…”表示开始和结束,那如果字符串本身恰好包含一个”字符怎么表示?例如,”abc”xyz”,编译器就无法判断中间的引号究竟是字符串的一部分还是表示字符串结束。这个时候,我们需要借助转义字符\:
1 | String s = "abc\"xyz"; // 包含7个字符: a, b, c, ", x, y, z |
常见的转义字符包括:
- \“ 表示字符”
- \‘ 表示字符’
- \\ 表示字符\
- \n 表示换行符
- \r 表示回车符
- \t 表示Tab
- \u#### 表示一个Unicode编码的字符
例如:1
String s = "ABC\n\u4e2d\u6587"; // 包含6个字符: A, B, C, 换行符, 中, 文
字符串长度
String对象有length()方法,返回String对象包含的字符数。
1 | String site = "Hi SAST"; |
字符串拼接
Java的编译器对字符串做了特殊照顾,可以使用+连接任意字符串和其他数据类型,这样极大地方便了字符串的处理。例如:
1 | String s1 = "Hello"; |
如果用+连接字符串和其他数据类型,会将其他数据类型先自动转型为字符串,再连接:
1 | int age = 25; |
另一种字符串创建方法
用构造函数创建字符串:
1 | String s=new String("Hello"); |
String 创建的字符串存储在公共池中,而 new 创建的字符串对象在堆上:
1 | String s1 = "Runoob"; // String 直接创建 |
我们可以看到这里有个关键字 new,这是我们创建对象时使用的,类和对象我们先按下不表,后面课程我们会有面向对象的更详细的说明。 现在我们只要知道这个关键字可以这样使用就行了。
String 创建的字符串存储在公共池中,而 new 创建的字符串对象在堆上:

Java注释
Java的注释支持三种形式,示例如下:
1 | /** |
Java数组
数组操作和c语言差不多,这里讲讲和c语言的区别。
Java 可以使用 new 操作符来创建数组。
1 | dataType[] arrayRefVar = new dataType[arraySize]; |
获取数组长度(和String一样)
1 | int[] a = {9,10,11}; |
多维数组的定义方式
1 | int[][] a = new int[2][2]; |
循环结构
和大家已经学习过的C语言一样,Java也有while、do-while、for循环等结构,除判断条件转为使用布尔表达式外,用法以及结构与C都基本相同;不同地,Java 5开始引入了增强for循环(for-each),使得for循环更加易读易写。
我们主要介绍增强for循环,它的语法是这样的:
1 | for(声明语句 : 表达式) { |
我们用一个实例演示,假设我们已经初始化了一个int型数组numbers ,并且值初始化为0,现在要使用增强for循环把数组所有成员的值修改为1:
1 | for(int number:numbers){ |
然而这样并不能改变数组内的值。
条件语句
和c语言几乎差不多,但也有一点点区别。
数据类型:
在c语言中,可以用0和非零值来表示false和true。而在Java中,只能用boolean类型或者对象来表示。
1 | // if(0){} 报错 |

块范围:
在Java中,条件语句的每个代码块建议都要用花括号括起来,即使只有一行代码也建议使用括号。
在示例中,a在没有花括号的条件语句内声明,会报错。因为只执行变量声明这一行,不能在条件语句之后的语句使用这个变量,这个变量是没用的。
1 | if(true) int a = 0; // 不允许声明 |

命名规范
Java作为一门成熟的编程语言,已经被应用在现代程序设计的方方面面,通常情况下这些工程项目代码量是巨大的,如果没有统一的命名规范,那么对于这样庞大的工程来说就是灾难。
举个例子:
1 |
|
如果不透露具体的业务细节,很难猜出这个类及内部变量的含义,容易造成编写时的出错和维护时的困难。在一般情况下,命名应使用英文表达其含义,汉语拼音及缩写原则上是不允许出现在代码中的;除此之外,驼峰命名法也需要应用在你的命名中。

Java的命名规范是很细致准确的,由于篇幅和时间原因,这里不做展开,感兴趣的同学可以访问这篇博客Java 命名规范大全 | w3c笔记 (w3cschool.cn)
断点调试
适用场景
可以让代码逐行执行,查看代码执行的过程,调试程序中出现的bug。
使用
- 先打断点:点击想要打断点的代码行的左侧,显示出红点及打断点成功。
1 | int[] a = new int[4]; |

- 进入调试模式(Debug模式):点击位于IDEA右上角的绿色虫子

- 在IDEA下方能看到变量信息等

- 在“控制台”字样的右侧是调试操作。可以分别点击看看会发生什么。

单步执行(Step Over):就是一行一行的执行代码,但不一定会进入到所调用的代码里面,比如说,new了一个对象,但不一定会进入该对象构造方法里面。
单步进入(Step Into):就是调用了一个时,单步进入会进入到该方法里面,除非此方法上有断点,否则单步执行的时候不会进去,要想进去,又不想打断点,就用单步进入吧。
强制进入(Force Step Into):当调用了一个类库方法时候,强制进入会进入到该类库的方法里面,哪怕是class代码,这一般没必要,所以必须强制才能进去。
单步退出(Step Out):就是跳出断点,比如,当单步进入到一个方法里面时候,发现没有调试必要,点单步退出就跳出此方法到断线下一行。或者在一个断点上点单步退出,就忽略该断点执行到下一个断点。单步退出并非退出程序,更不是越过一行或者几行不执行,而仅仅只是停止调试,让程序继续往下执行。
在调试器左侧还有一排按钮,常用的有如图所示那几个。

分别对应重新运行、恢复程序、停止、查看断点、恢复断点。可以自己都点一下看看。