Loading

构造方法-静态与非静态-随机函数


返回 我的技术栈(Technology Stack)



构造方法


  • 构造方法不能用对象调用

      class Person {
         public Person(){
         
         }
      }
      注意:如果我们没有给出构造方法,系统将自动提供一个无参构造方法,
           如果我们给出了构造方法,系统将不再提供默认的无参构造方法,
           这个时候,如果我们还想使用无参构造方法,就必须自己给出。
           建议,永远自己给出无参构造方法!!!
    
      /************************************************************/
     
      class Demo {
          public static void main(String[] args) {
              Person p1 = new Person();
              p1.show();
            
              System.out.println("-----------------");
       
              Person p2 = new Person("张三",23);
              p2.show();
          }
      }
    
      class Person {
          private String name;
          private int age;
    
          public Person() {
             System.out.println("空参的构造");
          }
    
          public Person(String name, int age) {
             this.name = name;
             this.age = age;
             System.out.println("有参的构造");
          }
    
          public void show() {
             System.out.println(name + "------" + age);
          }
      }
    

完整的学生类案例


     class Demo {
        public static void main(String[] args) {
            Student s1 = new Student ();      // 使用空参构造
            s1.setName("张三");    //设置姓名
            s1.setAge(23);     //设置年龄
        
            System.out.println("我的姓名是:" + s1.getName() + ",我的年龄是:" + s1.getAge());
            //getxxx()获取属性值,可以打印,也可以赋值给其他变量,做其他操作

            Student s2 = new student("李四",24);       //使用有参构造
            s2.show();             //只是为了显示属性值
        }
     }


     class Student {
         private String name;
         private int age;
    
         public Student() {}     //无参构造
         public Student(String name,int age) {    //有参构造
             this.name = name;
             this.age = age;
         }
         
         public void setName(String name) {     //设置姓名
             this.name = name;
         }
         public String getName() {         // 获取姓名
             return name;
         }

         public void setAge(int age) {      //设置年龄
             this.age = age;
         }
         public int getAge() {        //获取年龄
             return age;
         }

         public void show() {
             System.out.println("我的姓名是:" + name + ",我的年龄是:" + age);
         }

      }

一个问题


  class Demo {
      public static void main(String[] args) {
          Student s = new student ();
          s.show();
      }
  }

  class Student {
    	  private String name = "张三";
      private int age = 23;
      
      public Student() {
         name = "李四";
         age = 24;
      }

      public void show() {
         System.out.println(name + "-----------" + age);
      }
  }

 //测试的结果是:李四--------------24
   为何不是:张三--------------23 ?
   答:相当于构造方法的赋值覆盖了原有的赋值

   Student s = new Student();
   1、Student.class加载进内存
   2、栈中声明一个Student类型引用s
   3、在堆内存创建对象
   4、给对象中属性默认初始化值
   5、属性进行显示初始化
   6、构造方法进栈,对对象中的属性赋值,构造方法弹栈
   7、将对象的地址值赋值给s

Static关键字的特点(掌握)


  • 特点:

    • 随着类的加载而加载
    • 优先于对象存在
    • 被类的所有对象共享
  • 应用:共有属性用静态,非共有属性用非静态

  • 调用:可以用对象名.调用。也可以用类名.调用(推荐使用类名.调用)

      class Demo {
          int num1 = 10;          //非静态的成员变量
          static int num2 = 20;     //静态的成员变量
          
     		public void print1() {   //非静态的成员方法,既可以访问静态的成员也可以访问非静态的
              System.out.println(num1);
              System.out.println(num2);
          }
    
          public static void print2() {     //静态的成员方法
            //System.out.println(num1);     静态的成员方法不能访问非静态
              System.out.println(num2);
          }
    
      }
    
  • static的注意事项

    • 在静态方法中没有this关键字:
      • 静态是随着类的加载而加载,this是随着对象的创建而存在。
      • 静态比对象先存在。
    • 静态方法只能访问静态的成员变量和静态的成员方法(简记:静态只能访问静态)
  • 非静态方法在调用的时候必须创建对象调用


工具类中使用静态


  • 如果一个类中所有方法都是静态的,需要再多做一步,私有构造方法,目的是不让其他类创建对象
  • 直接类名.调用即可

随机函数


  •   System.out.println((int)(Math.random()*100)+1)  //可以输出1-100的随机数
    

posted @ 2021-03-27 23:16  言非  阅读(55)  评论(0编辑  收藏  举报