Java基础
Posted zmy98
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础相关的知识,希望对你有一定的参考价值。
java基础
基本数据类型
-
byte/8----------------------->Byte
-
char/16---------------------->Character
-
short/16--------------------->Short(java8中缓存池的默认大小-128~127)
-
int/32------------------------>Integer(java8中缓存池的默认大小-128~127)
-
float/32---------------------->Float
-
long/64---------------------->Long
-
double/64------------------->Double
-
boolean/~-------------------->Boolean
boolean只有两个值:true、false,可以使用1bit来存储,但是具体大小没有明确规定。JVM会编译时期将boolean类型的数据转换为int,使用1来表示true,0来表示false。JVM支持boolean数组,但是是通过读写byte数组来实现的
String
- String被声明为final,因此不可被继承,不可变。(Interger等包装类也不能被继承)
- 在java8中,使用char数组存储数据
- 在java9中,使用byte数组存储字符串,同时使用coder来标识使用了哪种编码
不可变的好处:
1、可以缓存hash值
2、String tool的需要
3、安全性
4、线程安全
-
String,StringBuffer,StringBuilder
-
可变性
-
String不可变
-
StringBuffer和StringBuilder可变
-
-
线程安全
- String不可变,线程安全
- StringBuilder线程不安全
- StringBuffer线程安全,内部使用synchronilder
-
运算
- java的参数是以值传递的形式传入方法中,而不是引用传递
- java不能隐式执行向下转型,因为这会使得精度降低
- 使用+=或者++运算符会执行隐式类型转换
关键字
-
final
- 数据
- 对于基本数据类型,final使数值不变
- 对于引用类型,final使引用不变,引用对象本身可以修改
- 方法
- 声明方法不能被子类重写
- 类
- 声明类不允许被继承
- 数据
-
static
- 静态变量
- 静态变量:又称为类变量,也就是说这个变量属于类的,类所有的实力都共享静态变量,可以直接通过类名来访问它。静态变量在内存中只存在一份
- 实例变量:每创建一个实例就会产生一个实例变量,它与该实例同生共死
- 静态方法
- 静态方法在类加载的时候就存在了,它不依赖于任何实例,所以静态方法必须有实现,也就是说它不能是抽象方法
- 只能访问所属类的静态字段和静态方法,方法中不能有this和super关键字,因为这两个关键字与具体对象关联
- 静态语句块
- 静态语句块在类初始化时运行一次
- 静态内部类
- 非静态内部类依赖于外部类的实体类,也就是说需要先创建外部类实例,才能用这个实例去创建非静态内部类,而静态内部类不需要
- 静态变量
public class A{
private int x; //实例变量
private static int y; //静态变量
public static void func1(){
int a = y;
//int b = x; 只能访问静态字段和静态方法
}
//静态语句块
static {
System.out.println("hello word");
}
//静态内部类
static class func2(){
}
}
public abstract B{
public static void func1(){
//静态方法必须有实现
}
}
初始化顺序:
父类(静态变量,静态语句块)
子类(静态变量,静态语句块)
父类(实例变量,普通语句块)
父类(构造函数)
子类(实例变量,普通语句块)
子类(构造函数)
反射
每个类都有一个Class对象,包含了与类有关的信息。当编译一个新类时,会产生一个同名的.class文件,该文件内容保存着Class对象。
类加载相当于Class对象的加载,类在第一次使用时才动态的加载到JVM中。也可以使用Class.forName("com.mysql.jdbc.Driver")这种方式来控制类的加载,该方法会返回一个CLass对象。
反射可以提供运行时的类信息,并且这个类可以在运行时才加载进来,甚至在编译时期该类的.class不存在也可以加载进来。
优点:
- 可扩展性:应用程序可以利用全限定名创建可扩展的实例,来使用来自外部的用户自定义类
- 类浏览器和可视化开发环境
- 调试器和测试工具
缺点:
- 性能开销:反射涉及到了动态类型的解析,所以JVM无法对这些代码进行优化。因此反射的效率要比那些非反射操作低得多。
- 安全限制
- 内部暴漏
以上是关于Java基础的主要内容,如果未能解决你的问题,请参考以下文章