程序员java架构经验分享

做java开发两年了!面试连个static关键词都讲不明白,还想

2020-09-04  本文已影响0人  程序员匡胤

一旦用了static修饰,那么这样的内容不再属于对象自己,而是属于类的,所有本类的对象,都共享一份。不需要创建对象也可使用类名直接调用。静态的内容随着class文件的加载而加载。

修饰变量

public class Person {
  
  private String name;
  public static int age = 20;
  
  public Person(String name) {
      this.name = name;
  }

  public String getName() {
      return name;
  }

  public void setName(String name) {
      this.name = name;
  }

  public static int getAge() {
      return age;
  }

  public static void setAge(int age) {
      Person.age = age;
  }

  @Override
  public String toString() {
      return "Person{" +
              "name='" + name + '\'' +
              "age='" + age + '\'' +
              '}';
  }
}


public class Test {
    public static void main(String[] args) {
        Person one = new Person("张三");
        Person two = new Person("李四");
        System.out.println("--------使用类名调用和修改静态变量--------");
        System.out.println("------修改前对象的toString------");
        System.out.println(one.toString());
        System.out.println(two.toString());
        //权限为public时,static修饰的成员变量属于类,可以用类名调用!
        System.out.println("---修改前使用类名调用:"+Person.age);
        //可以直接使用类名调用并修改
        Person.age = 21;
        //权限为private时需要使用get和set方法来调用和修改
        System.out.println("---修改后使用类名调用:"+Person.getAge());
        System.out.println("------修改后对象的toString------");
        System.out.println(one.toString());
        System.out.println(two.toString());

        System.out.println("------------------分割线------------------");

        System.out.println("--------使用对象名调用和修改静态变量--------");
        //静态变量属于类,使用对象名调用修改后,所有对象和类本身使用该变量时都会变成修改后的值
        System.out.println("例如使用第一个对象修改静态变量值为19");
        one.age = 18;
        System.out.println(one.toString());
        System.out.println(two.toString());
    }
}
/*
输出结果:
--------使用类名调用和修改静态变量--------
------修改前对象的toString------
Person{name='张三'age='20'}
Person{name='李四'age='20'}
---修改前使用类名调用:20
---修改后使用类名调用:21
------修改后对象的toString------
Person{name='张三'age='21'}
Person{name='李四'age='21'}
------------------分割线------------------
--------使用对象名调用和修改静态变量--------
例如使用第一个对象修改静态变量值为19
Person{name='张三'age='18'}
Person{name='李四'age='18'}
*/

修饰方法

//本类中使用类名调用和直接调用本质都一样
public class Test{
    public static void StaticMethod(){
        System.out.println("静态方法执行了!!!");
    }
    public static void main(String[] args) {
        //通过类名调用
        Test.StaticMethod();
        //本类中直接调用
        StaticMethod();
    }
}
/*
静态方法执行了!!!
静态方法执行了!!!
*/
//.class文件
public class Test {
    public Test() {
    }
    public static void StaticMethod() {
        System.out.println("静态方法执行了!!!");
    }
    public static void main(String[] args) {
        StaticMethod();
        StaticMethod();
    }
}


//使用对象名调用和使用类名调用都会编译成"类名.静态方法名()"
class Test1{
    public static void main(String[] args) {
        Test.StaticMethod();
        Test t = new Test();
        t.StaticMethod();
    }
}
//.class文件
class Test1 {
    Test1() {
    }
    public static void main(String[] args) {
        Test.StaticMethod();
        Test t = new Test();
        Test.StaticMethod();
    }
}

修饰类

public class Test{
    
    public static class Iml{
        public void TestMethod(){
            System.out.println("静态内部类中的方法");
        }
    }

    public static void main(String[] args) {
        Iml iml = new Test.Iml();//不用创建外部类实例,也可创建内部类
        iml.TestMethod();
    }
}
/*
静态内部类中的方法
*/

静态代码块

public class Person {
    public Person() {
        System.out.println("构造方法执行了!!!");
    }
    static {
        System.out.println("静态方法执行了!!!");
    }
}


public class Test {
    public static void main(String[] args) {
        Person one = new Person();
        Person two = new Person();
    }
}
/*执行结果:
    静态方法执行了!!!
    构造方法执行了!!!
    构造方法执行了!!!
*/

总结

最后

感谢你看到这里,文章有什么不足还请指正,觉得文章对你有帮助的话记得给我点个赞,每天都会分享java相关技术文章或行业资讯,欢迎大家关注和转发文章!

上一篇下一篇

猜你喜欢

热点阅读