使用 static 去修饰那个变量后 代码如下
public class Js
{
private int id;
private String name;
private static String Schoolname = "JSU";
public Js ()
{
}
public Js (int sid, String sName)
{
id = sid;
name = sName;
}
public void setId(int sid)
{
id=sid;
}
public int getId()
{
return id;
}
public void setName(String sName)
{
name = sName;
}
public String getName()
{
return name;
}
public String toString()
{
return "{" + id + ", " + name + ", "+ Schoolname +"}";
}
}
public class Test01
{
public static void main(String[] args){
Js TX = new Js(20,"TX");
Js XY = new Js(20,"XY");
System.out.println(TX);
System.out.println(XY);
}
}
-----------------------------------------------------------------
{20, TX, JSU}
{20, XY, JSU}
内存图为
什么时候使用static关键字修饰变量:
当类级别的变量存在的时候,也就是说这个类中所产生的对象的属性都拥有相同的值,这样的变量我们需要用static修饰。
因为它是类级别的,所以,我们使用"类名."的方法访问。我们称这样的变量为静态变量 静态变量存在于方法区内存中,在类加载的时候就存在了。
问大家:上述代码中,是静态变量先赋值,还是main()先执行?
一定是静态变量先赋值,main()方法后执行。因为它是在类加载的时候被执行的。 ————————————————
版权声明:本文为CSDN博主「solo_jie」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/solo_jie/article/details/113094367
public class Static {
private static int i = 100;
static {
System.out.println(i+"nihao");
}
public static void main(String [] args)
{
System.out.println("Hello World");
}
static {
System.out.println("wuhu");
}
}
------------------------------------------------
100nihao
wuhu
Hello World
静态代码块
static {
java 语句;
...
}
静态代码块是代码块,存放在方法区内存中,但是它是static修饰的,是静态的,所以它会在类加载的时候执行代码块中的java语句。
静态代码块的执行顺序:也是自上而下,依次执行。
构造方法也可以在静态代码块中执行。
main方法在类加载完成以后才会被执行。
public class Static01 {
private int i;
static{
System.out.println(i);
}
public static void main(String[] args){
System.out.println("wuhu");
}
}
---------------------------------------------------
无法从静态上下文中引用非静态 变量 i
因为 private int i 是成员属性 ,而成员属性是在构造方法时赋值 ,构造方法是在main方法执行后才会被执行
main方法压栈是在类加载完成后。
类完整的内容: 成员属性/静态属性 + 成员方法/静态方法 + 构造方法
补充:
静态代码块:它是SUN公司为程序员准备的一个时刻,类加载时刻。在加载的时候完成一些事情。比如打印日志。比如:我们有一个大型的项目,网站,如果我们都是类加载完成之后才开始执行所有的代码,就会很卡,效率很低,有些代码就可以在类加载的时候完成,这样就能提高效率。
———————————————— 版权声明:本文为CSDN博主「solo_jie」的原创文章,遵循CC 4.0
BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/solo_jie/article/details/113094367
public class Static01 {
private int i;
static{
System.out.println("好好学习,天天向上");
// System.out.println(i);
}
public static void main(String[] args){
System.out.println("wuhu");
System.out.println(i);
}
}
------------------------------------------------------
无法从静态上下文中引用非静态 变量 i
这个报错是因为都没有构造方法 ,是无法执行的 ,成员都没有 ,无法访问成员变量
静态方法:
有别于成员方法。它是被static修饰的方法。该方法是类级别的。因为静态变量不需要使用对象来调用,那么操作的时候我们可以给静态的变量提供静态的方法进行静态数据的操作(读、改)。
静态方法的调用是"类名."的方式。
比如:public static void main(String[] args) {}
它是属于哪个对象的吗?每个对象都有可能调用一次吗?显然不是。
它是类级别的,一个类中的方法要执行,只要调一次main就够了。请问:静态方法被调用的时候会产生空指针异常吗? 我们说过,静态的都是类级别的,与对象无关,空指针只会发生在对象身上。
———————————————— 版权声明:本文为CSDN博主「solo_jie」的原创文章,遵循CC 4.0
BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/solo_jie/article/details/113094367
static 是修饰类级别变量和方法的 ,被修饰的变量和方法与对象是没有关系的 静态的方法执行有两种情况会被执行,第一种情况在main方法中调用,第二种情况,在静态代码块中执行。
静态变量和静态方法都是通过"类名."的方式进行访问,也可以使用"引用."的方式访问,但不推荐后者。
静态代码块只会被执行一次。为什么?因为它是在类加载的时候执行的。
记住:静态的东西与对象无关。它是类级别的概念