书接上回,该轮到基本数据类型了。
另外,上一章的文字连接在这里:
目录
一、数字
1.数字类型
类型 | 描述 | 大小 |
int | 整数类型(-2147483648~2147483647) | 4字节 |
byte | 描述一个单字节的类型(-128~127) | 1字节 |
short | 短整数类型(-32768~32767) | 2字节 |
long | 长整数类型 | 8字节 |
double | 双精度浮点数( | 8字节 |
float | 单精度浮点数( | 4字节 |
char | 字符类型 | 2字节 |
boolean | 有两个类型,true和false | 1位 |
int a = -6 ;
// 这里的a的可以是正负值,也可以是0
double b=2.96E-2
// 这里b的意思是2.96*10^(-2)
// 这里b也可以是1.0或0.5
2.常量
程序员是非常讨厌“魔法数”的,什么是“魔法数”?就是说有些东西,当你去透彻了解一个程序的原理后,你很容易理解,但是初识的时候很容易看不明白。比如这里直接说:c=a*24,那么问题来了。这里的24是什么意思?看不懂吧!实际上它是一天有24小时的意思,如果我们这样:int DAY_HOURS=24;但请记住,这个时候我们仍然认为这是变量。
注意,编程中总有一些变量的值是希望保持不变的,这就需要用到保留字final使之成为常量。并且吧,程序员习惯之中还有一条不言的规则:final后用全大写的字母名字,如final int DAY_HOURS
一个类里面很可能包含多个方法,而这些方法也会有一些是共享常量的。那么statics这个保留字就是用来表示这个常量是属于这个类的。
再思考一下,一些常量难道只有一个类可以使用吗?如果共享会不会有危险?答案是有的情况下,多个类会共享常量,而且这样的举动不会有危险——因为常量嘛,所以就不会被改变。这要怎么实现呢?使用public就可以了。
public static final int DAY_HOURS=24;
二、算术运算
1.算数操作符
Java支持4个基本算术运算(加+、减-、乘*、除/),如果要改变优先级,就可以使用括号()。另外,如果在一个算术表达式中混合整数和浮点数,那么结果是浮点数。例如,7+4.0=11.0。
2.运算
// 自增自减是比较常见的用处
count++;
count--;
// 整除&求余
// 如果/的两个参数都是整数,余数将被丢弃
7.0 / 4.0
7 / 4.0
7.0 / 4
//答案都是1.75
7 / 4
// 答案是1
7 % 4
// 取余答案是3
-19 % 10
// 取余答案是-9
三、输入与输出
1.读取输入
如果让用户提供输入而不是我们早已经指定好的值,那么我们的程序将会更加灵活。这个在Python里面是input,但是在Java里面就比较麻烦了。
之所以麻烦是因为最初设计Java的时候,没有太注意键盘输入。当时认为所有程序员都会生成带有文本框和菜单的用户图形界面。所以只为System.in提供了最低限度的一组特性,这导致必须结合其他类,才能真正发挥作用。
// 举一个实例
import java.util.Scanner;
public class E_Thirteen {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Please enter an integer 1,000 and 999,999: ");
String input_num = in.nextLine();
// nextLine()其实和next()都是读取字符串的,但是前者会自动去除第一个有效字符前的空串
// 除了nextLine(),还有其他数据类型的可输入选项,nextInt()、nextDouble
String output_num = input_num.replace(",", "");
System.out.println(output_num);
in.close();// 如果不加这个的话,Scanner in = new Scanner(System.in);,这行代码会飘黄,资源泄漏问题还是比较严重的。
}
}
//运行结果是
Please enter an integer 1,000 and 999,999: 2,200
2200
2.格式化输出
如果希望输出的是格式化的,最起码要有这样的语句:
System.out.printf();
// f就是format的意思
如果限制输出的小数点后的位数且对输出的占位有要求的话:
System.out.printf("%10.2f",1.21596);
// 结果就是1.22占4位,并且前面会有6个空格占6位
当然了也可以同时打印多个值:
System.out.printf("Chinese Scores:%d Math Scores: %10.2f",123,157.123);
此处还有一些使用规范:
格式串 | 说明 |
"%5d" | 对整数使用d,且占位为5 |
"%7.2f" | 对浮点数使用,且占位为7 |
"%s" | 对字符串使用 |
四、字符串
1.String类型
String name = "abcd";
// 字符串变量是name
// 字符串字面量是"abcd"(用引号包围的字符串序列)
2.字符串连接
String First_Name = "Porter";
String Last_Name = "Harry";
String Name = Last_Name + Last_Name;
// 这得到的结果是"HarryPorter"
String Name = Last_Name + " " + Last_Name;
// 这得到的结果是"Harry Porter"
实际上,还有一些小细节。比如,字符串与数字连接,结果就直接是字符串。
3.转义序列
有些我们想要表达的内容,可能会与java语言本身有冲突,那么就需要转义了。比如我们想要打印一句:他在计算机上输出"hello,world"来表达初次接触计算机世界的喜悦。那么那一对双引号就麻烦了,该怎么让计算机识别呢?这样就行:
System.out.printf("他在计算机上输出\"hello,world\"来表达初次接触计算机世界的喜悦");
这个反斜杠\就是转义字符了,只需要在需要转义的内容前用它就可以了。
另一个常见的像\n就表示换行
4.与字符的区别
字符串是Unicode字符序列,在Java里面,字符是char类型的一个值。事实上,字符是有数值的,它的编码有数字的。
并且有一个比较容易区分的是:字符的字面量是用单引号界定。'H'是一个字符,char类型的数值;"H"是一个包含单字符的字符串,是String类型的。
另外还有一个比较实用的方法是charAt()方法,括号内的参数是索引值,索引的位置范围是字符串的位置范围:
String Greeting = "hello,world";
char Start = Greeting.charAt(0);
//结果是'h'
5.子串
主要是对substring方法的运用:
String Greeting = "hello,world";
String sub = Greeting.substring(0,5);
// sub是"hello"
// 0所处的参数位置填充的表示开始的字符位置
// 5所处的参数位置填充的表示结束的字符位置,且不包含这个字符
String tail = Greeting.substring(7);
// 表示从7开始到后面所有的