java基础
java基础
java基础的知识点: 基础语法: 数据类型、运算符、标识符和关键字、流程控制(顺序/分支/循环)、数组 面向对象1: 类和对象、方法(方法重写和方法覆盖)、成员变量和局部变量、封装/继承/多态、构造器和初始化块 面向对象2: 抽象类、静态类、内部类、枚举类、接口、final关键字、单例模式、垃圾回收 包和权限修饰符、正则表达式 java常用API: Object类、日期日历类、数学类、系统类、包装类
java的基本数据类型
数据类型 | 字节 | 范围 | 默认值 |
---|---|---|---|
byte | 1 | -2^7 ~ 2^7-1 | 0 |
short | 2 | -2^15 ~ 2^15-1 | 0 |
int | 4 | -2^31 ~ 2^31-1 | 0 |
long | 8 | -2^63 ~ 2^63-1 | 0 |
float | 4 | / | 0.0f |
double | 8 | / | 0.0d |
char | 2 | / | '\u0000' |
boolean | 4 | / | false |
自动类型转换
自动转换按从低到高的顺序转换。不同类型数据间的优先关系如下:
低--------------------------------------------->高
byte,short,char-> int -> long -> float -> double
JDK和JRE的区别
JDK: Java Development Kit,java开发工具包,JDK包含JRE
JRE: Java Runtime Environment,java运行时环境
运行java程序只需安装JRE,编写java程序需要安装JDK
==和equls的区别
- == 比较对象的引用
- equals 一般比较对象的值
- 基本类型和其包装类型中,==比较的是值是否相同
- 引用类型中,==比较的是引用是否相同
- equals 默认比较对象的引用,但多数类重写了equals方法,所以一般比较的是对象的值
//面试题1 String a = "hello"; String b = "hello"; String c = new String("hello"); String d = new String("hello"); System.out.println(a==b); //true System.out.println(b==c); //false System.out.println(c==d); //false System.out.println(b.equals(c)); //true System.out.println(c.equals(d)); //true //面试题2 Integer a = 10; int b = 10; Integer c = Integer.valueOf(10); Integer d = new Integer(10); System.out.println(a==b); //true System.out.println(a==c); //true System.out.println(b==c); //true System.out.println(b==d); //true System.out.println(c==d); //false System.out.println(a.equals(c)); //true System.out.println(a.equals(d)); //true System.out.println(c.equals(d)); //true
两个对象的hashCode相同,则equals也一定为true?
不一定,因为在散列表中,hashCode()相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等
String、StringBuffer和StringBuilder区别
- 数据是否可变
- String的使用不可变数组
- StringBUffer和StringBuilder使用的是可变数组
- 线程是否安全
- StringBuilder线程不安全但效率高
- StringBuffer线程安全但效率低
- 其他
- StingBUilder和StringBUffer有相同的父类AbstractStringBuilder
- 速度对比: StringBuilder>StringBuffer>String
final关键字的作用
- final修饰的类不能被继承
- final修饰的方法不能被重写或继承
- final修饰的变量是常量,必须定义初始值,值不能被修改
- final不能修饰构造方法
java向上取整、向下取整、四舍五入
//向上取整 System.out.println(Math.ceil(0.5)); //1.0 System.out.println(Math.ceil(-2.5)); //-2.0 System.out.println(Math.ceil(2.3)); //3.0 System.out.println(Math.ceil(-1.8)); //-1.0 //向下取整 System.out.println(Math.floor(0.5)); //0.0 System.out.println(Math.floor(-2.5)); //-3.0 System.out.println(Math.floor(2.8)); //2.0 System.out.println(Math.floor(-1.2)); //-2.0 //四舍五入 System.out.println(Math.round(0.5)); //1 System.out.println(Math.round(-2.5)); //-2 System.out.println(Math.round(2.6)); //3 System.out.println(Math.round(-1.3)); //-1
String类常用方法
- indexOf() 返回字符索引
- charAt() 返回索引上的字符
- replace() 字符串替换
- split() 字符串分割
- trim() 去字符串两端空白
- getBytes() 返回byte类型数组
- toLowerCase() 转小写字母
- toUpperCase() 转大写字母
- substring() 截取字符串
BIO、NIO、AIO区别
- BIO 同步阻塞IO,简单方便,并发处理能力低
- NIO 同步非阻塞IO,客户端和服务端通过通道(channel)通讯,实现了多路复用
- AIO 异步非正式IO,基于事件和回调机制
switch可以使用的数据类型
char byte short int
Character Byte Short Interger
String enum
运算符优先级
计算 4&5 4^5 4&10>>1 4|5
- 按位与(&)
- 只有两个数的二进制同时为1,结果才为1
- 0 & 0 = 0 0 & 1 = 0
- 1 & 0 = 0 1 & 1 = 1
- 按位或(|)
- 只要两个数的二进制有一个为1,结果为1
- 0 | 0 = 0 0 | 1 = 1
- 1 | 0 = 1 1 | 1 = 1
- 异或(^)
- 两个数值不同,结果为1
- 0 ^ 0 = 0 0 ^ 1 = 1
- 1 ^ 0 = 1 1 ^ 1 = 0
// 说明 '为分隔符,无实际意义 4 0000'0100 5 0000'0101 10 0000'1010 4&5 0000'0100 --> 4 4|5 0000'0101 --> 5 4^5 0000'0001 --> 1 4&10>>1 // >>优先级大于& >>表示右移 10>>1 0000'0101 --> 5 4&10>>1 --> 4&5 --> 4
Files的常用方法
* exits() 文件路径是否存在 * createFile() 创建文件 * createDiectory() 创建文件夹 * delete() 删除文件或目录 * copy() 复制文件 * move() 移动文件 * size() 文件个数 * read() 读取文件 * write() 写入文件
子类和父类的问题
子类不可以继承父类的构造方法,只可以调用父类的构造方法
java内部类
内部类创建对象
静态内部类
Outer.Inner inner=new Outer.Inner()
非静态内部类
Outer.Inner inner=new Outer().new Inner()