文章目录
java学习笔记
1.数据类型
byte : 8位,有符号,默认值为0。
short : 16位,有符号,默认值为0。
int : 32位,有符号,默认值为0。
long :64位,有符号,默认值为0。
float :单精度32位,有符号,默认值0.0f。
double :双精度,64位,默认值为0.0d。
boolean :1位,true,false,默认值false。
char :单一的16位Unicode字符,最小值0,最大值65535。
2. 转义字符
-
换行 \n
-
回车 \r
-
换页符 \f
-
退格符 \b
-
空字符 \0
-
字符串 \s
-
制表符 \t
3. 自动类型转换
byte,short, char -> int -> log -> float -> double
- 不能对boolean进行任何类型转换。
4. 强制类型转换
- 条件是转换的数据类型必须兼容。
- 格式(type) value (type)。
5. java 变量类型
-
类变量:类中独立与方法之外,用static修饰。
-
实例变量 :独立与方法之外,没有用static修饰。
-
局部变量:类中方法的变量。
1. java 局部变量
- 局部变量声明在方法,构造方法或者语句块中,作用域在语句块内。
- 在语句块被执行时创建,执行完销毁。
- 访问修饰符不能用于局部变量。
- 局部变量是在栈上分配。
- 局部变量没有默认值,都必须经过初始化后,才可以使用。
2. 实例变量(对象变量)
- 在类中,在类的语句块之外。
- 当实例化对象后,实例变量的值被确定。
- 在对象创建时创建,对象销毁时销毁。
- 至少被一个语句块引用,使得外部能通过这些方式获取实例变量的值。
- 实例变量可以声明为使用前或使用后。
- 访问修饰符可以修饰实例变量,一般设为私有,也可设置为保护,可以被子类访问。
3. 类变量
- 使用static关键字声明。
- 无论类创建多个对象,类只拥有类变量的一份拷贝。
- 静态变量除了被声明为常量外,很少使用,常量指。public/private ,final ,static类型的变量,常量初始化后不可被改变。
- 静态变量放在静态存储区,在第一次访问时创建,在程序结束时销毁。
- 静态变量一般用大写。
6. 访问控制修饰符
-
default: 在同一包内可见,不使用任何修饰符。使用对象:类,接口,变量,方法。
-
private: 在同一类内可见,同包不可见,子孙不可见。使用对象:变量,方法。
主要用于:隐藏类的实现细节,保护类的数据。
-
public:对所有类可见。使用方法: 类,接口,变量,方法。
-
protected:对同一包内的类和所有子类可见。使用对象方法,变量。
接口和接口的成员变量,方法不能声明为protected。
子类与基类在同一包:被声明为protected的变量,方法,构造器能被同一包的任何其他类访问。
子类与基类不在同一包中:那么在子类中,子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例的protected方法。
7. 非访问控制符
-
static修饰符
-
静态变量
用来申明独立与对象的变量,无论多少实例化,都只有一份静态变量的拷贝。
-
静态方法
用来申明独立与对象的静态方法,静态方法不能使用类的非静态变量。
-
-
final修饰符
变量一旦被赋值,不能被重新赋值。被final修饰的实例变量必须显式指定初始值。final修饰符通常和static修饰符一起使用来创建类常量。
-
final方法
final修饰的方法,可以被子类继承,但不能被子类修改。
-
final类
final类不能被继承,没有类能够继承final类的任何特性。
-
-
abstract修饰符
抽象类不能用来实例化,声明抽象类的唯一目的是为了将来对该类扩充。抽象类可以包含非抽象方法,也可以不包含抽象方法。
抽象方法,是一种没有任何实现的方法,该方法的具体实现由子类提供。抽象类不能被final和static修饰。
任何抽象类的子类必须实现父类的所有抽象方法,除非子类也是抽象类。
抽象类以分号结尾。public abstract sample();
-
synchronized修饰符
synchronized修饰的方法同一时间,只能被一个线程访问。
-
transient修饰符
序列化的对象包含被transient修饰的实例变量时,java虚拟机跳过该特定的变量。该修饰符用在定义变量的语句中,用来预处理类和变量的数据类型。
-
volatile修饰符
volatile修饰的成员变量,线程在每次访问它时,都会强制从共享内存中重新读取该成员变量的值,当成员变量发生变化时,会强制将变化值写回到共享内存中。两个不同的线程总是看到某个成员变量的同一个值。一个volatile对象引用可能时null。
8.运算符
-
算数运算符
+ 加法
- 减法
* 乘法
/ 除法
% 取余
++ 自增
–- 自减
-
关系运算符
== 操作数的值是否相同
!= 操作数的值是否不相同
> 数值大于
< 数值小于
>= 大于等于
<= 小于等于
-
为运算符
& 与
| 或
-
^ 非
-
按位取反
<< 左移
>> 右移
>>> 按位右移补0
-
-
逻辑运算符
&& 逻辑与,AB都为真才真
|| 逻辑或,AB有一个为真,则真
! 逻辑非,只有一个操作数,反转操作数的逻辑状态
注意:在&&时第一个操作为false,则不会在去判断第二个操作符。
-
赋值运算符
= 等于
+= 左加右,赋值给左
-= 左减右,赋值给左
*= 左乘以右,赋值给左
/= 左除以右,赋值给左
(%)= 左除以右,取模,赋值给右
<<= 左移赋值
>>= 右移赋值
&= 按位与赋值
|= 按位或赋值
^= 按位取反赋值
-
条件运算符(?:)
variable x = (expression) ? value1 if true : value2 if false
真取value1,假取value2
-
instanceof 运算符
检查对象是否是特定的类
格式:( Object reference variable ) instanceof (class/interface type)
-
java运算符优先级
类别 操作符 关联性 后缀 ()[]. 左到右 一元 +±-!~ 右到左 乘除 */% 左到右 加减 ± 左到右 移位 >> >>> << 左到右 相等 == != 左到右 按位与 & 左到右 按位异或 ^ 左到右 按位或 | 左到右 逻辑与 && 左到右 逻辑或 || 左到右 条件 (?:) 左到右 赋值 = += … 左到右 逗号 , 左到右
9.循环结构
-
while
先判断再执行。
while(boolean表达式){ //循环体 }
-
do…while
先执行一次,再判断
do{ //循环体 }while(boolean表达式)
-
for
最先执行初始化步骤,可以声明一种类型,可以初始化一个或多个循环控制变量,也可以是空语句(死循环)。
for(int i = 0; i < 10; i++){ //循环体 }
-
增强for循环(数组)(for…Each循环)
java5加入,主要用于数组的增强型循环。
声明语句:声明新的局部变量,必须与数组中的元素匹配,作用域限定再循环语句块中,值与此时数组元素的值相同。
表达式:表达式是要访问的数组名,或者是返回数组的方法。
for(声明语句:表达式){ //循环体 }
-
break
主要用于跳出循环。
跳出最里层循环,并执行该循环下面的语句。
-
continue
适用于任何循环控制结构中。让程序跳转到下一次循环迭代。
10.java条件语句
if(布尔表达式1){
//布尔1值为true,执行语句
}else if(布尔表达式1){
//布尔1值为true,执行语句
}else if(布尔表达式1){
//布尔1值为true,执行语句
}else{
//都不是,执行语句
}
-
switch…case
判断某个值知否相等
在执行时会先进行匹配,匹配成功返回当前case值,再根据break,判断是否继续输出。
switch(变量){ case A: break; case B: case C: break; default : //语句 } //如果没有break,B,C,default的语句都会输出
11.Number&Math类
-
Number类
Number类都是java.lang包内,不需要导包。
- Byte
- Short
- Integer
- Long
- Float
- Double
-
Math类
包含了执行基本数学运算的属性和方法,初等指数,对数,平方根,三角函数。
Math的方法都被定义为static,可以用Math.mathod直接调用。
常用方法:
- xxxValue 将Number对象转为对应的数据类型的值返回。
- compareTo() 将Number对象与参数比较。
- equals() 将Number对象与参数是否相同。
- valueOf() 返回Number对象指定的内置数据类型。
- toString() 返回字符串。
- parselnt() 将字符串解析为int类型。
- abs() 绝对值。
- call() 返回大于等于给定参数的最小整数,双精度浮点型。
- floor()返回小于等于给定参数的最大整数。
- rint() 返回参数最近的整数,返回类型为double。
- round() 四舍五入。
- min() 返回两个参数的最小值。
- max() 返回两个参数的最大值。
- exp() 返回自然数底数e的参数次方。
- log() 返回参数的自然数底数的对数。
- pow()返回第一参数的第二个参数次方。
- sqrt() 求参数的算术平方根。
- sin(),cos(),tan() 求正弦值,余弦值,正切值。double型。
- asin(),acos(),atan() 反正弦值,反余弦值,饭正切值。double型。
- toDegress() 将参数转为角度值。
- toRadians() 将角度转为弧度。
- random() 返回一个随机数。
12. Java Charachter类
Character类用于对单个字符进行操作。包装了基本类型char的值。8位。java.lang包。
- Character 方法
- isLetter() 是否是一个字母。
- isDigit() 是否是一个数字字符。
- isWhitespace() 是否是一个空白字符。
- isUpperCase() 是否是大写字母。
- isLowerCase() 是否是小写字母。
- toUpperCase() 指定字母的大写形式。
- toLowerCase() 自定字母的小写形式。
- toString() 返回字符的字符串形式,字符串的长度为1。
13. Java String 类(重点)
String类是不可改变的,一旦创建String对象,它的值就无法改变。
如果要对字符串进行修改,那么使用StringBuffer&StringBuilder类。
输出格式化数字可以使用 printf() 和 format() 方法。
String 类使用静态方法 format() 返回一个String 对象而不是 PrintStream 对象。
String 类的静态方法 format() 能用来创建可复用的格式化字符串,而不仅仅是用于一次打印输出。fs = String.format(“string1+string2”)。
- String 方法
- charAt() 指定索引的char值。
- compareTo() 把字符串和对象相比。
- compareTolgnoreCase() 按字典顺序比较字符串。
- concat() 连接字符串。
- length() 长度。
- replaceAll() 使用给定的replacement替换此字符串所有匹配给定的正则表达式的子字符串。
- replaceFirst() 使用给定的replacement替换此字符串匹配给定的正则表达式的第一个字符串。
- split() 根据给定正则表达式的匹配拆分此字符串。
- toCharArry() 将此字符串转换位一个新的字符数组。
14. java StringBuffer 和 StringBuilder 类
StringBuffer和StringBuilder类的对象能够被多次修改,并且不产生新的未使用的对象。
区别:StringBuilder比StingBuffer速度快。但是再线程安全的情况下,要使用StringBuffer,一般使用StringBuilder。
-
常用的一些方法
增删改查。
15. 数组
-
动态创建数组
申明数组: dataType[] arrayRefVar;
创建数组: arrayRefVar = new dataType[arraySize];
-
静态创建数组
dataType[] arrayRefVer = {value0, value1, …, valuek};
使用for循环或者for…Each循环遍历。
Arrays类在 java.util.Arrays中。
给数组赋值:fill();
给数组排序:sort();
比较数组:equals();
查找元素:binarySearch();先排序,后二分查找。
16.正则表达式
java.util.regex包包含三个类:
-
Pattern类
pattern对象是一个正则表达式的编译表示。 -
Matcher类
Matcher对象是对输入字符串进行解释和匹配操作的引擎。 -
PatternSyntaxException类
是一个非强制异常类,它表示一个正则表达式中的语法错误。
正则表达式语法
在其他语言中:\:插入一个\
在java中:\\插入一个\,转义\后的字符,使具有特殊意义。
字符 | 说明 |
---|---|
\ | 将下一个字符标记为特殊字符 |
^ & | 匹配字符开始或结尾的位置,还会匹配”\n”,”\r” |
*,{0,} | 匹配0次或多次 zo* 匹配z 和 zoo |
+,{1,} | 最少匹配一次前面的字符 |
?,{0,1} | 0次或一次匹配前面的字符 |
{n} | 正好匹配n次前面的字符 |
{n,} | 至少匹配n次 |
{n, m} | 至少匹配n次,至多匹配m次 |
(pattern) | 匹配pattern并捕获该匹配的子表达式,可以使用$0…$9从匹配到的集合中检索。如果需要匹配(),需要使用\(\)。 |
(?:pattern) | 匹配但不获取匹配结果 |
(?=pattern) | 执行正向预测先行搜索的子表达式 |
(?!pattern) | 执行反向预测先行搜索的子表达式 |
x|y | 匹配x或y |
[xyz] | xyz中任一字符 |
[^xyz] | 匹配未包含的任何字符 |
[a-z],[a-z] | 字符范围 |
\b,\B | 字符边界,er\b 匹配never中的er,不匹配verb中的er |
\cx | 匹配控制字符,\cM 匹配control-M |
\d ,\D | 匹配数字,等效[0-9]或[^0-9] |
\f | 匹配换页符,等效与\x0c和\cL |
\n | 换行匹配,等效\0xa和\cJ |
\r | 匹配一个回车符,等效\x0d和\cM |
\s, \S | 匹配空字符,包括空格,制表符,换页符[\f\n\r\t\v] |
\t, \v | 水平制表符,垂直制表符 |
\w, \W | 匹配任何字符,包含下划线,等效[A-Za-z0-9_] |
\num | 匹配num,捕获匹配的反向引用,”(.)\1”两个连续的相同字符 |
Matcher类从方法
-
索引方法
告诉我们在哪找到匹配的字符。
- start() 返回以前匹配的初始索引。
- end() 返回最后匹配字符之后的偏移量。
-
研究方法
输入字符串,返回boolean,表示是否找到。
- matches() 将整个区域与模式进行匹配。
-
替换方法
替换匹配到的字符。
- replaceAll()
- replaceFirst()
PatternSyntaxException类的方法
指示正则表达式从错误
- getDescription()
- getIndex()
- getPattern()
- getMessage()
17.时间日期
Date 封装在java.util中
常用的类方法有:
- getTime()
- setTime()
- toString
SimpleDateFormat格式化日期
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");
Java休眠(sleep)
sleep()使当前线程进入停滞状态(阻塞当前线程),让出cpu给其它线程使用。
-
研究方法
输入字符串,返回boolean,表示是否找到。
- matches() 将整个区域与模式进行匹配。
-
替换方法
替换匹配到的字符。
- replaceAll()
- replaceFirst()
PatternSyntaxException类的方法
指示正则表达式从错误
- getDescription()
- getIndex()
- getPattern()
- getMessage()
17.时间日期
Date 封装在java.util中
常用的类方法有:
- getTime()
- setTime()
- toString
SimpleDateFormat格式化日期
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");
Java休眠(sleep)
sleep()使当前线程进入停滞状态(阻塞当前线程),让出cpu给其它线程使用。