Java 笔 记
Java是由Sun Microsystems公司于1995年,其特点是可移植性强,可从多平台进行扩展。
分成三类:a、javaSE java平台标准般版 b、JavaEE java平台企业版 c、JavaME Java平台微型版
特点:简单 面向对象 分布式
一、数据结构
几大接口和类
枚举(Enumeration):定义了从数据结构中取回连续元素的方式
位集合(BitSet):单独设置和清楚的位或标志
向量(Vector):
栈(Stack)、字典(Dictionary)、哈希表(Hashtable)、属性(Properties)
二、基本语法
Java程序认为是一系列对象的集合,在这些对象中通过调用彼此的方法来实现协同的工作。
对象:对象是类的一个实例,有状态和行为
类:类是一个模板,标会对象的行为和状态
方法:方法就是类的动作行为,逻辑运算、数据修改以及所有动作都是在方法中完成
实例变量:每个对象都有独特的实例变量,对象的状态由这些实例变量决定
java.c 进行代码编译
java 代码运行
编写时语法(都要做到简明,见名知意):
大小写敏感,类名大写(大驼峰方式)、方法名(小驼峰方式)、源文件名(和类名保持相同)、方法主入口采取特定形式
Java标识符
类名、变量名以及方法名都被成为标识符,书写时有一定的要求:所有标识符都应由字母、美元符、下划线开始,关键字不能作为标识符,标识符大小写敏感
Java修饰符
用来修饰类中的方法和属性
1、访问控制修饰符:default、public、protected、private
2、非访问控制修饰符:final、abstract、static、synchronized
Java变量
局部变量、类变量(静态变量)、成员变量(非静态变量)
Java枚举
限制预先设定好的值,减少代码中出现的bug,经常用单词全大写来表示
Java关键字
别 | 关键字 | 说明 |
---|---|---|
访问控制 | private | 私有的 |
protected | 受保护的 | |
public | 公共的 | |
default | 默认 | |
类、方法和变量修饰符 | abstract | 声明抽象 |
class | 类 | |
extends | 扩充,继承 | |
final | 最终值,不可改变的 | |
implements | 实现(接口) | |
interface | 接口 | |
native | 本地,原生方法(非 Java 实现) | |
new | 新,创建 | |
static | 静态 | |
strictfp | 严格,精准 | |
synchronized | 线程,同步 | |
transient | 短暂 | |
volatile | 易失 | |
程序控制语句 | break | 跳出循环 |
case | 定义一个值以供 switch 选择 | |
continue | 继续 | |
default | 默认 | |
do | 运行 | |
else | 否则 | |
for | 循环 | |
if | 如果 | |
instanceof | 实例 | |
return | 返回 | |
switch | 根据值选择执行 | |
while | 循环 | |
错误处理 | assert | 断言表达式是否为真 |
catch | 捕捉异常 | |
finally | 有没有异常都执行 | |
throw | 抛出一个异常对象 | |
throws | 声明一个异常可能被抛出 | |
try | 捕获异常 | |
包相关 | import | 引入 |
package | 包 | |
基本类型 | boolean | 布尔型 |
byte | 字节型 | |
char | 字符型 | |
double | 双精度浮点 | |
float | 单精度浮点 | |
int | 整型 | |
long | 长整型 | |
short | 短整型 | |
变量引用 | super | 父类,超类 |
this | 本类 | |
void | 无返回值 | |
保留关键字 | goto | 是关键字,但不能使用 |
const | 是关键字,但不能使用 | |
null | 空 |
Java注释
单行,多行,文档式注释
继承
利用继承方法,可以重用已存
在类的方法和属性,而不重写这些代码。被继承的类成为超累(super class),派生类称为子类(subclass)
接口对象间相互通信的协议,一个继承多个接口
变量的种类:类变量(被静态修饰和类为一体) 成员变量 局部变量
构造方法:必须存在没有则默认生成,一个类可以有多个构造方法,但是构造方法的名字与类名相同
三、基本数据类型
变量是申请用来储存值的名称,而数据类型决定申请空间。
1、内置数据类型
Java提供了8中数据类型。六种数字类型(四个整数型,两个浮点型),一个字符型,还有一个布尔型
byte 8 -128~127
short 16
int 32
long 64
float 单精度,32位
double 双精度 64
char
boolean
2、引用数据类型
指向对象的变量,对象和数组都是引用数据类型,所有的默认值都为null
Java常量
在程序中运行时,不能被修改用关键字final来修饰,注意通常用大写的字母标识
自动类型转换
整型,实型(常量),字符型数据可以
低————————————————》高
byte,short,char->int->long->float->double
从大的类型转移到小的类型需要强制
四、变量类型
在Java中所有的变量在使用前必须进行声明
- 类变量:独立于方法之外的变量,用 static 修饰。
- 实例变量:独立于方法之外的变量,不过没有 static 修饰。
- 局部变量:类的方法中的变量。
五、修饰符
访问修饰符
放在语句的最前端,用来修饰定义类、方法或者变量
访问权限:1、public 所有类可见,开放性最大
2、protected 对同一包内的类和子类可见
3、default 在同一包类可见
4、private 在同一类中可见
访问控制和继承:父类中声明为public 的方法在子类中也必须为public。父类中声明为protected 的方法中,子类必须声明更高的权限。父类中声明为peivate的方法不能被继承
非访问修饰符
static 用来修饰类变量和方法
静态变量也被成为类变量,局部变量不能用static来修饰,对于静态变量无论一个类实力的对象有多少个,静态变量只有一份
静态方法:用来声明独立于对象的静态方法,不能使用类的非静态变量
final 用来修饰类、方法、变量,final修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的
可以和static在一起建立类常量,必须有初始值,一旦赋值不能被重新赋值,必须指定初始值;final方法可以被子类继承但是不能被子类重写,其设定的目的就是防止方法被修改。final的类不能被继承而呈现最终的状态
abstract 修饰符,用来创建抽象类和抽象方法
本身不能被实现,该方法的使用需要继承有子类提供,并且抽象方法不能用final,static进行修饰,abstract方法对于abstract类,充分不必要
synchronized 和 volatile 主要用于线程的编程
synchronized关键字声明的方法同一时间只能被一个线程访问
transient只修饰变量,并不对其进行序列化
volatile修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
六、运算符
执行数学运算,来操作变量
算术运算符、关系运算符、位运算符、逻辑运算符、赋值运算符、其他运算符
计算运算符:+、-、*、/、%、++、–
关系运算符:==、!=、<、>、>=、<=,关系运算符得出来的是Boolean值
位运算符:是用来处理数值类型的操作符
操作符 | 描述 | 例子 |
---|---|---|
& | 如果相对应位都是1,则结果为1,否则为0 | (A&B),得到12,即0000 1100 |
| | 如果相对应位都是 0,则结果为 0,否则为 1 | (A | B)得到61,即 0011 1101 |
^ | 如果相对应位值相同,则结果为0,否则为1 | (A ^ B)得到49,即 0011 0001 |
〜 | 按位取反运算符翻转操作数的每一位,即0变成1,1变成0。 | (〜A)得到-61,即1100 0011 |
<< | 按位左移运算符。左操作数按位左移右操作数指定的位数。 | A << 2得到240,即 1111 0000 |
>> | 按位右移运算符。左操作数按位右移右操作数指定的位数。 | A >> 2得到15即 1111 |
>>> | 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 |
逻辑运算符:作为条件判断接下来的执行情况
操作符 | 描述 | 例子 |
---|---|---|
&& | 称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。 | (A && B)为假。 |
| | | 称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。 | (A | | B)为真。 |
! | 称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。 | !(A && B)为真。 |
赋值运算符
操作符 | 描述 | 例子 |
---|---|---|
= | 简单的赋值运算符,将右操作数的值赋给左侧操作数 | C = A + B将把A + B得到的值赋给C |
+ = | 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 | C + = A等价于C = C + A |
- = | 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数 | C - = A等价于C = C - A |
* = | 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数 | C * = A等价于C = C * A |
/ = | 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数 | C / = A,C 与 A 同类型时等价于 C = C / A |
(%)= | 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数 | C%= A等价于C = C%A |
<< = | 左移位赋值运算符 | C << = 2等价于C = C << 2 |
>> = | 右移位赋值运算符 | C >> = 2等价于C = C >> 2 |
&= | 按位与赋值运算符 | C&= 2等价于C = C&2 |
^ = | 按位异或赋值操作符 | C ^ = 2等价于C = C ^ 2 |
| = | 按位或赋值操作符 | C | = 2等价于C = C | 2 |
t条件运算符(?:)
也叫做三元运算符,通过结果得到Boolean值,进行运算
instanceof运算符
用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型),得到的结果是Boolean 需要用特定的值进行赋值。
Java运算符优先级
下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部。
类别 | 操作符 | 关联性 |
---|---|---|
后缀 | () [] . (点操作符) | 左到右 |
一元 | expr++ expr– | 从左到右 |
一元 | ++expr --expr + - ~ ! | 从右到左 |
乘性 | * /% | 左到右 |
加性 | + - | 左到右 |
移位 | >> >>> << | 左到右 |
关系 | > >= < <= | 左到右 |
相等 | == != | 左到右 |
按位与 | & | 左到右 |
按位异或 | ^ | 左到右 |
按位或 | | | 左到右 |
逻辑与 | && | 左到右 |
逻辑或 | | | | 左到右 |
条件 | ?: | 从右到左 |
赋值 | = + = - = * = / =%= >> = << =&= ^ = | = | 从右到左 |
逗号 | , | 左到右 |
七、Java循环结构
主要三种循环结构:
1、while 循环
while(布尔表达式){
//循环内容
}
2、do . . . whilie循环
do{
//代码语句
}while(布尔表达式)
3、for 循环
for(初始值; 布尔表达式;更新 ){
//代码语句
}
4、增强for循环
for(声明语句:表达式){
//代码句子
}
声明语句:声明新的局部值,该变量类型能和数组元素相匹配
表达式:要访问的数组名
break关键字
主要用于swich选择语句当中,用来跳出整个语句块,或用于跳出最里层的循环,并且继续执行接下来的操作
continue关键字
退出循环当前次
八、条件语句与选择语句
if(布尔表达式){
//执行语句
}else if(){
}else{
}
swich(变量或者值){
case value:
//语句
break;
default:
//没有分支时执行
}
九、常用类
所有包装类(Interger,Long,Btye,Doubel,Float、short)都是抽象类Number的子类
Java是一个面相对象的编程语言,基本类型并不具有对象的性质,为了让基本类型也具有对象的特征,就出现了包装类型(如我们在使用集合类型Collection时就一定要使用包装类型而非基本类型),它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。
另外,当需要往ArrayList,HashMap中放东西时,像int,double这种基本类型是放不进去的,因为容器都是装object的,这是就需要这些基本类型的包装器类了。
1、int 转为Intergerr
int i = 0;
Interger ii = new Interger(i);
2、Interger转为int
Interger ii = new Interger(0);
int i = ii.intValue()
Math类
包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数。Math的所有方法都被标记为静态方法所以直接对类给予调用即可。
Number类与Math的常用方法
序号 | 方法与描述 |
---|---|
1 | xxxValue() 将 Number 对象转换为xxx数据类型的值并返回。 |
2 | compareTo() 将number对象与参数比较。 |
3 | equals() 判断number对象是否与参数相等。 |
4 | valueOf() 返回一个 Number 对象指定的内置数据类型 |
5 | toString() 以字符串形式返回值。 |
6 | parseInt() 将字符串解析为int类型。 |
7 | abs() 返回参数的绝对值。 |
8 | ceil() 返回大于等于( >= )给定参数的的最小整数,类型为双精度浮点型。 |
9 | floor() 返回小于等于(<=)给定参数的最大整数 。 |
10 | rint() 返回与参数最接近的整数。返回类型为double。 |
11 | round() 它表示四舍五入,算法为 Math.floor(x+0.5),即将原来的数字加上 0.5 后再向下取整,所以,Math.round(11.5) 的结果为12,Math.round(-11.5) 的结果为-11。 |
12 | min() 返回两个参数中的最小值。 |
13 | max() 返回两个参数中的最大值。 |
14 | exp() 返回自然数底数e的参数次方。 |
15 | log() 返回参数的自然数底数的对数值。 |
16 | pow() 返回第一个参数的第二个参数次方。 |
17 | sqrt() 求参数的算术平方根。 |
18 | sin() 求指定double类型参数的正弦值。 |
19 | cos() 求指定double类型参数的余弦值。 |
20 | tan() 求指定double类型参数的正切值。 |
21 | asin() 求指定double类型参数的反正弦值。 |
22 | acos() 求指定double类型参数的反余弦值。 |
23 | atan() 求指定double类型参数的反正切值。 |
24 | atan2() 将笛卡尔坐标转换为极坐标,并返回极坐标的角度值。 |
25 | toDegrees() 将参数转化为角度。 |
26 | toRadians() 将角度转换为弧度。 |
27 | random() 返回一个随机数。 |
十、Java Character 类 / String 类
Character类用于对单个字符进行操作,可用于对一个基本类型char的值进行封装
Character 方法
1、isLetter() 是否是一个字母
2、isDigit() 是否是一个数字字符
3、isWhitespace() 是否是一个空白字符
4、isUpperCase() 是否为大写字母
5、isLowerCase() 是否为小写字母
6、toLowerCase() 将指定得字母变成小写形式
7、toString() 返回字符串长度仅为一
String类
是不可改变的,所以它的值无法改变
1、length()
2、A.concat(B)
创建格式化字符串
System.out.printf("浮点型变量的值为 " + "%f, 整型变量的值为 " + " %d, 字符串变量的值为 " + “is %s”, floatVar, intVar, stringVar);
你也可以这样写
String fs; fs = String.format("浮点型变量的值为 " + “%f, 整型变量的值为 " + " %d, 字符串变量的值为 " + " %s”, floatVar, intVar, stringVar);
Java StrinBuffer类 和StringBuilder类
这个类的突出作用就是对字符串进行修改
1、capacity() 返回当前容量
2、chatAt(int index) 返回序列中指定索引处的char值
3、indexOf(String)返回第一次出现指定字符串的索引位置
十一、Java数组
数组是用来存储固定大小的同类型元素。
for -Each循环
for(type element: array){
System.out.println(element);
}
单维数组与多维数组
十二、Java时间与日期类
Date()类 表示获取时间,没有对格式进行操作
SimpleDateFormat类,多用来处理时间格式。
也可用format进行操作
Calender类
十三、正则表达式
正则表达式定义了字符串的模式,用来搜索、编辑或处理文本
Pattern.matches(pattern , content)
捕获组:是把多个字符当一个单独单元进行处理的方法,它对括号内的字符分组来创建。groupCount方法用来表示对象的捕获组
String pattern = “(\\D*) (\\d+) (.*)”;
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(file);
m.group(0) 直接返回原字符串
m.group(1) 按照规定字符串中第一种类型进行搜索
m.group(2) 按照规定字符串中第二种类型进行搜索
m.group(3) 按照规定字符串中第三种类型进行搜索
正则表达式语法
字符 | 说明 |
---|---|
\ | 将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,“n"匹配字符"n”。"\n"匹配换行符。序列"\\“匹配”\","\(“匹配”("。 |
^ | 匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与"\n"或"\r"之后的位置匹配。 |
$ | 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与"\n"或"\r"之前的位置匹配。 |
* | 零次或多次匹配前面的字符或子表达式。例如,zo* 匹配"z"和"zoo"。* 等效于 {0,}。 |
+ | 一次或多次匹配前面的字符或子表达式。例如,"zo+"与"zo"和"zoo"匹配,但与"z"不匹配。+ 等效于 {1,}。 |
? | 零次或一次匹配前面的字符或子表达式。例如,"do(es)?“匹配"do"或"does"中的"do”。? 等效于 {0,1}。 |
{n} | n 是非负整数。正好匹配 n 次。例如,"o{2}"与"Bob"中的"o"不匹配,但与"food"中的两个"o"匹配。 |
{n,} | n 是非负整数。至少匹配 n 次。例如,"o{2,}“不匹配"Bob"中的"o”,而匹配"foooood"中的所有 o。"o{1,}“等效于"o+”。"o{0,}“等效于"o*”。 |
{n,m} | m 和 n 是非负整数,其中 n <= m。匹配至少 n 次,至多 m 次。例如,"o{1,3}"匹配"fooooood"中的头三个 o。‘o{0,1}’ 等效于 ‘o?’。注意:您不能将空格插入逗号和数字之间。 |
? | 当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是"非贪心的"。"非贪心的"模式匹配搜索到的、尽可能短的字符串,而默认的"贪心的"模式匹配搜索到的、尽可能长的字符串。例如,在字符串"oooo"中,"o+?“只匹配单个"o”,而"o+“匹配所有"o”。 |
. | 匹配除"\r\n"之外的任何单个字符。若要匹配包括"\r\n"在内的任意字符,请使用诸如"[\s\S]"之类的模式。 |