Java的基本程序设计结构
此列表写了一些Java特性
-
System.out
还有个print
方法,它不在输出后增加换行符。而System.out.println
就是默认给字符串增加换行符 -
在Java中,所有数值类型所占据的字节数与平台无关Java没有任何无符号整型(unsigned)
-
Java中,整数表达式不能转化为布尔值
-
Java中不区分变量的声明和定义,在C和**C++**中需要区分:
int i = 10;//这是定义
extern int i;//这是声明
-
不能使用==来判断字符串内容的相等性
-
在Java中若想要获得真正的字符数应该使用
str.codePointCount(0,str.length());
-
将输出打印到“标准输出流”只需要调用
System.out.println
即可,若想从控制台获取输入,需要构造一个Scanner对象 -
Java沿用了C语言函数库的
printf
方法 -
Java没有
goto
语句 -
Java没有沿袭
const
定义常量,必须使用final
定义常量 -
Java没有运算符重载
-
Java不使用逗号运算符(for语句中的除外)。
-
注意
Arrays
类中的binarySearch
方法必须使数组已经有序##注释
-
行注释//,在Windows中,IDEA可以使用快捷键 Ctrl+/ 来进行单行注释
-
段落注释/*(自动补全剩余的)
-
类注释和方法注释
类注释:
方法注释:/**加回车
/** *该方法传递两个int类型参数,用来求和 *@param number_a 第一个加数 *@param number_b 第二个加数 *@return 返回一个求和的结果 */ public static int sum(int number_a, int number_b) { return number_a + number_b; }
##数据类型
整型
类型 存储需求 取值范围 int
4字节 -2147483648~2147483647 short
2字节 -32768~32767 long
8字节 -9223372036854775808~9223372036854775807 byte
1字节 -128~127 浮点型
类型 存储需求 取值范围 float
4字节 大约 ± 3.40282347 E + 38 F \pm3.40282347\rm{E}+38\rm{F} ±3.40282347E+38F double
8字节 大约 ± 1.79769313486231570 E + 308 \pm1.79769313486231570\rm{E}+308 ±1.79769313486231570E+308 三个特殊的浮点数值
- 正无穷大
- 负无穷大
NaN
char
类型有些Unicode字符需要两个char值
boolean
类型boolean
型有两个值:false和true,用来判断逻辑条件。
-
变量与常量
-
变量的命名:要区分大小写
命名的艺术:用英文
驼峰命名法,若命名类,则用
UpperCamelCase
;若命名变量则用lowerCamelCase
; -
在Java中,变量的声明尽量靠近变量第一次声明的地方
-
使用关键字
final
来指示常量,常量的命名全用大写字母
运算符
与C语言相同,有算术运算符+,-,*,/,%等
数值类型之间的转换:
byte->short->int->long
char->int->double
这些可以无精度损失的自动转换:double integerNumber = 9;//这里的9自动转换为9.0
int->float; long->float; long->double
会损失一些精度
强制类型转换
使用括号来完成
String
类
Java中字符串就是Unicode字符序列。字符串是不可变的,不能修改字符串字面量中的单个字符;但是可以通过修改字符串变量使它引用另一个字符串变量。
字符串储存在字符串常量池中,它是用来保存字符串对象引用的容器(字符串创建在堆中)。
-
String substring(int beginIndex, int endIndex)
:可以从较大的字符串中提取一个子串/** *@param2:不想复制的第一个位置 */ String greeting = "Hello"; String s = greeting.subject(0,3);//复制位置为0,1,2
-
拼接:Java中使用加号来连接两个字符串
String expletive = "Expeltive"; String PG13 = "deleted"; String message = expletive + PG13;
当将一个字符串值和一个非字符串值相连接时,后者会转化为字符串。这种特性用于输出语句中
System.out.println("The answer is" + answer);
-
boolean equals(String str)
:判断两个字符串是否相等String subString = "Hello!"; String parentString = "Hello World!"; subString.equals(parentString);//区分大小写 subString.equalsIgnoreCase("hello");//不区分大小写
-
int length()
:返回的是字符串UTF-16编码表示下的代码单元数量String str = "Hello"; if (str.length() == 0);//判断str是否为空串 String hello = "hi𝕆";//特殊字符'𝕆'含有两个代码单元 System.out.println(hello.length());//4 System.out.println(hello.codePointCount(0, hello.length()));//3
空串:长度为0的字符串
null
串:没有对象与该变量关联 -
char charAt(int index)
:返回某一具体位置的字符,index的范围是从**0
到length()-1
**;码点:就是某个任意字符在Unicode编码表中对应的代码值
**代码单元:**是在计算机中用来表示码点的,大部分码点只需要一个代码单元表示,但是有一些是需要两个代码单元表示的。
char firstCharacter = greeting.charAt(0);//firstCharacter is 'h' String sentence = "\u+1D546 is the best of octonions."; char isEmptyCharacter = sentence.charAt(1);//isEmptyCharacter为该特殊字符的第二个代码单元
-
**
int codePointCount(int beginIndex, int endIndex)
**方法:返回指定节点范围的码点数,索引到beginIndex
到endIndex-1
-
int compareTo(String other)
:按照字典顺序比较两个字符串 -
boolean isEmpty()
-
int indexOf(String str)
:返回给定的子串第一个匹配项在父串的位置String str = "Hello"; String subStr = "el"; System.out.println("str.indexOf(subStr) = " + str.indexOf(subStr));//值为1
-
**
String replace(CharSequence oldString, charSequence newString)
**方法
将此字符串中与文字目标序列匹配的每个子字符串替换为指定的文字替换序列。替换从字符串的开始一直进行到末尾,例如,用字符串“aaa”
中的“b”
替换“aa”
将得到“ba”
而不是“ab”
。
-
String toUpperCase()
:将字符串中的字符全转化为大写 -
String toLowerCase()
:将字符串中的字符全转化为小写String Str = new String("www.google.com"); System.out.println("返回值为:" +Str.toUpperCase());
##StringBuilder
类
如果用许多小的字符串来构建新的字符串使用StringBuilder
类能够避免浪费空间(String
每拼接一次字符串,都会新建一个新的对象),被称为字符串构建器
StringBuilder builder = new StringBuilder();
-
StringBuilder append(String str)
:追加一个字符串并返回this
StringBuilder newBuilder = new StringBuilder();//创建一个新的字符串构建器 String newString = "Hello"; newBuilder.append(newString); String completedString = newBuilder.toString();//获得了一个字符串 System.out.println("completed String is" + completedString);
-
StringBuilder append(char ch)
:追加一个字符并返回this
-
String toString()
:获得一个和构建器内容相同的字符串对象 -
void setCharAt(int i, char ch)
:将第i
个代码单元设置成字符**ch
** -
StringBuilder insert(int offset, char ch)
:在offset
位置插入一个代码单元并返回this
输入和输出
读取输入
Scanner input = new Scanner(System.in);
现在使用Scanner类的各种方法来实现输入
Scanner类定义在java.util
包中。需要使用import
指令导入相应的包:import java.util.*
-
String nextLine()
:读取一行输入(包含空格) -
int nextInt()
:读取一个整数 -
double nextDouble()
:读取一个浮点值System.out.println("What is your name?"); String name = input.nextLine(); System.out.println("How old are you?"); int age = in.nextInt();
格式化输出
System.out.printf("Hello, %s. Next year, your will be %d", name, age);
文件的输入与输出
Scanner input = new Scanner(Path.of("myfile.text"), StandardCharsets.UTF_8);
文件路径使用两个反斜杠符。
若想写入文件,就构造一个PrintWriter
对象:PrintWirter output = new PrintWriter("myfile.txt",StandardCharset.UTF_8)
##控制流程
-
块作用域
block用大括号括起来,决定了变量的作用域
-
条件语句
if
(condition) statementif
(condition) statement1else
statement2 -
循环语句
while
(condition) statementdo
statementwhile
(condition); -
for
循环 -
多重选择:**
switch
**语句switch
(choice)case
A:
break;
case
B:
break;
…
default
:
break;
case
标签可以是常量表达式(char
,byte
,short
或int
类型),枚举常量,字符串字面量
大数
java.math
包中的两个类BigInteger
和BigDecimal
可使用静态的valueOf
方法可以将一个普通的数值转换为大数:
BigInteger bigNumber = BigInteger.valueOf(1)
BigInteger add(BigInteger other)
:返回这个大数和另一个大数的和BigInteger sqrt()
:得到这个大数的平方根int compareTo(BigInteger other)
Arrays
类
声明
int[] array = {1,2,3,4};
//初始化
int[] array = new int[100];
//分配空间
以上声明方式都为静态数组
打印
-
for-each
语句for
**(**variable : collection) statementint[] primeArray = {2,3,5,7,11,13}; for (int element : primeArray); System.out.println("element = " + element);
-
调用
Arrays
类中的toString
方法int[] primeArray = {2,3,5,7,11,13}; System.out.println(Arrays.toString(primeArray));//输出的是[2,3,5,7,11,13]
方法介绍
static datatype[] copeOf(datatype[] array, int end)
:返回一个新数组,第二个参数为新数组的长度static void sort(datatype[] array)
:快速排序,这里的array的元素类型应该实现Comparable接口,否则会强制类型转换成Comparable类型的int binarySearch(datatype[] array, datatype value)
:二分查找value,若存在返回下标,否则返回负值boolean equals(datatype[] array,datatype[] anotherArray)
:要求两个数组顺序一致,才能返回true
int[] copedPrimeArray = Arrays.copyOf(primeArray,primeArray.length);
Arrays.sort(primeArray);
###多维数组(与C语言差不多)
int[][] array = new int[3][5];
int final static ROW = array.length;
int final static COLUMN = array[0].length;