zoukankan      html  css  js  c++  java
  • fianl关键字和static关键字

    final关键字

    1.概念:

    继承的出现提高了代码的复用性,并方便开发。但随之也有问题,有些类在描述完之后,不想被继承,或者有些类中的部分方法功能是固定的,不想让子类重写。可是当子类继承了这些特殊类之后,就可以对其中的方法进行重写,那怎么解决呢?

    要解决上述的这些问题,需要使用到一个关键字finalfinal的意思为最终,不可变。final是个修饰符,它可以用来修饰类,类的成员,以及局部变量不能修饰构造方法。

    2.final的特点:

    1.final 修饰类不可以被继承,但是可以继承其他的类(相当于太监,只能当儿子不能当爹)

    package com.oracle.demo04;
    //final修饰类(太监类,没有子类)
    //不能被继承,但可以继承其他类
    public final class Fu extends Object{
    
    }

    2.final 修饰的方法不可以被子类重写,但是父类中没有被final修饰的方法,子类重写后可以加final

    package com.oracle.demo04;
    //被final修饰的方法
    public class Fu2 {
        public final void xiuche(){
            System.out.println("失传的手艺");
        }
        public void maiche(){
            System.out.println("这是祖传的卖车手艺");
        }
    }
    package com.oracle.demo04;
    
    public class Zi extends Fu2{
        //Cannot override the final method from Fu2
        /*public final void xiuche(){
            
        }*/
        public final void maiche(){
            
        } 
    }

    3.final 修饰的变量成为常量,这些变量只能成为一次,而且终身不变

    final int i = 20;
    i = 30; //赋值报错,final修饰的变量只能赋值一次

    4.引用类型的变量值为对象地址值,地址值不能更改,但是地址内的对象属性至可以修改

    final Person p = new Person();//p获得一个地址
    Person p2 = new Person();//p2获得一个地址
    p = p2; //final修饰的变量p,所记录的地址值不能改变,所以会报错
    p.name = "小明";//可以更改p对象中name属性值

    5.修饰成员变量,需要在创建对象前赋值,否则报错。(当没有显式赋值时,多个构造方法的均需要为其赋值。)

    package com.oracle.demo04;
    //被final修饰的成员变量没有系统默认初始值
    public class Zi3 {
        //直接赋值
        //final String name="小红";
        //通过构造方法赋值
        final String name;
        public Zi3(){
            name="小红";
        }
    }

     static 关键字

    static概念:静态修饰符,一般用来修饰类中的成员,可以不创建对象直接调用方法

    static 特点:

    1.被static修饰的成员属于类,不属于类中的某个对象

        class Demo {
        public static int num = 100;
    }
    
    class Test {
        public static void main(String[] args) {
            Demo d1 = new Demo();
            Demo d2 = new Demo();
            d1.num = 200;
            System.out.println(d1.num); //结果为200
            System.out.println(d2.num); //结果为200
        }
    }

    2.被static 修饰的成员可以直接通过类名来进行访问

    class Demo {
        //静态成员变量
        public static int num = 100;
        //静态方法
        public static void method(){
            System.out.println("静态方法");
        }
    }
    class Test {
        public static void main(String[] args) {
            System.out.println(Demo.num);
            Demo.method();
        }
    }

    3.static 的注意事项:

    静态的内容是优先于对象存在,只能访问静态,不能使用this/super,静态修饰的内容存在于静态区

    class Demo {
        //成员变量
        public int num = 100;
        //静态方法
        public static void method(){
            //this.num; 不能使用this/super。
            System.out.println(this.num);
        }
    }

    同一个类中  静态成员只能访问静态成员

    class Demo {
        //成员变量
        public int num = 100;
        //静态成员变量
        public static int count = 200;
        //静态方法
        public static void method(){
            //System.out.println(num); 静态方法中,只能访问静态成员变量或静态成员方法
            System.out.println(count);
        }
    }

    main方法只是一个程序的入口,可以写在任意的一个类中

    多态方法中,编译看等号的左边,父类有的话,编译成功,父类没有的话编译失败

    运行静态方法,运行父类中的静态方法

    运行非静态方法,运行的是子类中重写的方法

    成员变量,编译和运行的都是父类

    package com.oracle.demo05;
    
    public class student {
        String name;
        int age;
        static String schoolName;
    }
    package com.oracle.demo05;
    
    public class test {
        public static void main(String[] args) {
            student s=new student();
            s.name="小红";
            s.schoolName="北京大学";
            student s2=new student();
            s2.name="小明";
            s2.schoolName="清华大学";
            System.out.println(s.schoolName+"..."+s2.schoolName);
        }
    }

  • 相关阅读:
    14_java之变量|参数|返回值|修饰符
    NYOJ 202 红黑树 (二叉树)
    NYOJ 138 找球号(二) (哈希)
    NYOJ 136 等式 (哈希)
    NYOJ 133 子序列 (离散化)
    NYOJ 129 树的判定 (并查集)
    NYOJ 117 求逆序数 (树状数组)
    NYOJ 93 汉诺塔 (数学)
    HDU 2050 折线分割平面 (数学)
    天梯赛L2-008 最长对称子串 (字符串处理)
  • 原文地址:https://www.cnblogs.com/mr171733/p/9700190.html
Copyright © 2011-2022 走看看