1 数据类型
1.1 基本数据类型
Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
| 类型 | 位长 | 默认值 | 取值范围 | 例子 | 包装类 |
|---|---|---|---|---|---|
| byte(字节型) | 8 | 0 | -128-127 | byte a=100 | Byte |
| short(短整型) | 16 | 0 | -2^15~ 2^15-1 | short s=1000 | Short |
| int (整型) | 32 | 0 | -2^31~ 2^31-1 | int a=100000 | Integer |
| long(长整型) | 64 | 0L | -2^63~ 2^63-1 | long a=100000L | Long |
| float(单精度浮点型) | 32 | 0.0f | float f1=234.5f | Float | |
| double(双精度浮点型) | 64 | 0.0d | double d1=123.4 | Double | |
| boolean(布尔型) | 1 | false | boolean one=true | Boolean | |
| char(字符型) | 16 | char letter='A' | Character |
1.2 包装类
由基本类型向对应的包装类转换称为装箱,例如把 int 包装成 Integer 类的对象;
包装类向对应的基本类型转换称为拆箱,例如把 Integer 类的对象重新简化为 int;
int m = 500;
integer obj = new Integer(m);//手动装箱
int n = obj.intValue();//手动拆箱
String str = ”123”;
int m = Integer.parseInt(str,10)//将字符串转换为整数,10表示进制,m最后输出为整数123
String s = Integer.toString(m)//将整数转换为字符串
1.3 引用数据类型
Java中的基本数据类型只有以上8个,除了基本类型,剩下的都是引用类型。引用类型指向一个对象,它的值是一个地址,如果一个变量保存的是一个对象的地址,那么该变量是引用类型的。
所有引用类型默认值都是null。
//首先给变量分配一个保存地址的空间,然后通过new Studeng()开辟一个空间,最后赋值给student
Student student=new Student();
1.4 Java常量
常量在程序运行时不能被修改,在Java中使用final关键字来修饰常量。
final double PI = 3.1415927
- 修饰变量:表示该变量被赋予的值是不可更改的。被final修饰的变量必须被初始化。
- 修饰对象:表示该变量被赋予的引用是不可变的。
- 定义方法:该方法不能别子类重写,但是不影响它被子类继承。
- 定义类:final类不允许被继承,编译器在处理时把所有方法都当做final的。因此final类比普通类拥有更高的效率。要想做到final类的属性值不可改变,还要给其增加final修饰。
1.5 String类
java.lang.String类使用了final修饰,不能被继承
String st r= "Hello World!"//创建字符串
1.5.1 常用方法
int len = str.length();//返回字符串长度
char ch = charAt(0);//返回字符串中指定位置的字符
String str1 = str.substring(2);//该方法从下标为2位置起,从当前字符串中取出剩余的字符作为一个新的字符串返回
String str2 = str.substring(2,5);//该方法从下标为2位置起,从当前字符串中取出到下标为5-1位置的字符作为一个新的字符串返回
String str3 = "aa".concat("bb").concat("cc");//相当于String str = "aa"+"bb"+"cc"
int a = str.indexOf('o');//用于查找当前字符串中字符或子串,返回字符或子串在当前字符串中从左边起首次出现的位置,若没有出现则返回-1
int b = str.indexOf("W",2);//该方法从下标为2位置向后查找
int c = str.lastIndexOf("W")//从末尾位置向前查找
int d = str.lastIndexOf("W",2);//从下标为2位置向前查找
String str4 = str.toLowerCase();//全部转换为小写
String str5 = str.toUpperCase();//全部转换为大写
String str6 = str.replace('l','g');//字符串中所有l换程g
String str7 = str.replaceFirst("or","and");//用and替换遇到的第一个or子串
String str8 = str.replaceAll("asd","fgh");//用fgh替换所有asd子串
String str9 = str.trim();//去掉str两端的空格,中间的空格不做处理
boolean a = str.statWith("He");//判断str是否以He开头
boolean b = str.endWith("ld");//判断str是否以ld结尾
boolean c = str.contains("stu");//判断str中是否包含stu
String[] str10 = str.split(" ");//将str以空格分隔
String str11 = "test ".concat("file");//连接字符串
boolean retVal = " ".equals( str );//字符串比较
1.5.2 String、StringBuffer、StringBuilder区别
String(字符串常量):经常改变内容的字符串最好不要用String
String s="abc";//定义一个变量s,给其赋值"abc"
s=s+1;//创建一个新的对象s,用来执行s=s+1,旧的对象会被JVM的GC回收
StringBuffer(字符串变量-线程安全):字符串经常发生改变,可使用,主要是append()和insert()方法,append将字符串添加到末端,insert可添加到指定位置
StringBuilder(字符串变量-非线程安全):字符串经常发生改变,可使用,比StringBuffer效率高,两者方法基本相同
效率从高到底的顺序依次是:StringBuilder > StingBuffer > String
1.5.3 字符串拼接
String 对象的字符串拼接其实是被JVM 解释成了StringBuffer 对象的拼接,所以这时候String 对象的速度并不会比StringBuffer 对象慢,而特别是以下的字符串对象生成中,String 效率是远要比StringBuffer 快的:
String S1 = “This is only a” + “ simple” + “ test”;
StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);
在JVM 眼里,这个
String S1 = “This is only a” + “ simple” + “test”; 其实就是:
String S1 = “This is only a simple test”; 所以当然不需要太多的时间了。
如果你的字符串是来自另外的String 对象的话,速度就没那么快了,譬如:
String S2 = “This is only a”;
String S3 = “ simple”;
String S4 = “ test”;
String S1 = S2 +S3 + S4;
这时候 JVM 会规规矩矩的按照原来的方式去做
在大部分情况下 StringBuffer > String
1.6 数据类型转换
不能对boolean类型进行类型转换;不能把对象类型转换成不相关类的对象;在把容量大的类型转换为容量小的类型时必须使用强制类型转换;转换过程中可能导致溢出或损失精度
1.6.1 自动类型转换
必须满足转换前的数据类型的位数要低于转换后的数据类型。
char c1 = 'a';//定义一个char类型
int i1 = c1;//char自动类型转换为int
1.6.2 强制类型转换
条件是转换的数据类型必须是兼容的。
int i1 = 123;
byte b = (byte)i1;//强制类型转换为byte
1.6.3 字符串与基本数据类型的转换
static String valueOf(char data[])
static String valueOf(char data[], int offset, int count)
static String valueOf(boolean b)
static String valueOf(char c)
static String valueOf(int i)
static String valueOf(long l)
static String valueOf(float f)
static String valueOf(double d)
2 基本语法
2.1 public、protected、private、default区别
| 类内部 | 本包 | 子类 | 外包 | |
|---|---|---|---|---|
| public | 可以访问 | 可以访问 | 可以访问 | 可以访问 |
| protected | 可以访问 | 可以访问 | 可以访问 | 不可访问 |
| default | 可以访问 | 可以访问 | 不可访问 | 不可访问 |
| private | 可以访问 | 不能访问 | 不可访问 | 不可访问 |
2.2 循环控制语句
- while循环
- do...while循环:至少会执行一次
- for循环
- foreach:不需要下标时可用
int [] numbers = {10, 20, 30, 40, 50};
for(int x : numbers ){
System.out.print( x );
}
2.3 条件控制语句
- if-else
- switch-case
2.4 break与continue区别
break:跳出整个循环
continue:结束当此循环
3 异常
通常引起异常的原因包括用户输入了非法数据,要打开的文件不存在,网络通信时连接中断,JVM内存溢出等。
-
检查性异常:编译时不能被忽略,需要显式地抛出或者try-catch掉,比如打开一个文件,可能这个文件不存在,FileReader类的构造方法SDK中有抛出异常,则调用的时候比如抛出异常或者try-catch,否则程序无法编译通过。
image.png 运行时异常:编译时被忽略,比如除法运算中除数为0。
错误:错误不是异常。
-
层次结构
image.png 常用异常方法
public String getMessage()//返回关于发生异常的详细信息
public void printStackTrace()//错误输出流
- throws/throw关键字
如果一个方法没有捕获到一个检查性异常,则该方法必须使用throws来声明。一个方法可以声明多个异常,多个异常之间用逗号隔开。
import java.io.*;
public class className
{
public void deposit(double amount) throws RemoteException
{
// Method implementation
throw new RemoteException();
}
//Remainder of class definition
}
- finally关键字:无法是否发生异常,finally代码块中的代码总是会被执行。
- 声明自定义异常
1.所有异常都必须是Throwable的子类
2.写一个检查性异常类需要继承Exception类
3.写一个运行时异常类需要继承RuntimeException类。

