小白的学习之路java篇:static的初步认识

package static的用法;

public class Demo1 {
public static void main(String[] args) {
Person per=new Person();
//实例方法只能通过实例对象.方法调用
per.hello();
//静态方法可以用实例对象.方法调用,但不推荐,在C#中此方法被屏蔽,java中不会被屏蔽,但是可以看到存在一个警告,建议改为类名.方法
per.hi();
//通过类名.方法调用 无需实例化
Person.hi();
//同一类中的static方法无需使用类名.方法
hello();
//属性的调用同理
per.pname="limign";
per.pname="美国";
Person.country = "中国";
Person per2 = new Person();
per2.country="英国";
per2.pname= "wang";
System.out.println(per.pname+" "+per2.pname);
System.out.println(per.country+per2.country+Person.country);
//可以看到,虽然是通过实例对象.属性的方法调用赋值了类属性,但是值还是共用了,而实例属性是分开的

//补充
User user = new User();
User user2 = new User();
//可以看到存在两个实例化,但静态块只执行一次,且优先于构造方法
}
static void hello(){
System.out.println("hello");
}
}
//Person类属性的值是公用的,不同的实例化对象公用同一个属性的值
//实例属性是分开的
class Person {
//实例属性
String pname;
//类属性
static String country;
// 实例方法
void hello() {
System.out.println("hello");
}

// 类方法(静态方法)
static void hi() {
System.out.println("hi");
}
}

//补充
class User{
public User() {
// TODO Auto-generated constructor stub
System.out.println("构造方法^_^");
}

//静态块
static{
System.out.println("静态块2");
}
static{
System.out.println("静态块1");
}
//初始化块
{
System.out.println("初始化块");
}
}
//静态块只有修饰符+大括号,在类被加载时优先加载,有多个静态块时按顺序优先加载静态块,甚至优先与构造方法,并且只加载一次
//初始化块只有一对大括号,优先于构造方法,且执行多次
//静态块以及初始化块可以在类中写多个。但实际运行时是将其整合为一个的,按顺序执行

猜你喜欢

转载自www.cnblogs.com/cainiao1314/p/10318245.html