zoukankan      html  css  js  c++  java
  • java中构造方法和this,static关键字

    构造方法:

    构造方法是一种特殊的方法,用于创建该类的对象,对对象的数据进行初始化

    格式如下:

      [修饰符] 类名(形参列表){

        方法体

      }

    特点 A:方法名和类名相同

       B:没有返回值类型,连void都不能有

       C:没有返回值

       D:通过new关键字比如 类名 对象名 = new 类名(); 代表调用了该类的无参构造方法

    构造方法注意事项:

      1.如果自己不创建构造方法,系统会自动提供一个无参构造,一般建议自己手动创建

      2.如果自己创建了有参构造方法,系统将不默认创建无参构造方法     

    class Student {   
          private String name;    private int age;   public Student(){} public Student(String name,int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } class StudentDemo { public static void main(String[] args) { //方式1 Student s1 = new Student(); s1.setName("徐佳文"); s1.setAge(26); System.out.println(s1.getName()+"---"+s1.getAge()); //方式2 Student s2 = new Student("刘源",38); System.out.println(s2.getName()+"---"+s2.getAge()); } }

    结果:

     问:代码:Student s = new Student();做了哪些事情?(理解)

      1.把Student.class文件加载到内存

      2.在栈内存为S开辟空间

      3.在堆内存为学生对象申请空间

      4.给学生的成员变量进行默认初始化 name=null; age=0;

      5.通过构造方法给成员变量进行初始化 //Student s = new Student("刘源",38);直接 name="刘源";age=38;

      6.对象构造完毕,把地址赋值给S变量 

    this关键字

    在普通方法中,this指向的是调用该方法的对象

    在构造方法中,this指向的是正要初始化的对象

    this最常的用法:

      1.让类中的一个方法,访问该类的另一个方法或属性

      2.使用this关键字调用重载构造方法。避免相同的初始化代码,只能在构造方法中用,并且必须位于构造方法的第一句

    特别备注,this不能用于static方法

     使用示例

    public class TestThis {    
        int a,b,c;
    
        TestThis(){
            System.out.println("正要new一个Hello对象");
        }
        
        TestThis(int a,int b){
            this();   //调用无参的构造方法,并且必须位于第一行!
            
            //a = a;//这里都是指的局部变量而不是成员变量
            this.a = a;//这样就区分了成员变量和局部变量.  这种情况占了this使用情况的大多数!
            this.b = b;
        }
        
        TestThis(int a,int b,int c){
            this(a,b);    //调用无参的构造方法,并且必须位于第一行!
            this.c = c;
        }
        
        
        void sing(){}
        
         void chifan(){
            this.sing();    //sing();
            System.out.println("你妈妈喊你回家吃饭!");
        }
        
        public static void main(String[] args){
            TestThis hi = new TestThis(2,3);
            hi.chifan();
        }    
    }

      结果:

    static关键字:

    在类中用static声明的变量为静态变量,声明的方法为静态方法,也被称为类变量,类方法

    因为 它为该类的公用变量,属于类,被该类的所有实例共享,在类被载入的时候就会初始化,在对象创建之前就已经初始化了

    对于该类来说,static成员变量只有一份,被该类所有变量共享

    被该类声明的方法属于静态方法,无需创建对象就可以调用,因为static修饰的方法变量,在对象创建之前就存在,所以调用可以直接类名.方法名调用

    在调用该方法时,不会将对象的引用传递给它,所以在静态方法中不可方法非static成员

    可以通过对象引用或类名(不需要创建对象)来访问它

    public class TestStatic {
        int a;
        static int width;
        static void gg(){
            System.out.println("gg");
        }
        void tt(){
            System.out.println("tt");
        }
        public static void main(String[] args) {
            TestStatic ts = new TestStatic();
            //ts.gg();可以被对象调用
            TestStatic.gg();//可以直接类名.静态方法名调用
            gg();//这个静态方法在当前类中,所以可以直接用方法名在main方法中调用
            //tt();错!! 静态方法无法访问非静态方法或变量
            //int b=a; 错!!静态方法无法访问非静态方法或变量
            int w = width;
        }
    }

    静态代码块:用static修饰的代码块被称为静态代码块

    经常用于初始化类,加载类信息时执行,一定要记住,在值加载类信息时执行,而不是创建对象时执行

    静态初始化块中不能方法非static成员

    package cn.zzsxt.demo;
    
    public class TestStaticBlock {
        //静态代码块
        static {
    
            System.out.println("此处,可执行类的初始化工作!");
    
        }
        //构造代码块
        {
            System.out.println("此处,构造代码块");
        }
    
        public static void main(String[] args) {
            System.out.println("main方法中的第一句");
            TestStaticBlock tb = new TestStaticBlock();
            //随着类的加载而调用了静态代码块,然后main方法中第一句话出来,随着创建对象,构造代码块也加载 所以结果如下:
            /*
                 此处,可执行类的初始化工作!
                main方法中的第一句
                此处,构造代码块*/
        }
    
    }
  • 相关阅读:
    ArcEngine 图层标注 (根据字段、角度)
    以Graphicslayer为管理组来管理Element.
    ServletContextAware、ServletRequestAware、ServletResponseAware、SessionAware
    web.xml配置错误页面,及输出错误信息
    ServletContextListener使用详解
    自定义异常类。
    Hibernate注解与JPA
    Spring事务管理-<tx:advice>标签
    Spring配置之OpenSessionInViewFilter
    巧用Ajax的beforeSend 提高用户体验
  • 原文地址:https://www.cnblogs.com/jiawenxu/p/6822310.html
Copyright © 2011-2022 走看看