语言基础知识
简单数据类型
数据类型划分
整数 | byte,short,int,long | byte 8;short 16 int 32; long 64 |
---|---|---|
浮点类型 | float,double | float必须在数字后加f |
字符类型 | char | 常量:单括号;变量:在机器占16位,0~65535 |
布尔类型 | boolean | true,false |
复合数据类型 | class interface 数组,字符串 | interface查一下 |
常量变量
变量:
- 对大小写敏感
- 对长度没有限制
- 必须先初始化再使用
常量:final
final int num = 100
数据类型转换
自动:
混合运算中先转换为同一类型再进行运算
byte,short,char->int->long->float->double
强制类型转换:
int i;
byte b = (byte)i;
运算符和表达式
运算符:
按功能划分:
算术运算符 | +,-,*,/,%,++,– | |
---|---|---|
关系运算符 | ||
布尔逻辑运算符 | !,&&,|| | |
位运算符 | >>,<<,>>>,&(与),|(或),^(异或),~ | |
赋值运算符 | =,+= | |
条件运算符 | ?: | |
其他 | 分量运算符. ,下标运算符[],实例运算符instanceof,内存分配new |
优先次序:
表达式:
短路逻辑运算符&& ||
数学函数
import
控制语句
•块作用域
块:由一对花括号括起来的若干简单的语句;
一个块可以嵌套在另一个块中;
不能在嵌套的两个块中声明同名的变量
分支语句:
if else
Switch case default break
- 表达式expression的返回值类型必须是这几种类型之一:int,byte,char,short,枚举常量,字符串(JAVA SE 7)
- break语句用来在执行完一个case分支后,使程序跳出switch语句,即终止switch语句的执行(在一些特殊情况下,多个不同的case值要执行一组相同的操作,这时可以不用break
循环语句:
while
do while
for
跳转语句:
break
-
Switch语句中
-
Java中,可以为每个代码块加一个标号,格式如下:BlockLabel:{codeBolck}
break跳出它所指定的块,并从紧跟该块的第一条语句处执行:
break BlockLabel; a:{…… b:{…… c:{…… break b; ……//此处的语句块不被执行 } ……//不被执行 } ……//从此处开始执行 }
continue
用来结束本次循环,跳过循环体中下面尚未执行的语句,接着进行终止条件的判断。对于for语句,在进行终止条件的判断前,还要先执行迭代语句
return
从当前方法中退出,返回到调用该方法的语句处,并从紧跟该语句的下一条语句继续程序的执行。
例外处理语句:
try,catch,finally,throw
数组
一维数组
初始化:
静态初始化:
int intArray[] = {1,2,3,4}
动态初始化
简单类型
常用:
int[] a = new int[100];
int intArray[];
intArray = new int[5];
复合类型
Date dateArray[];
dateArray = new Date[3];
dateArray[0] = new Date();
dateArray[1] = new Date();
dateArray[2] = new Date();
引用:
arrayName[index]
每个数组都有一个属性length指明它的长度,intArray.length指明其长度
数组拷贝:
引用拷贝:
允许将一个数组变量拷贝给另一个数组变量,两个变量将引用同一个数组
int[] smallPrimes = {1,2}
int[] luckyNumbers = smallPrimes;
值拷贝:一个数组的值拷贝到一个新的数组,用类的方法
int[] copiedL = Arrays.copyOf(L,L.length);
数组排序:
Arrays类中的sort方法
int[] a = new int[];
Arrays.sort(a);
for each 循环
依次处理数组中的每个元素,而不必指定下标值
for(variable:collection) statement
variable:暂存集合中元素的变量
collection:数组或实现了接口的变量
eg:
for(int element:a)
System.out.println(element);
打印数组a的元素,一个元素占一行。
多维数组:
被看做数组的数组
定义:
type [][]arrayName;
type arrayName[][];
初始化:
静态初始化
int intArray[][] = {{1,2},{2,3},{3,4,5}};
java语言中,由于把二维数组看做是 数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同
动态初始化
1.直接为每一维分配空间
arrayName = new type[arrayLength1][arrayLength2];
int a[][] = new int[2][3];
2.从最高维开始,分别为每一维分配空间
arrayName = new type[arrayLength1][];
arrayName[0] = new type[arrayLength20];
arrayName[1] = new type[arrayLength21];
...
arrayName[arrayLength1-1] = new type[arrayLength2n];
eg:
int a[][] = new int[2][];
a[0] = new int[3];
a[1] = new int[5];
3.二维复合数据类型
必须为每个数组元素单独分配空间
String s[][] = new String[2][];
s[0] = new String[2];
s[1] = new String[2];
s[0][0] = new String("Good");
s[0][1] = new String("luck");
s[1][0] = new String("to");
s[1][1] = new String("you");
内存分配过程
字符串的处理
字符串的表示
Java语言中,把字符串作为对象来处理,类String StringBuffer都可以用来表示一个字符串
字符串常量
是用双引号括住的一串字符。
String表示不可变字符串
String s = new String();//生成一个空串
String a = "hello";
不同方式表示字符串"abc"
char chars1[]={'a','b','c'};
char chars2[] = {'a','b','c','c','d'};
String s1 = new String(chars1);
String s2 = new String(chars1,0,3);
StringBuffer表示字符串
StringBuffer();//分配16个字符的缓冲区
StringBuffer(int len);//分配len个字符的缓冲区
StringBuffer(String s);//除了按照s的大小分配空间外,再分配16个字符的缓冲区
访问字符串
类String
length | 返回字符串长度 |
---|---|
charAt() | public char charAt(int index) 返回char 指定索引处的值。指数范围为0 至length() - 1 。该序列的第一个char 值在索引0 ,下一个索引为1 ,依此类推,与数组索引一样。如果char 由索引指定的值是surrogate ,则返回所述替代值。 |
getChars() | public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将此字符串中的字符复制到目标字符数组中。要复制的第一个字符是索引srcBegin ; 要复制的最后一个字符在索引srcEnd-1 (因此要复制的srcEnd-srcBegin 总数为srcEnd-srcBegin )。 字符被复制到的子阵列dst 开始于索引dstBegin 和在索引结束: dstbegin + (srcEnd-srcBegin) - 1 |
getBytes() | public byte[] getBytes() 使用平台的默认字符集将此String 编码为字节序列,将结果存储到新的字节数组中。 |
indexOf() | ①public int indexOf(int ch) 返回指定字符第一次出现的字符串内的索引。如果与值的字符ch 在此表示的字符序列发生String 第一事件发生之对象,则索引(在Unicode代码单元)被返回。对于从0到0xFFFF(含)范围内的ch 的值,这是最小值k ,使得: this.charAt(k) == ch 是真的。对于ch 其他值,它是最小值k ,使得: this.codePointAt(k) == ch 是真的。在这两种情况下,如果此字符串中没有此类字符,则返回-1 。 ② public int indexOf(int ch, int fromIndex) 返回指定字符第一次出现的字符串内的索引,以指定的索引开始搜索。如果与值的字符ch 在此表示的字符序列发生String 的索引不小于在对象fromIndex ,则返回第一个这样的匹配项的索引。 对于从0到0xFFFF(含)范围内的ch 的值,这是最小值k ,使得: (this.charAt(k) == ch) && (k >= fromIndex) 是真的。对于ch 其他值,它是最小值k ,使得: (this.codePointAt(k) == ch) && (k >= fromIndex) 是真的。在这两种情况下,如果这个字符串在位置fromIndex 之间或之后没有出现,则返回-1 。fromIndex的价值没有fromIndex 。 如果它是否定的,它具有与零一样的效果:可以搜索整个字符串。 如果它大于此字符串的长度,它具有与该字符串的长度相等的效果: -1 被返回。 所有索引在char 值(Unicode代码单位)中char 。 |
lastIndexOf() | public int lastIndexOf(int ch) 返回指定字符的最后一次出现的字符串中的索引。 |
toCharArray() | public char[] toCharArray() 将此字符串转换为新的字符数组。 结果 一个新分配的字符数组,其长度是该字符串的长度,其内容被初始化为包含由该字符串表示的字符序列。 |
类StringBuffer
length() | public int length() 返回长度(字符数)。 |
---|---|
charAt() | public char charAt(int index) 返回char 在指定索引在这个序列值。 第一个char 值为索引0 ,下一个索引为1 ,依此类推,就像数组索引一样 |
getChars() | public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 字符从该序列复制到目标字符数组dst 。要复制的第一个字符是索引srcBegin ;要复制的最后一个字符在索引srcEnd-1 。要复制的srcEnd-srcBegin 总数为srcEnd-srcBegin 。字符被复制到的子阵列dst 开始于索引dstBegin 和在索引结束: dstbegin + (srcEnd-srcBegin) - 1 |
capacity() | public int capacity() 返回当前容量。 容量是新插入字符可用的存储量,超过此值将进行分配 |
修改字符串
类String
为不可变字符串->只能将变量引向另一个字符串
方法
concat() | public String concat(String str) 将指定的字符串连接到该字符串的末尾。如果参数字符串的长度为0 ,则返回此String 对象。 否则,返回一个String 对象,表示一个字符序列,该字符序列是由该String 对象表示的字符序列与由参数字符串表示的字符序列的级联。 例子: “cares”.concat(“s”) returns “caress” “to”.concat(“get”).concat(“her”) returns “together” |
---|---|
replace() | public String replace(char oldChar, char newChar)返回从替换所有出现的导致一个字符串oldChar 在此字符串newChar 。如果在String oldChar 表示的字符序列中没有发生String ,则返回对该String 对象的引用。 否则, String 被返回对象,它表示一个字符序列与由本表示的字符序列String 除了的每次出现对象, oldChar 通过的发生替换newChar 。 例子: “mesquite in your cellar”.replace(‘e’, ‘o’) returns “mosquito in your collar” “the war of baronets”.replace(‘r’, ‘y’) returns “the way of bayonets” “sparring with a purple porpoise”.replace(‘p’, ‘t’) returns “starring with a turtle tortoise” “JonL”.replace(‘q’, ‘x’) returns “JonL” (no change) |
substring() | public String substring(int beginIndex, int endIndex) 返回一个字符串,该字符串是此字符串的子字符串。子串开始于指定beginIndex 并延伸到字符索引endIndex - 1 。因此,子串的长度为endIndex-beginIndex 。例子: “hamburger”.substring(4, 8) returns “urge” “smiles”.substring(1, 5) returns “mile” |
toLowerCase() | public String toLowerCase() 将所有在此字符String 使用默认语言环境的规则,以小写。 这相当于打电话toLowerCase(Locale.getDefault()) 。 |
toUpperCase() | public String toUpperCase() 使用默认语言环境的规则将此String 中的所有字符转换为大写。 此方法相当于toUpperCase(Locale.getDefault()) 。 |
eg:
String greeting = "hello";
String s = greeting.substring(0,3);//s -> "hel"
类StringBuffer
方法
append() | public StringBuffer append(char c) 将char 参数的字符串表示法附加到此序列。该参数附加到此序列的内容。 该序列的长度增加1 |
---|---|
insert() | public StringBuffer insert(int offset, char[] str) 在此序列中插入char 数组参数的字符串表示形式。数组参数的字符在offset 的位置插入到该序列的内容中。 该序列的长度增加参数的长度。 总体效果就好像第二个参数通过方法转换为一个字符串,并且该字符串的字符然后是inserted 到指定的偏移量的这个字符序列。 offset 参数必须大于或等于0 ,并且小于或等于此序列的length |
setCharAt() | public void setCharAt(int index, char ch) 指定索引处的字符设置为ch 。该序列被改变以表示一个新的字符序列,其是相同的原字符序列,不同之处在于它包含字符ch 在位置index 。index参数必须大于或等于0 ,并且小于此序列的长度。 |
字符串的比较
String提供的
equals()
区分大小写
s.equals(t)//字符串s与t
"hello".equals(greeting)//字符串字面量?字符串常量?没搞懂
equalsIgnoreCase()
不区分大小写
==
只能确定两个字符串是否在同一个位置上
空串与Null串
空串
长度为零
str.length()==0
str.equals("")
Null
变量还没有初始化
字符串的转化
java.lang.Object中提供了方法toString( )把对象转化为字符串
“+”操作
任何一个Java对象都可以转化为字符串
eg:
int age = 13;
String rating = "ag"+age
rating -> "ag13"
String s=new String(new StringBuffer("he is").append(age).append("years old"));
读取输入
输入
通过类Scanner从控制台输入
首先要写
程序最前面要写
import java.util.*;
main里边
Scanner in = new Scanner(System.in)
方法
输入一行
String name = in.nextLine();
读取一个单词(以空白符作为分隔符)
String firstName=n.next();
读取一个整数
int age = in.nextint();
读取一个浮点数
double e=in.nextDouble();
输出
System.out.print()
以x对应的数据类型所允许的最大非0数字位数打印输出x
System.out.println()
System.out.printf(“format”,object)
格式化输出
d,x(十六),o(八进制),s,c