static 关键字
- static 方法只允许调用static属性或者static 方法;
- 普通方法允许调用static属性或者static方法;
- 普通方法或属性的调用是在实例化对象之后的,而静态属性或者方法可以在实例化对象之前通过类名来修改或者调用。
- static方法或者属性只有在回避实例化对象调用并且描述公共属性的情况下才考虑使用static方法或者属性。
class Book {
private String title ;
private static int count = 0 ;
public Book() {
this("NO Title - " + count++); // 使用静态变量 实现无参时自动编号书名
}
public Book(String title) {
this.title = title ;
}
public String showInf() {
return this.title;
}
}
public class JavaDemo {
public static void main(String[] args) {
System.out.println(new Book("Java").showInf());
System.out.println(new Book("c++").showInf());
System.out.println(new Book().showInf());
}
}
在程序之中使用“{}”定义的结构称为代码块,根据代码块出现的位置以及定义的关键字不同
代码块可以分为: 普通代码块、构造代码块、静态代码块、同步代码块(多线程)
普通代码块
定义在一个方法之中的代码块
可以在一个方法之中进行结构的拆分,防止相同变量名所带来的相互影响。
public class JavaDemo {
public static void main(String[] args) {
{
int x = 50;
System.out.println(x);
}
int x = 100;
System.out.println(x);
}
}
构造代码块
构造代码块是定义在类中的。
构造块会优先于构造方法执行,并且每一次实例化新对象的时候都会调用构造块中的代码
package com.itheima;
class Book {
public Book() {
System.out.println("构造方法执行");
}
{
System.out.println("构造块执行");
}
}
public class JavaDemo {
public static void main(String[] args) {
new Book();
}
}
运行结果:
构造块执行
构造方法执行
静态代码块
主要指的是static关键字定义的代码块,静态块的定义要考虑到两种情况:
在主类中定义静态块 优先于主方法执行
public class JavaDemo {
static {
System.out.println("主类中静态代码块执行,用于进行一些准备工作");
}
public static void main(String[] args) {
System.out.println("main方法执行");
}
}
运行结果:
主类中静态代码块执行,用于进行一些准备工作
main方法执行
在其他类中定义静态块 静态块优先于构造块执行 不管有多少个实例化对象出现 静态代码块只会执行一次!目的是为类中静态属性初始化...
package com.itheima;
class Book {
public Book() {
System.out.println("构造方法执行");
}
static {
System.out.println("静态块执行");
}
{
System.out.println("构造块执行");
}
}
public class JavaDemo {
public static void main(String[] args) {
new Book();
}
}
运行结果:
静态块执行
构造块执行
构造方法执行