static

    public class Test {
        public static void main(String[] args){
            //static 关键字
            Person per1 = new Person();
            per1.name = "Rose";
            per1.age = 18;
            Person per2 = new Person();
            per2.name = "Jack";
            per2.age = 19;
            per1.getPersonInfo();
            per2.getPersonInfo();
        }
    }
    class Person{
            String country = "中国";
            String name;
            int age;
            public void getPersonInfo(){
            System.out.println("姓名:" + name + ",年龄" + age + this.country);
        }
    }

对该实例的内存进行分析:

在这里插入图片描述
传统属性所具备的特征:保存在堆内存中,且每个对象独享属性
描述共享属性,只需要在属性前面加上static
static属性又称为类属性,保存在全局数据区的内存之中,所有对象都可访问
将上述代码进行(static String country = “美国”)修改后的内存分析图如下:
在这里插入图片描述
关于static方法有以下几点说明:
1:所有的static方法不允许调用非static定义的属性或方法
2:所有的非static方法允许访问static方法或属性
3:使用static定义方法只有一个目的:某些方法不希望受到对象的控制,即可以在没有实例化对象的时候执行,简单概括就是八个字:共享属性、工具方法。所以能够得出两个结论:

1、static不能修饰外部类,类的存在就是为了产生对象,而static就是为了不实例化,不产生对象,不过static可以修饰内部类。

     public class Test {
            public static void main(String[] args){
                Person.setCountry("美国");
                new Person("Susan",18).getPersonInfo();
            }
        }
        class Person{
                private static String country;
                private String name;
                private int age;
                public Person(String name,int age){
                    this.name = name;
                    this.age = age;
                }
                public static void setCountry(String c){
                    country = c;//不用加上this
                }
                public void getPersonInfo(){
                System.out.println("姓名:" + name + ",年龄:" + age +" "+ this.country);
            }
        }
    

2、既然是共享属性,static就不能修饰局部变量了,主方法和普通方法中都不能用static来修饰变量。

     public class Test {
        static int i;
        public static void main(String[] args) {
            System.out.println(i);
        }
    }

输出结果为0

    public class Test {
        public static void main(String[] args) {
            static int i;
            System.out.println(i);
        }
    }

编译不通过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值