fianl关键字和static关键字

final关键字

1.概念:

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

要解决上述的这些问题,需要使用到一个关键字final,final的意思为最终,不可变。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);
    }
}

原文地址:https://www.cnblogs.com/mr171733/p/9700190.html

时间: 2024-10-17 12:02:08

fianl关键字和static关键字的相关文章

4.6-全栈Java笔记:THIS关键字和STATIC关键字

this关键字 对象创建的过程和this的本质 构造方法是创建java对象的重要途径,通过new关键字调用构造器时,构造器也确实返回了该类的对象,但这个对象并不是完全由构造器负责创建的.创建一个对象分为如下四步: 1. 分配对象空间,并将对象成员变量初始化为0或空 2. 执行属性值的显示初始化 3. 执行构造方法 4. 返回对象的地址给相关的变量 this的本质就是"创建好的对象的地址"!  由于在构造方法调用前,对象已经创建.因此,在构造方法中也可以使用this代表"当前对

final关键字和static关键字的简单理解

final关键字: 1.final修饰的类不可以被继承:final修饰的方法不可以被重写:final修饰的变量不可以被修改: 好处:1.为方法上锁,当定义方法不想被子类修改时可以采取此办法: 2.提高执行效率,编译器加载内嵌机制: static关键字: 1.static方法: 1.只能调用其他的static方法 2.只能使用static变量 3.不能以任何方式引用this或者super关键字 (因为静态方法在编译时,最先被加载,所以有他的优势 以及 一定的局限性) static常常在应用开发中提

final关键字、static关键字

final关键字 继承带来了好处,同时也会有弊端出现,比如有的时候我们不需要继承某些类或者类中成员的时候,就可以用到final的修饰了,它可以修饰类,成员变量,成员方法,以及局部变量.final的意思就是最终的意思,被他修饰的成员变量会变成一个不能改变值的常量,被他修饰的成员方法不能被子类所重写,被它修饰的类不能被继承. final的特点: 1. 被final修饰的类,不能被其它的类继承,也就是说它是一个最终类,但是这个类可以继承其他类. 2. 被final修饰的方法,不能被其子类所重写,可以被

Java——面向对象进阶(final关键字,static关键字,匿名对象,内部类,包的声明与访问,四种访问修饰符,代码块)

一.final关键字 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承,或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承了这些特殊类之后,就可以对其中的方法进行重写,那怎么解决呢? 要解决上述的这些问题,需要使用到一个关键字final,final的意思为最终,不可变.final是个修饰符,它可以用来修饰类,类的成员,以及局部变量. 1.修饰类 被final修饰的类不可以被继承,但是可以继承其他类. class Yy {} final cl

final关键字,static关键字

Final final的意思为最终,不可变.final是个修饰符,它可以用来修饰类,类的成员,以及局部变量.不能修饰构造方法. 注意: 被final修饰的类不能被继承但可以继承别的类 class Yy {} final class Fu extends Yy{} //可以继承Yy类 class Zi extends Fu{} //不能继承Fu类 final修饰成员方法:    1.该方法可以被子类继承,但是不能被重写    2.从父类那里继承来的方法重写后可以加final关键字 class Fu

C#学习笔记---修饰符,this关键字和static关键字

1.  C#中类的修饰符: public 表示不限制对该类的访问  protected 表示只能从所在类和所在类派生的子类进行访问    private 只有其所在类才能访问 internal 只有对用一个包中的应用程序或库才能访问  abstract 抽象类不允许建立类的实例 sealed 密封类不允许被继承 与Java相比,protected修饰符的定义有所改变.C#中增加的internal,类似于Java中protected的定义.sealed修饰符类似Java中final class的定

PHP中的静态关键字-Static

当初去盛大笔试的时最后有两道题目,一道题目是关于Static,一道是关于clone()方法: Static表示的是静态关键字,可以修饰变量和方法: 静态变量(属性): 静态变量可以理解为“只有一个”,无论它所在的类创造多少个实例,它始终只有一个,在内存中只有一份,为所有的实例共用. 下面是例子: <?phpclass dome{public static $var = 1;public function myfun(){echo "var is ".self::$var.&quo

self ,super , static关键字

1.self关键字  自己的   代表当前对象和当前类的. a.如果self是在对象方法中使用的话,self就代表当前的对象. self其实是一个指针,是当前对象的地址. 有什么用? 对象方法中,是可以声明一个和属性名字相同的局部变量的. 在对象方法里,如果你直接使用这个名字相同的这个变量,得到的值是这个局部变量的值. 如果我就是要拿到属性的值呢?就是用self关键字去执向. 如果在对象方法中,要去调用当前对象的其他的对象方法,就使用self去调用. b. self也是可以用在类方法中的,sel

PHP static关键字和self关键字的区别

在PHP的一个类中,带有static关键字的方法和属性被称为静态方法和静态属性,这样的方法和属性可以通过类直接访问,而不需要通过类对应的实例来进行访问,在类中访问静态变量以及静态属性的时候,可以使用self关键字和static关键字,两种访问方式看起来似乎没有区别,但是实际上还是不一样的 abstract class Person { public static $_className = 'Person'; public static function getIntro() { return