作为一名技术人员,总觉得不能总是安于现状,因为技术不断更新发展,如果你只是关注自己拥有的不思进取,那么总有一天会在技术大浪中被冲搁浅,所以要不断学习和扩展才是正道。最近在学习Java的知识,都是一些基础,作为自己初学的笔记,也希望自己不断进步。
1.面向对象:强调的是对象实例。
面向过程:强调的是动作。
2.类与对象的关系:
类:就是对事物的描述,类是一个模板,它描述一类对象的行为和状态。
对象:对象是类的一个实例,有状态和行为。该类事物实实在在存在的个体,在java中通过new来创建,堆内存的对象主要用于封装对象中的特有数据。(例如:一只猫是一个对象;他的状态有:颜色、名字、品种;行为:摇尾巴、喵喵叫、吃等。)
方法:方法就是行为,一个类可以有很多方法。逻辑运算、数据修改以及多有动作都是在方法中完成的。
实例变量:每个对象都有独特的实例变量,对象的状态由这些实例变量的值决定的。
基本语法:a、Java大小写敏感,例如Hello和hello不一样。b、类名的首字母大写。若是有若干个单词组成,可以使用驼峰命名法。
c、方法名:所有的方法名都应该以小写字母开头。如changeWord。d、源文件名必须和类名相同。Java中的主方法:public static void main(String []args)
标识符:类名、变量名以及方法名都被称为标识符。合法:age、$salary、_value、_1_value;非法的:123age、-salary。
Java修饰符:Java可以用修饰符修饰类中的方法和属性。(修饰符用来定义类、方法或者变量,通常放在语句的最前端)。
主要有两类修饰符:
a、访问控制修饰符:default、public、protected、private
默认default:同一包内可见,不使用任何修饰符。
私有private:同一类中可见。
共有public:对所有类可见。
受保护protected:同一包内的类和所有子类可见。(protected不能修饰类和接口,方法和变量能够被声明为protected,但是接口的成员变量和成员方法不能声明为protected。)
修饰符
|
当前类
|
同一包内
|
子孙类
|
其他包
|
public
|
Y
|
Y
|
Y
|
Y
|
protected
|
Y
|
Y
|
Y
|
N
|
default
|
Y
|
Y
|
N
|
N
|
private
|
Y
|
N
|
N
|
N
|
b、非访问控制修饰符:final、abstract、strictfp
类中的final方法可以被子类继承,但是不能被子类修改。声明final方法的主要目的是防止该方法的内容被修改。
一个类不能同时被abstract和final修饰,如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。
实例:
public abstract class SuperClass {
abstract void m();// 抽象方法
}
class SubClass extends SuperClass {
// 实现抽象方法
void() {
…………………...
};
}
Synchronized 修饰符
Synchronized关键字声明的方法同一时间只能被一个线程访问。Synchronized修饰符可以应用于四个访问修饰符。
Transient修饰符
序列化的对象包含被transient修饰的实例变量时,java虚拟机(JVM)跳过该特定的变量。
该修饰符包含在定义变量的语句中,用来预处理了和变量的数据类型。
实例:
public transient int limit = 55; // will persist
public int b; // will persist
Volatile修饰符
Volatile 修饰的成员变量在每次线程访问时,都强制从共享内存中重新读取该成员变量的值,而且,当成员变量发生变化时,会强制线程将变化的值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某给成员变量的同一个值。(一个volatile对象引用可能是null)。
Java变量:局部变量、类变量(静态变量)、成员变量(非静态变量)
Java数组:数组是储存在堆上的对象,可以保存多个通类型的变量。
Java枚举:Java5.0引入了枚举,枚举限制变量只能是预先设定好的值。枚举可以单独声明或者声明在类里面。方法、变量、构造函数也可以在枚举中定义。
Java关键字:
关键字
|
描述
|
abstract | 抽象方法,抽象类的修饰符 |
assert | 断言条件是否满足 |
boolean | 布尔数据类型 |
break | 跳出循环或者label代码段 |
byte | 8-bit 有符号数据类型 |
case | switch语句的一个条件 |
catch | 和try搭配扑捉异常信息 |
char | 16-bit Unicode字符数据类型 |
class | 定义类 |
const | 未使用 |
continue | 不执行循环体剩余部分 |
default | switch语句中的默认分支 |
do | 循环语句,循环体至少会执行一次 |
double | 64-bit双精度浮点数 |
else | if条件不成立时执行的分支 |
enum | 枚举类型 |
extends | 表示一个类是另一个类的子类 |
final | 表示一个值在初始化之后就不能再改变了 表示方法不能被重写,或者一个类不能有子类 |
finally | 为了完成执行的代码而设计的,主要是为了程序的健壮性和完整性,无论有没有异常发生都执行代码。 |
float | 32-bit单精度浮点数 |
for | for循环语句 |
goto | 未使用 |
if | 条件语句 |
implements | 表示一个类实现了接口 |
import | 导入类 |
instanceof | 测试一个对象是否是某个类的实例 |
int | 32位整型数 |
interface | 接口,一种抽象的类型,仅有方法和常量的定义 |
long | 64位整型数 |
native | 表示方法用非java代码实现 |
new | 分配新的类实例 |
package | 一系列相关类组成一个包 |
private | 表示私有字段,或者方法等,只能从类内部访问 |
protected | 表示字段只能通过类或者其子类访问 子类或者在同一个包内的其他类 |
public | 表示共有属性或者方法 |
return | 方法返回值 |
short | 16位数字 |
static | 表示在类级别定义,所有实例共享的 |
strictfp | 浮点数比较使用严格的规则 |
super | 表示基类 |
switch | 选择语句 |
synchronized | 表示同一时间只能由一个线程访问的代码块 |
this | 表示调用当前实例 或者调用另一个构造函数 |
throw | 抛出异常 |
throws | 定义方法可能抛出的异常 |
transient | 修饰不要序列化的字段 |
try | 表示代码块要做异常处理或者和finally配合表示是否抛出异常都执行finally中的代码 |
void | 标记方法不返回任何值 |
volatile | 标记字段可能会被多个线程同时访问,而不做同步 |
while |
while循环
|
Java注释://单行注释 /*多行注释*/
Java继承:
在Java中,一个类可以由其他类派生。如果你要创建一个类,而且已经存在一个类具有你所需要的属性或方法,那么你可以将新创建的类继承该类。
利用继承的方法,可以重用已存在类的方法和属性,而不用重写这些代码。被继承的类称为超类(super class),派生类称为子类(subclass)。
Java接口:
在Java中,接口可理解为对象间相互通信的协议。接口在继承中扮演着很重要的角色。
接口只定义派生要用到的方法,但是方法的具体实现完全取决于派生类。
Java基本数据类型:
变量就是申请内存来存储值;也就是在创建变量的时候,需要在内存中申请空间。内存管理系统根据变量的类型分配相应的存储空间给变量,分配的空间只能用来存储改类型的数据。
基本类型:byte 二进制位数:8
包装类:java.lang.Byte
最小值:Byte.MIN_VALUE=-128
最大值:Byte.MAX_VALUE=127
基本类型:short 二进制位数:16
包装类:java.lang.Short
最小值:Short.MIN_VALUE=-32768
最大值:Short.MAX_VALUE=32767
基本类型:int 二进制位数:32
包装类:java.lang.Integer
最小值:Integer.MIN_VALUE=-2147483648
最大值:Integer.MAX_VALUE=2147483647
基本类型:long 二进制位数:64
包装类:java.lang.Long
最小值:Long.MIN_VALUE=-9223372036854775808
最大值:Long.MAX_VALUE=9223372036854775807
基本类型:float 二进制位数:32
包装类:java.lang.Float
最小值:Float.MIN_VALUE=1.4E-45
最大值:Float.MAX_VALUE=3.4028235E38
基本类型:double 二进制位数:64
包装类:java.lang.Double
最小值:Double.MIN_VALUE=4.9E-324
最大值:Double.MAX_VALUE=1.7976931348623157E308
基本类型:char 二进制位数:16
包装类:java.lang.Character
最小值:Character.MIN_VALUE=0
最大值:Character.MAX_VALUE=65535
引用类型:
在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,变量一旦声明后,类型就不能被改变了。
对象和数组都是引用类型。
所有引用类型的默认值都是null。
一个引用变量可以用来引用与任何与之兼容的类型。
Java常量:常量在程序运行过程中,不会被修改的量。
Java局部变量:
a、局部变量声明在方法、构造方法或者语句块中。
b、局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁。
c、访问修饰符不能用于局部变量。
d、局部变量只在声明它的方法、构造方法或者语句块中可见。
e、局部变量是在栈上分配的。
f、局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。
Java实例变量:
a、实例变量声明在一个类中,但在方法、构造方法和语句块之外。
b、当一个对象被实例化之后,每个实例变量的值就跟着确定。
c、实例变量在对象创建的时候创建,在对象呗销毁的时候销毁。
d、实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息。
e、实例变量可以声明在使用前或者使用后。
f、访问修饰符可以修饰实例变量。
g、实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例扁郎设为私有。通过使用访问修饰符可以使实例变量对子类可见。
h、实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定。
i、实例变量可以直接通过变量名访问。但在静态方法方法以及其他类中,就应该使用完全限定名:ObjectReference.VariableName。
Java类变量(静态变量):
a、类变量也称为静态变量,在类中以static关键字声明,但必须在构造方法和语句块之外。
b、无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。
c、静态变量除了被声明为常量外很少使用。常量是指声明为public/private,final和static类型的变量。常量初始化后不可改变。
d、静态变量存储在静态存储区。经常被声明为常量,很少单独使用static声明变量。
e、静态变量在程序开始的时候创建,在程序结束时销毁。
f、与实例变量具有相似的可见性。但是为了对类的使用者可见,大多数静态变量声明为public类型。
g、默认值和实例变量相似。数值变量默认值是0,布尔型默认值是false,引用类型默认值是null。变量的值可以声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。
h、静态变量可以通过:className、VariableName的方式访问。
i、类变量被声明为public static final类型时,类变量名称必须使用大写字母。如果静态变量不是public和final类型,其命名方式与实例变量以及局部变量的命名方式一样。
Java运算符
算术运算符、关系运算符、位运算符、逻辑运算符、赋值运算符、其他运算符
Java循环结构:
while循环:只要布尔表达式为true,循环体一直执行下去
while(布尔表达式) {
// 循环体
}
do while循环:不满足条件,至少执行一次。
do {
// 循环体、执行语句
} while(布尔表达式);
for循环:
for(初始化; 布尔表达式; 更新){
// 执行语句
}
增强for循环:(主要用于数组的增强型for循环)
for(声明语句 : 表达式) {
// 代码块
// 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此事数组元素的值相等。
// 表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
}
for增强实例:
public class Test {
public static void main(String[] args) {
int[] numbers = {12, 13, 20, 30, 48, 50};
for (int number : numbers) {
System.out.print(number);
System.out.print(",");
}
System.out.print("\n");
String[] names = {"Jack", "Rose", "Steven", "James"};
for (String name : names) {
System.out.print(name);
System.out.print(",");
}
System.out.print("\n");
}
}
break关键字:
break主要在循环语句或者switch语句中,用来跳出整个语句块。
break跳出最里层的循环,并且继续执行该循环下面的语句。
continue关键字:
continue适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。
在for训话中,continue语句使程序立即跳转到更新语句。
在while和do...while循环中,程序立即跳转到布尔表达式的判断语句。
continue关键字实例:
public class Test {
public static void main(String args[]) {
int [] numbers = {10, 20, 30, 40, 50};
for(int x : numbers ) {
if( x == 30 ) {
continue;
}
System.out.print( x );
System.out.print("\n");
}
}
}
// 以上输出结果:10,20,40, 50
Java分支结构:
if语句
if(布尔表达式) {
// 如果布尔表达式为true将执行的语句
// 如果为真执行此处代码块,如果为假,则执行if语句块后面的代码
}
if...else语句:
if(布尔表达式) {
// 如果布尔表达式为true
} else {
// 如果表达式为false
}
if…else if…else语句:
检测到多种可能的情况
if(布尔表达式1) {表达式1的值为true} else if(表达式2){表达式2的值为true} else if(表达式3){表达式3的值为true} else {如果以上布尔表达式的值都不为true,执行此段代码块}
switch语句:
switch语句判断一个变量与一系列值中的某个值是否相等,每个值称为一个分支。
switch实例:
public class Test {
public static void main(String args[]){
//char grade = args[0].charAt(0);
char grade = 'C';
switch(grade)
{
case 'A' :
System.out.println("Excellent!");
break;
case 'B' :
case 'C' :
System.out.println("Well done");
break;
case 'D' :
System.out.println("You passed");
case 'F' :
System.out.println("Better try again");
break;
default :
System.out.println("Invalid grade");
}
System.out.println("Your grade is " + grade);
}
}
Java Number类:
所有的包装类(Integer、Long、Byte、Double、Float、Short)都是抽象类Number的子类。
Number方法:
下面表中列出的是Number子类实现的方法:
序号
|
方法与描述
|
1 |
XXXValue()<doubleValue()、floatValue()、intValue、longValue、shortValue>
将number对象转换为xxx数据类型的值并返回。
|
2 |
compareTo()
将number对象与参数比较。
|
3 |
equals()
判断number对象是否与参数相等。
|
4 |
valuesOf()
返回一个 Number 对象指定的内置数据类型
|
5 |
toString()
以字符串形式返回值。
|
6 |
parseInt()
将字符串解析为int类型。
|
7 |
abs()
返回参数的绝对值。
|
8 |
ceil()
对整形变量向左取整,返回类型为double型。
|
9 |
floor()
对整型变量向右取整。返回类型为double类型。
|
10 |
rint()
返回与参数最接近的整数。返回类型为double。
|
11 |
round()
返回一个最接近的int、long型值。
|
12 |
min()
返回两个参数中的最小值。
|
13 |
max()
返回两个参数中的最大值。
|
14 |
exp()
返回自然数底数e的参数次方。
|
15 |
logs()
返回参数的自然数底数的对数值。
|
16 |
pow()
返回第一个参数的第二个参数次方。
|
17 |
sqrt()
求参数的算术平方根。
|
18 |
sin()
求指定double类型参数的正弦值。
|
19 |
cos()
求指定double类型参数的余弦值。
|
20 |
tan()
求指定double类型参数的正切值。
|
21 |
asin()
求指定double类型参数的反正弦值。
|
22 |
acts()
求指定double类型参数的反余弦值。
|
23 |
atan()
求指定double类型参数的反正切值。
|
24 |
atan2()
将笛卡尔坐标转换为极坐标,并返回极坐标的角度值。
|
25 |
toDegrees()
将参数转化为角度。
|
26 |
toRadians()
将角度转换为弧度。
|
27 |
random()
返回一个随机数。
|
Java Character类:
Character类用于对单个字符尽心操作。
Character类在对象中包装一个基本类型char的值。
Character方法:
序号 | 方法与描述 |
---|---|
1 | isLetter() 是否是一个字母 |
2 | isDigit() 是否是一个数字字符 |
3 | isWhitespace() 是否一个空格 |
4 | isUpperCase() 是否是大写字母 |
5 | isLowerCase() 是否是小写字母 |
6 | toUppercase() 指定字母的大写形式 |
7 | toLowerCase() 指定字母的小写形式 |
8 | toString() 返回字符的字符串形式,字符串的长度仅为1 |
对于方法的完整列表,请参考的 java.lang.Character API 规范。
Java String类:
创建字符串:String str = ”hello String“;
字符串长度:String类的一个访问器方法length()方法,它返回字符串对象包含的字符数。str.length();
连接字符串:string1.concat(string2); “My name is”.concat(“liuZZ”); “Hello”+”world“;
String方法:
下面是String类支持的方法,更多详细,参看JavaString API文档:
SN(序号) | 方法描述 |
---|---|
1 | char charAt(int index) 返回指定索引处的 char 值。 |
2 | int compareTo(Object o) 把这个字符串和另一个对象比较。 |
3 | int compareTo(String anotherString) 按字典顺序比较两个字符串。 |
4 | int compareToIgnoreCase(String str) 按字典顺序比较两个字符串,不考虑大小写。 |
5 | String concat(String str) 将指定字符串连接到此字符串的结尾。 |
6 | boolean contentEquals(StringBuffer sb) 当且仅当字符串与指定的StringButter有相同顺序的字符时候返回真。 |
7 | static String copyValueOf(char[] data) 返回指定数组中表示该字符序列的 String。 |
8 | static String copyValueOf(char[] data, int offset, int count) 返回指定数组中表示该字符序列的 String。 |
9 | boolean endsWith(String suffix) 测试此字符串是否以指定的后缀结束。 |
10 | boolean equals(Object anObject) 将此字符串与指定的对象比较。 |
11 | boolean equalsIgnoreCase(String anotherString) 将此 String 与另一个 String 比较,不考虑大小写。 |
12 | byte[] getBytes() 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 |
13 | byte[] getBytes(String charsetName) 使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 |
14 | void getChars(int srcBegin, int srcEnd, char[] dat, int dstBegin) 将字符从此字符串复制到目标字符数组。 |
15 | int hashCode() 返回此字符串的哈希码。 |
16 | int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。 |
17 | int indexOf(int ch, int fromIndex) 返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。 |
18 | int indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引。 |
19 | int indexOf(String ste, int fromIndex) 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。 |
20 | String intern() 返回字符串对象的规范化表示形式。 |
21 | int lastIndexOf(int ch) 返回指定字符在此字符串中最后一次出现处的索引。 |
22 | int lastIndexOf(int ch, int fromIndex) 返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。 |
23 | int lastIndexOf(String str) 返回指定子字符串在此字符串中最右边出现处的索引。 |
24 | int lastIndexOf(String str, int fromIndex) 返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。 |
25 | int length() 返回此字符串的长度。 |
26 | boolean matches(String regex) 告知此字符串是否匹配给定的正则表达式。 |
27 | boolean regionMatches(boolean ignoreCase, int toffset, String other, int offset, int len) 测试两个字符串区域是否相等。 |
28 | boolean regionMatches(int toffset, String other, int ooffset, int len) 测试两个字符串区域是否相等。 |
29 | String replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。 |
30 | String replaceAll(String regex, String replacement) 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。 |
31 | String replaceFirst(String regex, String replacement) 使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。 |
32 | String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串。 |
33 | String[] split(String regex, int limit) 根据匹配给定的正则表达式来拆分此字符串。 |
34 | boolean startWith(String prefix) 测试此字符串是否以指定的前缀开始。 |
35 | boolean startsWith(String prefix, int offset) 测试此字符串从指定索引开始的子字符串是否以指定前缀开始。 |
36 | CharSequence subSequence(int beginIndex, int endIndex) 返回一个新的字符序列,它是此序列的一个子序列。 |
37 | String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串。 |
38 | String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。 |
39 | char[] toCharArray() 将此字符串转换为一个新的字符数组。 |
40 | String toLowerCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为小写。 |
41 | String toLowerCase(Locale locale) 使用给定 Locale 的规则将此 String 中的所有字符都转换为小写。 |
42 | String toString() 返回此对象本身(它已经是一个字符串!)。 |
43 | String toUppercase() 使用默认语言环境的规则将此 String 中的所有字符都转换为大写。 |
44 | String toUppercase(Lacale locale) 使用给定 Locale 的规则将此 String 中的所有字符都转换为大写。 |
45 | String trim() 返回字符串的副本,忽略前导空白和尾部空白。 |
46 |
static string valueOf(primitive data type x)
返回给定data type类型x参数的字符串表示形式。
|
Java StringBuffer和StringBuilder类
对字符串修改时,需要试用StringBuffer和StringBuilder类。
和String不同的是,StringBuffer和StringBuilder类的对象能够被多次次改,并且不产生新的未使用对象。(StringBuilder的方法不是线程安全的,不能同步访问,StringBuilder类相比较于StringBuffer有速度优势,所以大多数情况下建议试用StringBuilder类。然后在应用程序要求线程安全的情况下,则必须使用StringBuffer)
StringBuffer类支持的方法:
序号 | 方法描述 |
---|---|
1 | public StringBuffer append(String s) 将指定的字符串追加到此字符序列。 |
2 | public StringBuffer reverse() 将此字符序列用其反转形式取代。 |
3 | public delete(int start, int end) 移除此序列的子字符串中的字符。 |
4 | public insert(int offset, int i) 将 int 参数的字符串表示形式插入此序列中。 |
5 | replace(int start, int end, String str)
使用给定 String 中的字符替换此序列的子字符串中的字符。
|
下面是StringBuffer类和String类方法相类似:
序号 | 方法描述 |
---|---|
1 | int capacity() 返回当前容量。 |
2 | char charAt(int index) 返回此序列中指定索引处的 char 值。 |
3 | void ensureCapacity(int minimumCapacity) 确保容量至少等于指定的最小值。 |
4 | void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将字符从此序列复制到目标字符数组 dst 。 |
5 | int indexOf(String str) 返回第一次出现的指定子字符串在该字符串中的索引。 |
6 | int indexOf(String str, int fromIndex) 从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。 |
7 | int lastIndexOf(String str) 返回最右边出现的指定子字符串在此字符串中的索引。 |
8 | int lastIndexOf(String str, int fromIndex) 返回最后一次出现的指定子字符串在此字符串中的索引。 |
9 | int length() 返回长度(字符数)。 |
10 | void setCharAt(int index, char ch) 将给定索引处的字符设置为 ch 。 |
11 | void setLength(int newLength) 设置字符序列的长度。 |
12 | CharSequence subSequence(int start, int end) 返回一个新的字符序列,该字符序列是此序列的子序列。 |
13 | String substring(int start) 返回一个新的 String ,它包含此字符序列当前所包含的字符子序列。 |
14 | String substring(int start, int end) 返回一个新的 String ,它包含此序列当前所包含的字符子序列。 |
15 | String toString() 返回此序列中数据的字符串表示形式。 |