这是我第一篇意义上的博客,记录自己的点滴学习过程。
静态特点
- 被static修饰的成员变量属于类本身,不再属于这个类的某个对象。(将使被static修饰的成员变量成为被所有该类对象共享的成员变量,类似于成为全局变量)
- 被static修饰的成员变量可以通过类名直接访问。
- 静态的加载优先于对象,随着类的加载而加载。
- 静态成员只能直接访问静态成员。
- 非静态成员既可以访问非静态成员也可以访问静态成员。
- 静态方法中没有this这个对象
代码块
局部代码块
package myDemo;
public class Demo {
public static void main(String[] args) {
// TODO Auto-generated method stub
//局部代码块:存在于方法中,控制变量的生命周期(作用域)
{
for(int i = 0; i < 10; i++) {
System.out.println("运行成功!");
int num = 10;
}
System.out.println(num);//无法访问num,超出num的作用域范围
}
}
}
运行结果
运行成功!
运行成功!
运行成功!
运行成功!
运行成功!
运行成功!
运行成功!
运行成功!
运行成功!
运行成功!
构造代码块
定义在类成员位置中的代码块
优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化操作
每创建一个对象均会执行一次构造代码块
package myDemo;
public class Demo {
public static void main(String[] args) {
TestDemo demo = new TestDemo();//无参构造
TestDemo demo2 = new TestDemo("123",19);//有参构造
}
}
class TestDemo {
String name;
int age;
{
// for(int i = 0; i < 10; i++) {
// System.out.println("运行成功!");
// }
System.out.println("运行成功!");
}
//
public TestDemo() {
System.out.println("无参构造!");
}
public TestDemo(String name, int age) {
System.out.println("有参构造!");
this.name = name;
this.age = age;
}
}
运行结果
运行成功!
无参构造!
运行成功!
有参构造!
静态代码块
定义在成员位置,使用static修饰的代码块
- 优先于构造代码块执行,当以任意一种形式第一次使用到该类时执行
- 该类不管创建多少个对象,静态代码块只执行一次
- 可用于给静态变量进行赋值,用来给类进行初始化,例如驱动的初始化
、package myDemo;
public class Demo {
public static void main(String[] args) {
TestDemo demo = new TestDemo();//无参构造
TestDemo demo2 = new TestDemo("123",19);//有参构造
}
}
class TestDemo {
String name;
int age;
//静态代码块:随着类的加载而加载,只加载一次,加载类时需要做的初始化。
static {
System.out.println("运行成功!");
}
//
public TestDemo() {
System.out.println("无参构造!");
}
public TestDemo(String name, int age) {
System.out.println("有参构造!");
this.name = name;
this.age = age;
}
}
运行结果
运行成功!
无参构造!
有参构造!
三种代码块的执行顺序
静态代码块>构造代码块>无参构造
package myDemo;
public class TestDemo {
static {
System.out.println("DemoTest静态代码块执行");
}
{
System.out.println("DemoTest构造代码块执行");
}
public TestDemo() {
System.out.println("DemoTest无参构造执行");
}
public static void main(String[] args) {
System.out.println("DemoTest的主函数执行了");
Code c = new Code();
Code c2 = new Code();
}
}
class Code {
static {
System.out.println("Code静态代码块执行");
}
{
System.out.println("Code构造代码块执行");
}
public Code() {
System.out.println("Code无参构造执行");
}
}
执行结果
DemoTest静态代码块执行
DemoTest的主函数执行了
Code静态代码块执行
Code构造代码块执行
Code无参构造执行
Code构造代码块执行
Code无参构造执行