zoukankan      html  css  js  c++  java
  • Java中的String类能否被继承?为什么?以及final和static的区别

    不能被继承,因为String类有final修饰符,而final修饰的类是不能被继承的。

    Java对String类的定义:

    public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
        // 省略... 
    }

    final修饰符的用法:

    1.修饰类

      当用final修饰一个类时,表明这个类不能被继承。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。

      2.修饰方法

      使用final修饰方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。

      注:一个类中的private方法会隐式地被指定为final方法。

    3.修饰变量

      对于被final修饰的变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。虽然不能再指向其他对象,但是它指向的对象的内容是可变的。

    static的用法

    Static修饰的成员属性和成员方法是和类相关的,没有Static修饰的成员方法和属性是和对象相关的。

    Static修饰的成员变量属于全局变量,所有对象共享这个成员变量。(用类名调用)

    public class Person {
        //对象共有的属性
        static String address;
        //每个对象根据实际情况拥有属性
        public String name;
        public int  age;
    
        public void show(){
            System.out.println(this.age+" "+this.name+" "+this.address);
        }
    }
    
    public static void main(String[] args) {
            Person.address="中国";
            Person p1=new Person();
            p1.age=11;
            p1.name="lili";
            p1.show();
            Person p2 =new Person();
            p2.name="xiaohong";
            p2.age=12;
            p2.show();
        }

    Static修饰的成员方法内部只能用Static修饰的变量和方法。

     Static修饰的代码块,是在类加载时使用。因为虚拟机对类只加载一次,在构造方法之前执行。

    public class Person {
        static
        {
            System.out.println("执行静态代码块");
        }
        //对象共有的属性
        static String address;
        //每个对象根据实际情况拥有属性
        public String name;
        public int  age;
    
        public void show(){
            Person.run();
            System.out.println(this.age+" "+this.name+" "+this.address);
    
        }
        public static void run(){
            //static方法中不能使用非static属性和方法
            System.out.println("跑步能锻炼身体!"); //name报错,不能使用
        }
    
    }
    
    public static void main(String[] args) {        
            Person p1=new Person();
            p1.age=11;
            p1.name="lili";
            p1.show();
            Person p2 =new Person();
            p2.name="xiaohong";
            p2.age=12;
            p2.show();
        }

    静态方法里不能用this关键字。

  • 相关阅读:
    el-select下拉框选项太多导致卡顿,使用下拉框分页来解决
    vue+elementui前端添加数字千位分割
    Failed to check/redeclare auto-delete queue(s)
    周末啦,做几道面试题放松放松吧!
    idea快捷键
    解决flink运行过程中报错Could not allocate enough slots within timeout of 300000 ms to run the job. Please make sure that the cluster has enough resources.
    用.net平台实现websocket server
    MQTT实战3
    Oracle 查看当前用户下库里所有的表、存储过程、触发器、视图
    idea从svn拉取项目不识别svn
  • 原文地址:https://www.cnblogs.com/newway644617704/p/15144690.html
Copyright © 2011-2022 走看看