静态变量 | 实例变量 | |
---|---|---|
类 | yes | no |
对象 | yes | yes |
3.3 静态属性举例:System.out、Math.PI …
4. 使用static修饰方法:静态方法
① 随着类的记载而加载,可以通过"类.静态方法"的方式调用
② 静态方法中,只能调用静态的方法和属性,
非静态的方法中,可以调用静态和非静态的方法和属性。
静态方法 | 非静态方法 | |
---|---|---|
类 | yes | no |
对象 | yes | yes |
代码示例:
public class StaticTest {
public static void main(String[] args) {
Chinese.nation = "中国";
Chinese c1 = new Chinese();
c1.name = "小明";
c1.age = 20;
Chinese c2 = new Chinese();
c1.name = "小红";
c1.age = 22;
c1.nation = "CHN";
System.out.println(c2.nation);
}
}
class Chinese{
String name;
int age;
static String nation;
public void eat() {
System.out.println("吃饭");
show();
}
public static void show() {
System.out.println("我是一个中国人");
// eat();
// name = "hh";
nation = "hh";
}
}
//饿汉式的实现
class Bank{
//1. 私有化构造器
private Bank() {
}
//2. 内部创建类的对象,且此对象是静态的
private static Bank instance = new Bank();
//3. 提供公共的方法,返回类的对象
public static Bank getInstance() {
return instance;
}
}
懒汉式的实现:
① 私有化构造器
② 声明当前对象,没有初始化,此对象必须声明为static
③ 提供公共的方法,返回类的对象
//懒汉式的实现
class Order{
// 1. 私有化构造器
private Order() {
}
//2. 声明当前对象,没有初始化,此对象必须声明为static
private static Order instance = null;
//3. 提供公共的方法,返回类的对象
public static Order getInstance() {
if(instance == null)
instance = new Order();
return instance;
}
}
拓展:
执行的先后顺序:① - ② / ⑤ - ③ - ④
代码示例:
public class BlockTest {
public static void main(String[] args) {
String desc = Person.desc;
Person p1 = new Person();
Person p2 = new Person();
}
}
class Person{
String name;
int age;
static String desc = "我时一个人";
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person() {
super();
}
//静态代码块
static {
System.out.println("static block");
}
//非静态代码块
{
System.out.println("block");
}
public void eat() {
System.out.println("吃饭");
}
public static void info() {
System.out.println("我是一个快乐的人");
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}