一、基本数据类型
boolean 基本数据类型之一,声明布尔类型的关键字
byte 基本数据类型之一,字节类型,8位 128
short 基本数据类型之一,短整数类型,16位 300000
int 基本数据类型之一,整数类型,32位 30亿
long 基本数据类型之一,长整数类型,64位
float 基本数据类型之一,单精度浮点数类型32位
double 基本数据类型之一,双精度浮点数类型64位
char 基本数据类型之一,字符类型 16位
void 声明当前成员方法没有返回值
二、分支
if 条件语句的引导词
else 用在条件语句中,表明当条件不成立时的分支
switch 分支语句结构的引导词
switch(expression){
case value :
break;
case value :
break;
default : //可选
}
三、循环
do 用在do-while循环结构中
while 用在循环结构中
for 一种循环结构的引导词
goto 保留关键字,没有具体含义
break 提前跳出一个块
continue 回到一个块的开始处
排序
冒泡排序:从零开始大的往后放,长度递减,把最大的放到最后
int temp;//定义一个临时变量
for(int i=0;i<arr.length-1;i++){//冒泡趟数
for(int j=0;j<arr.length-i-1;j++){
//如果顺序不对,则交换两个元素
if(arr[j]>arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
选择排序:从i+1开始每趟选择最小的和第i位交换,选择最小的
for(int i=0;i<lenth-1;i++){
int minIndex = i;
for(int j=i+1;j<lenth;j++){
if(array[j]<array[minIndex]){
minIndex = j;
}
}
if(minIndex != i){
int temp = array[i];
array[i] = array[minIndex];
array[minIndex] = temp;
}
}
插入排序:从第i位开始到第0位,跟第i+1位比较,大于就替换
for (int i = 1; i < arr.length; i++ ) {
int temp = arr[i];
int j = i - 1;
for (; j >= 0 && arr[j] > temp; j-- ) {
arr[j + 1] = arr[j];
}
arr[j + 1] = temp;
}
迭代
public static void main(String[] args) {
int month=5;
int pair = f(month);
System.out.println("答:经过" + month + "个月后,兔子的总数为" + pair + "对。");
}
public static Integer f(Integer month){
if (month ==1 || month == 2) {
return 1;
}else {
return f(month - 1) + f(month - 2);
}
}
四、类
package 包
import 表明要访问指定的类或包
class 声明一个类
new 用来创建新实例对象
abstract 表明类或者成员方法具有抽象属性
interface 接口
extends 表明一个类型是另一个类型的子类型。对于类,可以是另一个类或者抽象类;对于接口,可以是另一个接口
implements 表明一个类实现了给定的接口
this 指向当前实例对象的引用
super 表明当前对象的父类型的引用或者父类型的构造方法
抽象类和接口的区别
抽象类中有构造方法(不写会有隐式构造方法),但不能实例化;接口没有构造方法。
抽象类中可以有非抽象方法,接口中一般只有抽象方法。
抽象类中可以有变量;接口中只能是常量
抽象类只能单继承类;接口可以继承多个接口
实现类只能继承一个抽象类;但可以实现多个接口
继承和构造
如果一个类没有任何显式创建的构造器则该类默认会有一个无参构造器;如果显式创建了有参构造器则该类就不再有默认无参构造器。子类的构造方法中必须显示或隐式调用其基类的构造方法。可以通过super(argument_list)来显示调用,且super调用必须在首行,若在子类构造方法中没有显示调用,系统默认会进行隐式调用基类的无参数构造方法。因此若此时基类中没有无参数构造器则会编译出错。
重载和重写
重载是在一个类里面多个同名但入参不同的方法,调用者根据入参类型和数量判断调用哪个方法,返回值可以不一样。可以用this引用其他方法,但必须放在第一行。
重写是在子类中重新定义父类中的方法,返回值类型是父类的子类。只能比父类抛出更少的异常,访问权限不能比父类的小。被覆盖的方法是private的话,就不是重写,而是定义的一个新方法。可以用super引用父类方法。
内部类
内部类的创建依赖外部类对象, O.I inner =new O().new I();
内部类可以直接访问外部类的成员变量和方法,当成员内部类拥有和外部类同名的成员变量或这方法时,默认情况下访问的是内部类的成员,访问外部类的同名成员:外部类.this.成员变量
匿名内部类只能访问局部的final变量 内部类可以达到类似"多重继承"的效果
五、方法
public 一种访问控制方式:classpath下所有类
protected 一种访问控制方式:子类,同一个包内
default 一种访问控制方式:本包内
private 一种访问控制方式:本类
六、异常处理
try 尝试一个可能抛出异常的程序块
catch 用在异常处理中,用来捕捉异常
finally 用于处理异常情况,用来声明一个基本肯定会被执行到的语句块
throw 抛出一个异常
throws 声明在当前定义的成员方法中所有需要抛出的异常
return 从成员方法中返回数据
七、修饰
static 表明具有静态属性
final 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量。
final和static合理使用可以提高程序性能。
static可以修饰变量、方法、代码块
修饰变量:只能修饰全局变量,静态变量可以使用类名直接访问,也可以使用对象名进行访问。非静态和静态方法中均可以访问static变量。
静态方法:静态方法不能直接访问非静态变量,只能通过对象访问,不能使用this。
静态代码块:加载时执行,且只会执行一次,只能给静态变量赋值,不能接受任何参数。
final 可以修饰变量、方法、类
final变量:常量,必须在声明的时候初始化或在构造方法中初始化,不能修改。
final方法:不可以被子类方法重写。
final类:不能被继承,不能是abstract。
static final、static、final变量的区别
static 变量在赋值后可以被任何类对象修改,与对象无关。
final 只能在构造方法中改变值,new不同对象值不一样。
static final 与对象无关的常量,被static final修饰的对象必须被赋值,否则编译不通过。
八、其他
transient 声明不用序列化的成员域
enum 枚举
synchronized 表明一段代码需要同步执行
volatile 表明两个或者多个变量必须同步地发生变化
volatile原理