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);
        }
    }

  • 相关阅读:
    项目经理必备的8个要素:沟通、总结、懂技术
    完工概率计算总结
    PMP--可能会涉及到的计算题
    六顶思考帽子法
    预测技术
    React.Component与React.PureComponent的区别
    简单理解JavaScript,TypeScript和JSX
    自己常用的linux命令
    ES6 promise 用法
    node的express框架接收get/post请求时,参数获取方式
  • 原文地址:https://www.cnblogs.com/mr171733/p/9700190.html
Copyright © 2011-2022 走看看