业务写多了,连基础也会忘记,抽时间就复习一下子。
static
1.静态概述
a、生命周期:随着类的加载而加载
b、特点:可以被本类的所有对象共享,可以使用类名调用
2.访问特点
a、静态方法能否直接访问静态成员(变量和方法),不能直接访问非静态。原因:静态优先于对象而存在于内存
b、非静态方法能够直接访问静态成员,也能否直接访问非静态成员
c、静态方法中没有this关键字,因为我们可以通过类型,静态方法直接调用,不需要任何对象
3.构造函数、构造代码块、静态代码块的区别
a、构造函数
(1)格式:
类名(参数1,参数2……){
构造函数执行语句
}
(2)调用的时机:对象建立时。
(3)作用:给对象进行初始化。
(4)要点:当一个类中没有定义构造函数的时候,系统会默认给该类加入一个空参构造,但是当开发者在类中自定义构造函数之后,系统便不会给该类加入默认的空参构造了;一个对象建立,构造函数只运行一次,一般方法可以被该对象调用多次。
b、构造代码块
(1)格式:
{
构造代码块执行语句
}
(2)调用时机:对象一建立,优先于构造函数执行
(3)作用:给对象进行初始化
(4)要点:类不能调用构造代码块;构造代码块与构造函数的区别是:构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化,因为构造函数是可以多个的,运行哪个构造函数就会建立什么样的对象,但无论建立哪个对象,都会先执行相同的构造代码块。也就是说,构造代码块中定义的是不同对象共性的初始化内容。
c、静态代码块
(1)格式:
static{
构造代码块执行语句
}
(2)调用时机:类的加载,只执行一次,优于主函数
(3)作用:给类初始化
b、举例说明
/** * 城市实体类 * * Created by uknowzxt */ public class City { //静态代码块 static { System.out.println("我是静态代码块"); } //构造代码块 { System.out.println("我是构造代码块"); } //空参构造 public City(){ System.out.println("我是空参构造"); } //有参构造 public City(Long id, Long provinceId, String cityName, String description) { this.id = id; this.provinceId = provinceId; this.cityName = cityName; this.description = description; System.out.println("我是有参构造"); } public static void main(String[] args) { System.out.println("我是主函数"); City city = new City(new Long("1"),new Long("1000"),"杭州市","~~"); } private Long id; private Long provinceId; private String cityName; private String description; }
主函数:
public static void main(String[] args) { System.out.println("我是主函数"); City city = new City(new Long("1"),new Long("1000"),"杭州市","~~"); }
运行结果:
我是静态代码块
我是主函数
我是构造代码块
我是有参构造
Process finished with exit code 0
可见加载顺序:静态代码块>构造代码块>构造函数