重要的知识点总结
1、源文件的声明
源文件指的就是.java的文件
说明:
- 每一个源文件可以定义多个类,但是只能有一个public类,可以有多个非public类
- 源文件的名称应该和public类名一样
- 内部类的访问权限可以是public、protected、default、private(内部类和普通类一样定义)
//源文件名称为TestClassName.java public class TestClassName { //内部类 public class InnerClass{ } protected class InnerClass1{ } private class InnerClass2{ } class InnerClass3{ } } class TestClassName1{ } class TestClassName2{ }
2、基本类型和引用类型
8种基本类型中有6中数字类型,1种布尔型,1种字符型,默认值及其范围如下表:
基本类型 | 取值范围 | 默认值 |
byte | -128(-2^7)~127(2^7-1) | 0 |
short | -32768(-2^15)~32767(2^15 - 1) | 0 |
int | -2,147,483,648(-2^31)~2,147,483,647(2^31 - 1) | 0 |
long | -9,223,372,036,854,775,808(-2^63)~9,223,372,036,854,775,807(2^63 -1) | 0L |
float |
1.4E-45~3.4028235E38 |
0.0f |
double |
4.9E-324~1.7976931348623157E308 |
0.0d |
boolean | false | |
char | 'u0000' |
引用类型:
- String、数组、对象都是引用类型
- 所有的引用类型的默认值都是null
常量:
- 用final关键字修饰
- 一般用大写来表示
final double PI = 3.14;
3、变量的分类
局部变量:
- 声明在方法、构造方法或者语句块中,且只在这些范围内可见
- 方法、构造方法或者语句块被执行时被创建,执行完成后被销毁(生命周期)
- 访问修饰符不能用于局部变量
- 局部变量没有默认值,被声明后,必须经过初始化才能被使用
public class TestClass { String str_1; //成员变量 static String str; //静态变量 public void method() { String str_2; //局部变量 // System.out.println(str_2); //报错,必须初始化才能使用 str_2 = "hello world"; System.out.println(str_2); System.out.println(str_1); } }
成员变量:
- 声明在类内,但在方法、构造方法或者语句块之外
- 成员变量在对象创建的时候创建,在对象被销毁的时候销毁(生命周期)
- 成员变量可是声明在使用之前或者使用之后,因为成员变量在对象被创建的时候创建,而使用是在对象被创建之后
- 访问修饰符可以修饰成员变量
- 成员变量有默认值,数值类型的默认值是0,布尔类型的是false,引用类型的是null
静态变量:
- 声明在类中并且被static修饰,在方法之外
- 静态变量在第一次访问的时候被创建,在程序结束的时候被销毁(生命周期)
- 无论对象创建多少次,静态变量只有一份
- 默认值和成员变量相同
- 访问可以通过类名.变量名的方式访问
4、访问修饰符
类中的成员变量和类不写访问修饰符则默认为default
接口里的变量都隐式声明为public static final,而接口里的方法默认情况下访问权限为 public。
5、非访问修饰符
static:用来修饰类、方法和变量
final:用来修饰类、方法和变量。final修饰的类不能被继承,final修饰的方法不能被子类重写,final修饰的变量不能再被修改
abstract:用来修饰类和方法
synchronized和volatile:作用于多线程
transient:修饰成员变量时,表示该变量不被序列化
6、instanceof运算符
该运算符的作用是检查对象是否是某种类型
String name = "chenia"; boolean res = name instanceof String;
7、参数的的传递
java 基本数据类型传递参数时是值传递 ;引用类型传递参数时是引用传递 。
doIt1()输出的是1 2 3 4 5,数组虽然是引用传递 ,但是将引用 z = null 只是将引用z不指向任何对象 ,并不会对原先指向的对象数据进行修改
doIt2()输出的是99 2 3 4 5,因为对数组进行修改了
public class Test{ public static void main ( String[] args ){ int[] myArray = {1, 2, 3, 4, 5}; doIt1( myArray ); for(int j=0; j<myArray.length; j++) System.out.print( myArray[j] + " " ); //1 2 3 4 5 doIt2( myArray ); for(int j=0; j<myArray.length; j++) System.out.print( myArray[j] + " " ); //99 2 3 4 5 } public static void doIt1( int[] z ) { z = null ; } public static void doIt2( int[] z ){ int[] A = z; A[0] = 99; }