Java基础
前言:较为基础的内容就不记录了
Java的三个体系
- JavaSE
JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版) - JavaEE
JavaEE(J2EE)(Java 2 Platform,Enterprise Edition,java平台企业版) - JavaME
JavaME(J2ME)(Java 2 Platform Micro Edition,java平台微型版)。
Java的三大特性
-
封装
-
继承
-
多态
Java标识符命名规则
- 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始
- 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合
- 关键字不能用作标识符
- 标识符是大小写敏感的
- 合法标识符举例:helloWorld、$name、_id、__1_id
- 非法标识符举例:123abc、-name
Java关键字:
类、方法和变量修饰符:abstract、class、implements、interface、native、new、 strictfp、static、synchronized、transient、volatile、extends、enum
程序控制语句:break、case、continue、do、else、for、if、return、instanceof、switch、while
基本类型:boolean、byte、char、double、float、int、long、short
访问控制:private、protected、public、default
包相关:import、package
变量引用:super、this、void
保留关键字:goto、const
错误处理:assert、final、finally、catch、try、throw、throws
注意:Java 的 null 不是关键字,类似于 true 和 false,它是一个字面常量,不允许作为标识符使用。
Java修饰符
Java可以使用修饰符来修饰类中方法和属性。主要有两类修饰符:
- 访问控制修饰符 : default, public , protected, private
- 非访问控制修饰符 : final,abstract, static, synchronized
1-访问控制修饰符
修饰符 | 当前类 | 同一包内 | 子孙类(非同包) | 其他包 |
---|---|---|---|---|
public | Y | Y | Y | Y |
protected | Y | Y | Y/N | N |
default | Y | Y | N | N |
private | Y | N | N | N |
protected 可以修饰数据成员,构造方法,方法成员,不能修饰类(内部类除外)。
接口及接口的成员变量和成员方法不能声明为 protected。
2-非访问控制修饰符
- static 修饰符,用来修饰类方法和类变量。
- final 修饰符,用来修饰类、方法和变量,final
修饰的类不能够被继承,修饰的方法可以被继承,不能被继承类重新定义,修饰的变量为常量,是不可修改的。 - abstract 修饰符,用来创建抽象类和抽象方法。
- 一个类不能同时被 abstract 和 final 修饰。
- 任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。
- volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
- synchronized 和 volatile 修饰符,主要用于线程的编程。
Java枚举
枚举可以单独声明或者声明在类里面。方法、变量、构造函数也可以在枚举中定义。
Java 5.0引入了枚举,枚举限制变量只能是预先设定好的值。使用枚举可以减少代码中的 bug。
Java对象和类
构造方法
构造方法是类的一种特殊方法,用来初始化类的一个新的对象,在创建对象(new 运算符)之后自动调用。Java 中的每个类都有一个默认的构造方法,并且可以有一个以上的构造方法。
Java 构造方法有以下特点:
- 方法名必须与类名相同
- 可以有 0 个、1 个或多个参数
- 没有任何返回值,包括 void
- 默认返回类型就是对象类型本身
- 只能与 new 运算符结合使用
需要注意的是:
- 如果为构造方法定义了返回值类型或使用 void 声明构造方法没有返回值,编译时不会出错,但 Java 会把这个所谓的构造方法当成普通方法来处理。
- 构造方法不能被 static、final、synchronized、abstract 和 native(类似于 abstract)修饰。
- 构造方法用于初始化一个新对象,所以用 static 修饰没有意义。
- 构造方法不能被子类继承,所以用 final 和 abstract 修饰没有意义
- 多个线程不会同时创建内存地址相同的同一个对象,所以用 synchronized 修饰没有必要。
- 在一个类中,与类名相同的方法就是构造方法。每个类可以具有多个构造方法,但要求它们各自包含不同的方法参数。
Java数据类型
1-基本数据类型
Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
1个字节是8个比特,即:1Byte = 8bit
二进制的一位,就叫做 1 比特,比特要么为 0 要么为 1
通常来说,一个英文字符是一个字节,一个中文字符是两个字节
1KB=1024B
1MB=1024KB
1GB=1024MB
1TB=1024GB
类型 | 大小 | 位 | 默认值 |
---|---|---|---|
byte | 1byte | 8位 | 0 |
short | 2byte | 16位 | 0 |
int | 4byte | 32位 | 0 |
long | 8byte | 64位 | 0L |
float | 4byte | 32位 | 0.0f |
double | 8byte | 64位 | 0.0d |
boolean | 1位 | false | |
char | 2byte | 16位 | ‘\u0000’ |
自动类型转换:
低 ------------------------------------> 高
byte,short,char—> int —> long—> float —> double
强制类型转换:
- 条件是转换的数据类型必须是兼容的。
- 格式:(type)value type是要强制类型转换后的数据类型
2-引用数据类型
在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如 Employee、Puppy 等。
- 变量一旦声明后,类型就不能被改变了。
- 对象、数组都是引用数据类型。
- 所有引用类型的默认值都是null。
- 一个引用变量可以用来引用任何与之兼容的类型。
Java变量类型
1-类变量(静态变量)
独立于方法之外的变量,用 static 修饰
- 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝
- 静态变量储存在静态存储区。经常被声明为常量,很少单独使用 static 声明变量
- 静态变量可以通过:ClassName.VariableName的方式访问
2-实例变量
独立于方法之外的变量,不过没有 static 修饰。
- 实例变量在对象创建的时候创建,在对象被销毁的时候销毁
- 实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息
- 实例变量可以声明在使用前或者使用后
- 访问修饰符可以修饰实例变量
- 实例变量具有默认值
- 实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObjectReference.VariableName
3-局部变量
类的方法中的变量
- 访问修饰符不能用于局部变量
- 局部变量是在栈上分配的
- 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用
Java运算符
1-位运算符
2-instanceof 运算符
检查该对象是否是一个特定类型(类或接口)
例如:
String name = “James”;
boolean result = name instanceof String; // 由于
name 是 String 类型,所以返回真
如果被比较的对象兼容于右侧类型,该运算符仍然返回 true。
Java循环结构
Java中有三种主要的循环结构:
- while 循环
- do…while 循环
- for 循环
Java5 引入了一种主要用于数组的增强型 for 循环。
for(声明语句 : 表达式)
{
//代码句子
}
Java Switch case语句
switch-case 语句是判断一个变量与一系列值中某个值是否相等的语句。
switch(expression){
case value :
//语句
break; //可选
case value :
//语句
break; //可选
//你可以有任意数量的case语句
default : //可选
//语句
}
- switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量
- case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量
- 如果 case 语句块中没有 break 语句时,匹配成功后,从当前 case 开始,后续所有 case 的值都会输出
Java Character类
常用方法:
isLetter() 是否是一个字母
isDigit() 是否是一个数字字符
isWhitespace() 是否是一个空白字符
isUpperCase() 是否是大写字母
isLowerCase() 是否是小写字母
toUpperCase() 指定字母的大写形式
toLowerCase() 指定字母的小写形式
toString() 返回字符的字符串形式,字符串的长度仅为1
Java String类
1-创建字符串
//String创建的字符串存储在公共池中
String a = "hello"; //String直接创建
String b = "hello"; //String直接创建
//a和b指向公共池中的同一个hello字符串
//new 创建的字符串对象存储在堆上
String a1 = new String("hello"); // String 对象创建
String b1 = new String("hello"); // String 对象创建
//a1和b1在堆中创建的是不同字符串
2-String常用方法
length() 字符串长度
concat() 字符串连接
char charAt(int index) 返回指定索引处的char值
boolean endsWith(String suffix) 是否以指定的后缀结束
boolean matches(String regex) 字符串是否匹配给定的正则表达式
String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串
char[] toCharArray() 将此字符串转换为一个新的字符数组
String toLowerCase() 将此 String 中的所有字符都转换为小写
String toUpperCase() 将此 String 中的所有字符都转换为大写
String trim() 返回字符串的副本,忽略前导空白和尾部空白
3-StringBuffer和StringBuilder
StringBuffer(JDK1.0):
线程安全,执行速度慢
StringBuilder(JDK5.0):
非线程安全,执行速度快
使用原则:
如果要操作少量的数据,用String
单线程操作大量数据,用StringBuilder
多线程操作大量数据,用StringBuffer