文章目录
前言
此篇博客整理一些Java的基础知识,虽然很基础但却非常重要,也容易出现错误。
一、关于基本数据类型的基础知识
1.默认值以及强制类型转换
关于基本数据类型以及默认数值如下表所示:
注意:
(1)char的类型占两个字节,但取值为0~65535;
(2)boolean的初始值为false,不是true;
(3)范围高的数据类型赋值给低范围的基本数据类型需要强制类型转换,例如long型的数据赋值给int型的数据需要强制类型转换。因为long占8个字节比int的4个字节所表示的范围要大得多,需要强制类型转换,牺牲位数;
(4)不能简单的认为占的字节数高的赋值字节数低的都要进行强制类型转换。例如long赋值给float却不需要强制类型转换。float占4个字节即32位,根据IEEE-754关于浮点数的标准,最高位为符号位S,接着剩下8位指数位E,剩下的32位为尾数M,故V=(-1)^S * M* 2^E。浮点数在内存中的32位并不是简单的转换为十进制,而是通过公式计算而来。虽然float占4个字节但浮点数的最大值要比long的范围要大。
2.浮点数
Java中声明一个float型的变量有以下几种:
float num = 1.5f;
float num = 1.5F;
声明一个doublet型的变量有以下几种:
double num = 1.5d;
double num = 1.5D;
double num = 1.5;
没有特别指出后缀则为double型,float num=1.5是不正确的声明方式,需要加上f或者强制类型转换float num=(float)1.5
二、关于构造方法的基础知识
- Java类中至少要有一个构造方法,如果没有实现构造方法才会提供一个默认的构造方法,默认的构造方法会自动给成员变量赋初值(类对象初始化为null)
- 构造方法不能被继承、重写
- 构造方法不能被static、final、synchronized、abstract、native修饰,可被public、private、protected修饰
- 除了用new关键字调用构造方法外,可以在类内部使用this.构造方法()
,可以在子类中通过super(参数)调用,也可以使用反射机制
三、关于静态方法的基础知识
静态方法也称为类方法。被static修饰的方法称为静态方法,访问静态方法直接类名.静态方法名即可。
注意:
静态方法可以访问静态成员变量,不可以访问实例成员变量;
在类方法中不能有this关键字,直接调用类方法即可;
在类方法中可以通过创建实例对象调用类的实例方法
实例方法可以访问静态成员变量也可以访问实例成员变量。
四、关于访问权限的基础知识
1.类成员以及方法
类成员以及方法的访问权限有4种:public、protected、default、private。
- public :所有类中都可被访问
- protected:在声明protected变量的类中访问或该类的子类或其他包的子类访问
- default:可省略,只能在声明的类中或同一包中的类访问
- private:限制在本类访问
2.类
类的访问权限只有两种:public、默认
五、关于成员变量以及局部变量的基础知识
1.成员变量
有以下的java代码,声明两个成员变量,对这两个成员变量不赋初值,程序照样能运行。
public class Test {
private String text;
private int num;
public int getNum() {
return num;
}
public String getText() {
return text;
}
}
public class Main {
public static void main(String[] args) {
Test test = new Test();
System.out.println(test.getNum());
System.out.println(test.getText());
}
}
2.局部变量
有以下的java代码,声明一个局部变量temp,但不赋初值,程序将报错。
public class Main {
public static void main(String[] args) {
find();
}
public static void find(){
int temp;
System.out.println(temp);
}
}
六、关于Switch语句
switch结构支持四种基本数据类型:byte、short、char、int以及枚举类型,支持包装类Byte、Short、Character、Integer,会自动拆箱。不支持float、double及其包装类。
七、Java三大特性
Java三大特性分别为封装、继承、多态。下面一 一进行介绍。
1.封装
将对象的属性和方法做适当程度的“包装”,只留下操作接口。防止外部访问该类的代码和数据
2.继承
子类继承父类的特征和行为使得子类对象具有父类的实例域和方法,能实现代码复用。
注意:
- 子类不能继承父类中访问权限为private的成员变量和方法
- 子类可以重写父类方法以及命名与父类同名的成员变量
- java类不支持多重继承
- 构造方法不能被继承
3.多态
同一行为具有多个不同表现形式或形态的能力,分为编译时多态和运行时多态。
重载就是编译时多态,什么是重载?
重载就是同名方法但参数数量、类型不一样,有成员方法重载、构造方法重载。
运行时多态就是指对于覆盖或继承的方法,Java运行时根据调用该方法的实例的类型来决定调用哪种方法
八、关于抽象类
Java当中抽象类用abstract修饰。
注意:
- 当一个类中含有抽象方法时必须使用abstract修饰类,在abstract前不能用private、static、synchronized、native修访问修饰符修饰
- 抽象类中可以不包含抽象方法
- 抽象类中必须要有构造方法,没有提供构造方法会生成一个默认的构造方法
- 抽象类虽然有构造方法,但却不能直接用new实例化一个抽象类对象
- 抽象类的构造方法不能声明为abstract
- 子类通过extends继承抽象类,只能覆盖抽象类的所有抽象方法才能实例化,否则子类需要修饰为abstract抽象类
- 抽象类可以拥有默认方法,抽象类可以拥有成员成员变量
九、关于接口
java当中接口用interface修饰。
注意:
- Java1.8之前接口不可以拥有默认方法,java1.8之后允许在接口包含带有具体的实现方法,使用default修饰,该方法称为默认方法。在实现类中可以按需重写。默认方法只能在实现类中或通过实现类对象调用
- 接口中的成员变量默认为public static final,方法默认为public,成员变量必须初始化。实现接口中的方法必须标识为public 或者 abstract,否则编译出错。在JAVA 8 或者更高的版本中的可以使用default
- 一个类可以实现一个或多个接口
- 一个接口可以通过extends继承一个或多个接口
- 实现接口方法必须满足“三同一大一小”:
三同:方法名、返回值类型、形参相同
一大:访问权限>=重写前
一小:抛出异常<=重写前 - 接口除了可以用public外,可以使用abstract修饰符,接口是一种特殊的抽象类