数据类型
- 基本数据类型
- 整型
- byte:1个字节
- short:2个字节
- int:4个字节(默认类型)
- long:8个字节
- 浮点型
- float:4个字节
- double:8个字节(默认类型)
- 字符
- char:2个字节
- 布尔类型
- boolean
- 整型
- 引用数据类型(类,接口,数组)
位运算符
-
<<
: 左移几位就乘以2的几次方 -
>>
: 右移几位就除以2的几次方 -
>>>
: 无符号右移运算符 -
<<<
: 无符号左移运算符
函数,构造函数,抽象类,接口
- 函数
- 函数也叫方法
- 方法的重载(overload):方法名相同,参数不同
- 方法的重写(override):
- 存在继承关系中,子类重写父类方法
- 子类方法权限一定要大于等于父类方法权限
- 覆盖是重写的另一种叫法
- 静态只能覆盖静态
- 构造函数
- 作用:用于给对象的属性进行初始化
- 特点:
- 你不定义空参数的构造函数,系统会自动给一个空参构造,你定义了构造函数无论是有参还空参的,系统就不再生成。
- 子类中所有的构造方法默认都会访问父类中空参数的构造方法,因为每一个构造方法的第一行都有一条默认的语句super();
- 重载构造函数:参数列表不同的构造函数
- 抽象类(abstract)
- 说明:abstract修饰的类就是抽象类
- 抽象关键字abstract不可以和哪些关键字共存?
- private:abstrac修饰的方法就是为了让子类继承并重写的
- static:那么这个时候抽象方法就可以可以通过类名调用,但是这样是没有意义的
- final:final修饰的方法不能被重写。所以它和abstract冲突
- 应用:模版方法设计模式
- 接口(interface)
- 说明:interfacet修饰的类,所有的方法都是抽象的
- 特点:
- 只有成员变量和成员方法
- 成员变量 默认修饰符 public static final
- int X = 20;
- 其实是这样的 public static final int X = 20;
- 成员方法 默认修饰符 public abstract
- void show();
- 其实是这样的 public abstract void show();
- 高内聚,低耦合:降低了程序的耦合性
数组
数组的定义:
// 数组中元素未确定
int[] arr = new int[3];
int[0] = 3;
// 数组元素已确定
int[] arr = new int[]{1,2,3};
int[] arr = {1,2,3};
// 二维数组的定义
int[][] arr = new int[3][2];
int[][] arr = new int[3][];
int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};
java内存机制
栈:
- 存放什么:基本数据类型,对象引用
- 变量使用完后立即释放
堆:
- 存放什么:对象实体,数组
- 堆内存的特点:
- 每个实体都有内存地址
- 堆内存变量都有默认初始化
- 当实体不再使用时,会在jvm空闲的时候,通过垃圾回收机制GC回收
方法区:
- 存放什么:静态成员变量(类变量)
异常(Exception)
-
Throwable
- Error:重大问题
- Exception:除了 RuntimeException 和其所有子类问题
- RuntimeException:运行时报异常
- ArrayIndexOutOfBoundsException:当你访问到数组中的最后一个元素时,还想继续访问,这个时候,会发生角标越界异常。
- NullPointerException:当数组不在指向某个实体时,你还继续访问,就会发生空指针异常。
- FileNotFoundException:创建FileInputStream对象, 指定一个文件. 当文件不存在时会抛出
-
异常的处理:
try{ ... }catch(Exception e){ ... }finally{ //关闭流,数据库等,释放资源 ... }
-
Throwable类中常用的方法
- getMessage():返回此 throwable 的详细消息字符串
- toString():获取异常类名和异常信息,返回字符串
- printStackTrace():获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void
-
自定义异常
- 自定义类继承Exception或者其子类(RuntimeException)
static和final关键字
static关键字
- 说明:static是 “静态” 关键字,可以修饰成员变量和成员方法
- 什么时候使用:当类中的成员需要被所有对象共享时,用static修饰
- 特点:
- 随着类的加载而加载,随着类的消失而消失,生命周期最长
- 优先于对象而存在
- 被所有的对象所共享
- 比非静态成员多了一种访问方式(类名.调用)
- 静态成员变量(类变量)和非静态的成员变量(实例变量)的区别:
- 存在内存中的位置:
- 静态变量(类变量)随着类的加载,存在于方法区
- 非静态成员变量(实例变量)随着对象的创建而建立,存在于堆内存
- 生命周期:
- 静态变量的生命周期长,随着类的消失而消失
- 非静态成员变量的生命周期短,随着对象的消失而消失
- 所属不同:
- 静态变量也称为类变量,属于整个类,被整个类的对象所共享
- 非静态成员变量也成为实例变量,是对象的特有数据,所属于对象
- 存在内存中的位置:
final关键字
- final可以用来修饰类:被fainl修饰的类不能被继承
- final可以用来修饰成员方法:被final修饰的成员方法不能被重写。
- final可以用来修饰变量:被final修饰的变量为常量,值不能被修改。
代码块
- 局部代码块
- 一般语句顺序执行
- 构造代码块
- 每次创建对象都会被调用,用于初始化对象
- 静态代码块
- 只会执行一次,用于初始化类
- 加载顺序:静态代码块-->构造代码块-->构造函数-->局部代码块
public class Main {
public static void main(String[] args) {
Person p = new Person();
p.test();
}
}
class Person{
static{
System.out.println("静态代码块:只会执行一次,用于初始化类");
}
{
System.out.println("构造代码块:每次创建对象都会被调用,用于初始化对象");
}
public Person() {
System.out.println("构造函数:Person");
}
public void test(){
System.out.println("A");
{
System.out.println("局部代码块:一般语句顺序执行");
}
System.out.println("B");
}
}
/**
静态代码块:只会执行一次,用于初始化类
构造代码块:每次创建对象都会被调用,用于初始化对象
构造函数:Person
A
局部代码块:一般语句顺序执行
B
*/
Object类的简单介绍
- getClass():返回对象的运行时类
- hashCode():哈希值
- toString():打印
- equals()
- ==号和equals方法的区别:
- ==号既可以比较基本数据类型,也可以比较引用数据类型,比较基本数据类型比较的是值,比较引用数据类型比较的是地址值
- equals方法只能比较引用数据类型;equals方法在Object类中的定义比较的是引用数据的内存地址;但是我们在自定义类如果想比较对象中属性,就需要重写equals方法
- ==号和equals方法的区别:
- finalize():垃圾收集器将对象从内存中清除出去之前做必要的清理工作
StringBuilder和StringBuffer
StringBuilder和StringBuffer的区别:
- StringBuilder是线程不安全的,所以效率比较高,1.5版本出现
- StringBuffer是线程安全的,效率相对较低,1.0版本出现的
递归
- 递归的好处:
- 可以不知道循环次数 (方法调用次数)
- 递归的弊端:
- 有可能会栈内存溢出
- 构造函数是否可以用递归?
- 构造函数不能使用递归, 因为如果可以, 那将不断创建对象, 永不停止
- 递归调用是否必须有返回值?
- 递归调用可以有返回值也可以没有
网友评论