[Java核心技术 卷1] 基础知识
目录
1、第一个java程序
public class FirstExample {
public static void main(String[] args) {
System.out.println("HelloWorld!");
}
}
注意:
- System.in和System.out是java的标准输入输出
- println()和print()方法代表输出到控制台,但是println()代表输出后自动换行,而print()不换行
- java中的main方法都默认定义为static方法(静态方法),只有这样,当程序运行时,main才能自动被初始化并加载
2、java的注释
java中有三种注释的方式:
- 最常用的是使用//
- 需要长篇注释时,可以使用 /* 和 */ 将一段比较长的注释括起来
- 需要自动生成文档时,可以以 /** 开始,以 */ 结束
注意:
在Java 中,/* */ 注释不能嵌套。也就是说,如果代码本身包含了一个*/,就不能
用/* 和*/ 将注释括起来。
3、java的数据类型
整数:
Java 提供了4 种整型,具体内容如图所示:
在通常情况下,int 类型最常用。但如果表示星球上的居住人数,就需要使用long 类型
了。byte 和short 类型主要用于特定的应用场合,例如,底层的文件处理或者需要控制占用
存储空间量的大数组。
长整型数值有一个后缀L(如4000000000L)。十六进制数值有一个前缀0x(如
0xCAFE)。八进制有一个前缀0,例如,010 对应八进制中的8。很显然,八进制表示法比较
容易混淆,所以建议最好不要使用八进制常数。
浮点数:
浮点类型用于表示有小数部分的数值
由于float的精度很难满足要求,所以绝大部分应用程序都采用double 类型。
char类型数:
char 类型用于表示单个字符。通常用来表示字符常量。
例如:'A' 是编码为65 所对应
的字符常量。与"A" 不同,"A" 是一个包含字符A 的字符串。
除了可以采用转义序列符\u 表示Unicode 代码单元的编码之外,还有一些用于表示特殊
字符的转义序列符,如图:
布尔类型数:
boolean(布尔)类型有两个值:false 和true,用来判定逻辑条件。整型值和布尔值之间
不能进行相互转换。
注:java和c++不同,不能使用0和1来代表true和false
4、java的变量
在Java 中,每一个变量属于一种类型(type)。在声明变量时,变量所属的类型位于变量
名之前。这里列举一些声明变量的示例:
注意:java没有void类型
5、运算符
关于运算符的介绍,大家可以参考这篇文章:
https://blog.****.net/qq_39326137/article/details/80456717
6、字符串
java中字符串用关键字String表示,定义一个字符串如下:
String test = "MyTest";
1、字符串拼接:
与绝大多数的程序设计语言一样,Java允许使用 + 号连接字符串或者数字,构成一个新的字符串
2、检测字符串是否相等:
s.equals(t);
如果s和t相等,则返回true,否则返回false
注意:
一定不能使用 == 运算符检测两个字符串是否相等!这个运算符只能够确定两个字符串
是否放置在同一个位置上。当然,如果字符串放置在同一个位置上,它们必然相等。但是,
完全有可能将内容相同的多个字符串的拷贝放置在不同的位置上。
3、空串和null串:
空串"" 是长度为0 的字符串
null串表明,没有任何对象与该变量有关联
要检查一个字符串既不是null串,也不是空串,应该这样子:
if(str != null && str.length() != 0)
4、不可变字符串:
String类的对象是不可变的字符串,是存在于堆中的对象,而String变量是指向堆内存String字符串的变量。
我们不能直接改变字符串本身,但是如果需要获取字符串的子字符串时,我们可以使用String类的方法substring(int beginIndex, int endIndex)来获取从第beginIndex位到endIndex位的子字符串。
5、代码点和代码单元:
代码点(Code Point)就是指Unicode中为字符分配的编号,一个字符只占一个代码点,例如我们说到字符“汉”,它的代码点是U+6C49.代码单元(Code Unit)则是针对编码方法而言,它指的是编码方法中对一个字符编码以后所占的最小存储单元。例如UTF-8中,代码单元是一个字节,因为一个字符可以被编码为1个,2个或者3个4个字节;在UTF-16中,代码单元变成了两个字节(就是一个char),因为一个字符可以被编码为1个或2个char(你找不到比一个char还小的UTF-16编码的字符,嘿嘿)。说得再罗嗦一点,一个字符,仅仅对应一个代码点,但却可能有多个代码单元(即可能被编码为2个char)。
以上概念绝非学术化的绕口令,这意味着当你想以一种统一的方式指定自己使用什么字符的时候,使用代码点(即你告诉你的程序,你要用Unicode中的第几个字符)总是比使用代码单元更好(因为这样做的话你还得区分情况,有时候提供一个16进制数字,有时候要提供两个)。"
6、字符串 API:
String类的API很多,这里就不一一列举了,推荐给大家一个很好的在线的、中文版jdk文档:
http://tool.oschina.net/apidocs/apidoc?api=jdk-zh
7、构造字符串:
有时候,需要由较短的字符串来构建字符串,使用字符串连接的方式效率比较低,这时候,StringBuffer和StringBuilder的append()方法就能派上很大用场了。
str.append(test); //表示在字符串str后面接上test字符串
如果需要构建字符串就调用toString()方法,就可以得到一个String对象。
注:
StringBuffer和StringBuilder的区别:
StringBuffer(适合用于多线程)是线程安全的可变字符序列,而StringBuilder(适合用于单线程)是线程不安全的可变字符序列。
7、输入输出
1、读取输入
要想通过控制台进行输入,首先需要构造一个 Scanner 对象,并与“标准输入流”System.in 关联。
Scanner in = new Scanner(System.in);
下面是Scanner类的常用方法:
注:
因为输入是可见的,所以 Scanner 类不适用于从控制台读取密码
想要读取密码,我们可以使用Console 类:
Console cons = System.console();
String userName = cons.readLine("User name:");
char[] password = cons.readPassword("Password:");
但是,Console每次只能读取一行,而且没有读取一个单词或者一个数值的方法。
2、格式化输出
java沿用了c语言的 printf 方法,可以指定打印精度和动态的绑定变量,每一个以 % 字符开始的格式说明符都用相应的参数替换。:
System.out.printf("Hello,%s,Next year, you'll be %d",name,age);
System.out.printf("%8.2f",x);
System类的使用:
System类直接继承于Object,它是提供标准输入(in),标准输出(out),错误输出流(err)的类,他们的定义如下:
public static final PrintStream in
public static final PrintStream out
public static final PrintStream err
他们的定义显示他们都是打印流,可以调用PrintStream的所有方法,详细请参考java的java.io.PrinfString部分文档
3、文件的输入输出
要想对文件进行读取,就需要一个用 File 对象构造一个 Scanner 对象,如下所示
Scanner in = new Scanner(Path.get("myFile.txt"));
如果文件名是路径+文件名,记得在每个反斜线前面加个反斜线,进行转义:
c:\\mydirectory\\myfile.txt