静态变量
静态成员变量和普通成员变量:
1 所属不同
静态变量属于类,所以也称为为类变量
成员变量属于对象,所以也称为实例变量(对象变量)
2 内存中的位置不同
静态变量存储于方法区的静态区
成员变量存储于堆内存
3 内存出现时间不同
静态变量随着类的加载而加载,随着类的消失而消失
成员变量随着对象的创建而存在,随着对象的消失而消失
4 调用不同
静态变量可以通过类名调用,也可以通过对象调用
成员变量只能通过对象名调用
代码块
局部代码块
1 声明方式和出现的位置
声明方式:{ },出现在方法体中
2 执行时机:
随着方法的执行而执行。
出了局部变量的作用域,该变量就会被回收
优点:限定变量生命周期,及早释放,提高内存利用率(其实在实际开发中没什么卵用(可读性考虑))
构造代码块
1 声明方式和出现的位置
声明方式:{ },出现在类中方法体之外
2 执行时机:
每次创建对象的时候执行
a 构造代码块和构造方法都是在创建对象的过程中执行的,构造代码块先于构造方法执行
3 使用场景:
使用构造代码块,来初始化成员变量的值
在构造方法中同样的部分,放入构造代码块中,每次调用的执行而且是先执行
4成员变量初始化有三种(其实已经申请内存,赋默认初值后了(堆中))
顺序:初始化语句(谁在前先执行谁)=构造代码块>构造方法
静态代码块
1 声明方式和出现的位置
声明方式:static{},出现在类中方法体之外
2 执行时机:
随着类加载而执行,因为在一个类中,在一个jvm中,最多且只会加载一次,所有静态代码块也只执行一次
3 使用场景:最多只会执行一次的代码(数据库的时候会用到)
静态代码块也是静态上下文的一种
同步代码块(多线程的时候再说)
package
使用package声明可以使文件中定义的类成为指定包的成员
声明方法:package 包名;中间用 .分割表示子包
注意事项:
并非每个java文件都必须有package关键字指定,该源文件中的类所属的包,没有指定的话,则属于默认包
import
1.在类名前面加上类所属的包名,中间用句点“.”分隔,称为类的完全限定名(Full Qualified Name),简称类的限定名,也就是包名.类名。在Java中通过类的全限定名来确定唯一的一个类
当在类体中使用了与当前类不同包的类名时,编译器编译时因为无法找到该类的定义而失败,有两个解决办法:
使用不同包类的完全限定名(很麻烦)
使用import声明,为编译器提供该类的定义信息
注意事项:
a.import声明一般紧跟在package声明之后,必须在类声明之前,其基本语法如下:
import <类的完全限定名>;
b.Java语言核心包java.lang包中的类将被隐式导入,可以直接使用其中的类
c.import声明提供了一种包的智能导入方式:
import <包名>.*;
包中的类将根据需要导入,不能嵌套导包,避免使用多条import声明