基础知识(下)"/>
Java语言的一些基础知识(下)
Java语言的一些基础知识(下)
目录
字符串
输入与输出
控制流程
大数
数组
字符串
从概念上讲,Java字符串就是Unicode字符序列。Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类,很自然地叫做String
//字符串"Java\u2122"由5个Unicode字符 J,a,v,a和 ™ 组成
String e ="";//an empty string
String greeting = "hello";
子串
String类的substring方法可以从一个较大的字符串中提取出一个子串。
Java字符串中的代码单元和代码点从0开始计数
String greeting = "hello";
String s = greeting.substring(0,3);//长度为后者减去前者,即3-0=3
//substring从0开始计数,直到3为止,但不包括3,这里输出的值是"hel"
拼接
Java语言允许使用 + 号连接(拼接)两个字符串。
当一个字符与一个非字符的数据进行拼接时,后者会转换为字符串(任何一个Java对象都可以转换为字符串),这种特性通常用在输出语句中。
如果需要把多个字符串拼接在一起,用一个界定符分隔,可以使用静态join方法
String a = "Just";String b = "Beefcake";String c = a + b;System.out.println(c);//输出结果为JustBeefcakeint age = 20;String K = "ThatYear" + age;System.out.println(K);//输出结果为ThatYear20String all = String.join("/","handsome","brilliant","smart");System.out.println(all);//输出结果为handsome/brilliant/smart
不可变字符串
String类中没有提供修改字符串中某个字符的方法,所以Java文档中间String类对象称为是不可变的。如此便体现出一个优点:编译器可以让字符串共享。
如需要将上述代码中 b 的值改变为"Beef!",不能直接将它的后面四个字符修改为’!’,这里可以使用上面讲过的字符串的拼接。
检测字符串是否相等
可以使用equal方法检测两个字符串是否相等,如果两个字符串相等,则返回true,否则,返回false。
String m = "hello";String n = "hello";boolean b = m.equals(n);boolean c = "hello".equals(n);//字符串可以是变量,也可以是常量System.out.println(b);//输出结果为trueSystem.out.println(c);//输出结果为true
注意:一定不要使用"=="运算符去检测两个字符是否相等! 这个运算符只能够确定两个字符串是否存在同一个位置上。
空串与Null串
空串""是长度为0的字符串,它是一个Java对象,有自己的串长度(0)和内容(空)。
String变量还可以存放一个特殊的值,名为null,表示目前没有任何对象与该变量关联。
if(str.length()==0)或if(str.equals(""));//检验字符串是否为空
if(str == null)或if(str.length() != 0 && str != null)//检验字符串既不为空也不为Null
输入与输出
读取输入
将输出打印到"标准输入流"(即控制窗口)是一件很容易的事情,只要调用
System.out.println
即可。读取"标准输入流"就不是一件很简单的事情了。要从控制台输入,首先要构造一个与"标准输入流"System.in关联的Scanner对象。
public static void main(String[] args) {Scanner in = new Scanner(System.in);System.out.println("what is you name?");String name = in.nextLine();//输入行中可能包含空格,所以要用nextLine()方法System.out.println(name);String firstName = in.next();System.out.println(firstName);String lastName = in.next();System.out.println(lastName);}
//输出结果为:
XiHai Shenge//输入
XiHai Shenge//输出
XiHai Shenge//输入
XiHai//输出
Shenge//输出//上面第二次采用next()输入时,中间包含了空格,第二次输入就此中断,空格之后就是第三次输入
格式化输出
Java 5 沿用了C语言函数库中的printf方法,每一个以%字符开始的格式说明符都用相应的参数代替,格式说明符尾部的转换符指示要格式化的数据的类型:
转换符 | 类型 | 示例 |
---|---|---|
f | 浮点数 | 5.33 |
c | 字符 | A |
s | 字符串 | xiHai |
d | 十进制整数 | 500 |
o | 八进制整数 | 237 |
x | 十六进制整数 | 8f |
e | 指数浮点数 | 1.59e+01 |
n | 与平台有关的换行符。 |
另外,我们经常会看到在语句中会出现这样的字段"%8.2f",这表示的是所要输出的数据的宽度为8个字符,另外精度为小数点后2个字符。
public static void main(String[] args) {System.out.printf("%.3f\n", 10.0 / 3.0);//3.333System.out.printf("%tF\n", new Date());//2021-03-23}
//tF这里用到了日期和时间的转换符,大家可自行翻阅相关书籍
文件输入与输出
请自行搜索数据流和File类的相关知识和用法
控制流程
Java 的控制流程结构与C/C++的流程控制一样,只有很少例外情况。Java中没有goto语句,但break语句可以带标签,可以利用它从内层循环跳出。
块作用域
块(即复合语句)是指由若干条Java语句组成的语句,并用一对大括号括起来。块确定了变量的作用域,并且块可以嵌套使用。但是不能再嵌套的块中声明同名的变量。
条件语句
在Java中条件语句的格式为
if(aondition) {statement1;....;}else{statement5;......}
,这里的条件必须用小括号括起来,可单独用if语句,y也可if else语句,还可以进行嵌套使用。
循环
for 循环:
初始表达式可以省略,但必须保留分号(😉,条件表达式一般不可省略,极有可能造成无限循环。
循环表达式也可以省略,但循环体中要有能够使循环变量中能够正常结束的条件。
for循环确定了循环次数,而while/do while没有
初始表达式,循环表达式可以使用逗号表示,如初始化多个变量等。
if(初始表达式;条件表达式;循环变量表达式){循环语句;
}
while循环:
在最前面检验循环条件,因此循环体中的代码有可能一次都不执行。
while(条件表达式){循环语句;循环变量表达式;
}
do while循环:
这种循环语句先执行语句,再检测条件,循环中语句必执行一次。
do{循环语句;
}while(条件表达式);
多重选择语句:switch语句
在处理多个选项是,使用if/else语句显得有些笨拙,Java中提供了与C/C++中一样的switch语句。
switch语句从与选项值(常量表达式)相匹配的case标签开始执行直到遇到break语句或执行到switch语句的结束为止为止。如果没有相匹配的case标签,而又default子句,就执行这个子句。
在case语句末尾没有break;将会接着执行下一个case语句。
switch(表达式){case 常量表达式:语句序列;break;case 常量表达式:语句序列;break;......
}
中断控制流程的语句
break 语句
public static void main(String[] args) {int month = 3;while(month <12) {int value = 12 - month;System.out.println("New Year's Day is still " + value + "months away!");if (month == 6) {System.out.println("Let's take a summer vacation");break;//不带标签的break语句,跳出循环}month++;}}
public static void main(String[] args) {int m = 0;int n = 0;label://用冒号while(true){System.out.println("循环1");while(true){System.out.println("循环2");while(true){System.out.println("循环3");if ( m*n == 36){break label;//带标签的break语句,跳转到标记处}n++;m++;}}}}
continue 语句
将控制转移到最内层循环的首部。
public static void main(String[] args) {Scanner in = new Scanner(System.in);for (int count = 1;count <= 10;count++){System.out.println("请输入一个正数");int n = in.nextInt();if (n < 0)continue;//continue跳转到count++int sum = 0;sum += n;System.out.println(count);}}
/*控制台的输出结果为
请输入一个正数
-2
请输入一个正数
-1
请输入一个正数
0
3*/
大数
如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中两个很有用的类:BigInteger和BigDecimal,这两个类可以处理包含任何长度数字序列的数值。BigInteger实现任何精度的整数运算,BigDecimal实现任何精度的整数运算。
BigInteger a= BigInteger.valueOf(100);//静态valueOf方法将普通数值转换为大数
BigInteger reallyBig = new BigInteger("1232423421345465768983766876598978609");
//对于更大的数,可以使用一个带字符串参数的构造器
BigInteger b= BigInteger.valueOf(260);
BigInteger c = a.add(b);//c = a + b
BigInteger d = c.multiply(b.add(BigInteger.valueOf(2)));//d = c*(b+2)
不能使用算术运算符处理大数,而是要使用大数类中的add和multiply方法
数组
数组存储相同类型的数列。
声明数组
数组是一种数据结构,用来存储同一类型值的集合,通过数组下标可以访问数组中的每一个值。
在声明数组时,需要指出数组类型和数组变量名字。如
int[] a 或 int a[]
,但是这只是声明了变量a,而没有将a初始化为一个真正的数组,应该使用new操作符创建数组。
int[] a = new int[];//声明并初始化一个可以存储100个整数的数组
int[] smallPrimes = {2,3,4,5,6,7,8,9};//简写形式
new int[] {23,45,37,89}//匿名数组
smallPrimes = new int[] {23,45,37,89}//重新初始化一个数组而无需创建新变量
还有一种创建数组对象并同时提供初始值的简写形式,如上smallPrimes。这里不需要使用new,也不需要指定长度。
还可以声明一个匿名数组。
在数组中允许有长度为0的数组,它与null并不一样。访问数组元素。
访问数组元素
创建数组元素时,所有元素都初始化为0。boolean数组的元素会初始化为false。对象数组的元素则会初始化为一个特殊的值null,表示这些元素还未存放任何对象。
public static void main(String[] args) {int[] a = new int[10];for (int i = 0; i < 10; i++) {a[i] = i;//数组的遍历和赋值System.out.println(a);//输出数组元素的首地址System.out.println(a[i]);//输出数组元素的值}int count = a.length;//获取数组中元素个数,即数组长度System.out.println(count);}
for each 循环
增强for循环,可以用来依次处理数组中的每一个元素,而不必考虑指定下标志
格式:
for(variable: collection) statement
。其中collection这一集合表达式必须是一个数组或一个实现了Iterable接口的类对象。
public static void main(String[] args) {int[] a = new int[10];for (int element :a) {System.out.println(element);//输出10个数都是独占一行且值为0}}
for each循环更加简洁、更不易出错,不必为下标的起始值和终止值而操心。
多维数组
多维数组使用多个下标访问数组元素,适用于表示表格或更加复杂的排列形式。
二维数组的定义格式为:
<类型标识符> 数组名[行元素个数][列元素个数]
,可以利用循环嵌套的方式对其进行遍历和赋值。for each 循环语句不能自动处理二维数组的每一个元素,它会循环处理行,要想处理整个数组,同样需要嵌套。
三维数组也是这样的处理方式。
返回顶部
更多推荐
Java语言的一些基础知识(下)
发布评论