类与对象的关系
类是构建对象的模板,一个类可以构建多个对象。
类在方法区当中,对象在堆中。
static修饰的变量是独属于类的变量,没有给对象。
public class Person {
private String name;
private int age;
private static String like;
public static void main(String[] args) {
Person zhang = new Person();
zhang.name = "zhangsan";
zhang.age = 18;
zhang.like = "apple";
Person li = new Person();
li.name = "lisi";
li.age = 20;
li.like = "banana";
System.out.println(zhang.name+" "+zhang.age+" "+zhang.like);
System.out.println(li.name+" "+li.age+" "+li.like);
}
}

static修饰的变量究竟储存在什么地方
在方法区当中有静态常量池,static修饰的变量被放在静态常量池中,如果静态常量池已满则被存储在方法区当中,总之,不可能在对象中进行存储。
static能修饰什么
static能修饰变量、修饰方法、修饰代码块。
① static修饰的变量属于类变量,被创建出来的所有对象共享。
② static修饰的方法属于类,叫做静态方法,没有被static修饰的方法属于对象。
在静态方法当中不能调用非静态方法,因为有类不一定有对象;非静态方法能调用静态方法,因为有对象一定有类。
③ 被static修饰的代码块不论放在哪里,都一定比main方法优先执行。(用于优化程序)
Person person = new Person();
Person:决定着对象的类型。
person:对象的名称,存储在栈内存当中。
new:关键字,在堆内存当中开辟内存空间(对象)。
Person():构造器,给对象赋初始值。
public class Person {
static {
System.out.println("我是main方法之前的static修饰的代码块");
}
{
System.out.println("我是main方法之前的代码块");
}
public static void main(String[] args) {
System.out.println("我是main方法");
}
static {
System.out.println("我是main方法之后的static修饰的代码块");
}
{
System.out.println("我是main方法之后的代码块");
}
}

由于在 main方法中并没有创建Person类的实例,因此非静态代码块(实例初始化块)并不会在程序执行时被触发。
public class Person {
static {
System.out.println("我是main方法之前的static修饰的代码块");
}
{
System.out.println("我是main方法之前的代码块");
}
public static void main(String[] args) {
Person person = new Person();
System.out.println("我是main方法");
}
static {
System.out.println("我是main方法之后的static修饰的代码块");
}
{
System.out.println("我是main方法之后的代码块");
}
}

public class Person {
static {
System.out.println("我是main方法之前的static修饰的代码块");
}
{
System.out.println("我是main方法之前的代码块");
}
public static void main(String[] args) {
System.out.println("我是main方法");
Person person = new Person();
}
static {
System.out.println("我是main方法之后的static修饰的代码块");
}
{
System.out.println("我是main方法之后的代码块");
}
}
