final和static关键字

java基础

**

final和static关键字

**

这个,到了多态前最后的东西了,也是Java语法中最后仅剩的一些东西。废话不多说,嘿喂够

      把这俩放一起也没别的意思(就是他俩没啥关系),此篇博客主要是这个static关键字。至于这个final关键字嘛,最后就剩这个了,一并搞了。

先搞final,这个简单。Let ’s go

final:

    作用:修饰变量,方法,类

这个final嘛,和那个抽象有点相反的意思。

      我们抽象方法,在使用的时候必须重写实现才能用,这个final则是不能重写。就像它的意思“最终”,就是它不能在向下了。

    1、用final修饰常量:不能重赋值

    2、用final修饰方法:不能重写

    3、用final修饰类,不能被继承

结合接口抽象类。抽象方法、接口和抽象类的声明等都不可能出现final关键字。

简单说就是有abstract没final,有final没abstract(水火不容)

 

其实final也没啥,就这么简单。

记得使用final必须给定初始值即可。(绝对不能只给声明,无赋值。一旦赋值则不能更改)

重要的是static,这个关键字在Java语法这里算是第一个难点。

来,我们盘它!!!

static:

    它还是修饰变量,方法,类(内部类)的一个关键字,当然比之前的关键字多了一个可以直接搞静态代码块

我们都知道这个关键字是声明为静态

这里我们需要知道的概念可能比较多!!!

从最开始使用Java的时候,我们知道主方法main,它就是静态的


public class Test{

	public void play(){
	
	}
	
	public static void main(String []args){
		
		play();//报错
	
	} 

}

我们知道,Java程序这么搞,先编译不通过。解决的话,要么将play方法改为static,要么实例化一个Test对象,然后通过对象调用(也就是 Test t = new Test();t.play(); )。

现在我们要知道的就是static的特点

    1、随着类的加载而加载

    2、优先于对象存在

    3、被所有对象所共享

    4、可以直接被类名调用

至于这些特点的具体,到后面类加载过程,仔细盘一盘

先看static和非static的区别

    1、生命周期

静态变量随着类的加载而加载,随着类的消失而消失。生命周期最长。

非静态变量随着对象的创建而存在,随着对象的消失而消失。

    2、所属

静态变量和类相关,属于类,可以直接类名调用,也可以对象名调用。也称为类变量。

非静态变量和对象相关,属于对象,只能被对象名调用。称为实例(对象)变量。

    3、内存(不急)

静态变量存储于方法区中的静态区。

非静态变量存储于对象的区域,在堆内存中。

    4、数据

静态变量的数据被所有的对象共享。

非静态变量是每个对象特有的数据。

直接搞它就行了,试一试不就知道了


public class Test {

    static class Person{

        static String name = "张三";

        String car;

        public Person() {
        }

        //发现静态变量不能传参进构造方法this点不出来
        public Person(String car) {

            this.car = car;

        }

        void show (){

            System.out.println(name+" "+car);

//        show1();//可以调用

        }

        //静态方法内不能访问非静态方法和成员
        static void show1(){

            System.out.println(name);

        }
    }

    public static void main(String[] args) {

        Person p1 = new Person("玛莎拉蒂");
        p1.show();
        p1.show1();

        Person p2 = new Person("保时捷");
        p2.show();
        p2.show1();

        p1.name = "李四";p1.car="布加迪威龙";
		//Person.name = "李四";//和p1或p2点name一样的
        p1.show();
        p1.show1();
        p2.show();
        p2.show1();

    }
    
}

运行后看看结果

	张三 玛莎拉蒂
	张三
	张三 保时捷
	张三
	李四 布加迪威龙
	李四
	李四 保时捷
	李四

这下是不是明白特点里(2)所属和(4)数据了解了。

而static的生命周期和内存相关就需要对Java的底层原理进行分析,暂时我们知道这个static对数据的改变和它的所属即可。

需要注意的是

    静态成员只能访问静态成员。

    静态方法中不能有this,super关键字。

    主函数是静态的

到了这里,前期所有的关键字基本上已经完了。

我们写代码是对static的使用考虑

    1.属性

当这个属性是所有对象所共享的时候,我们就把它定义为static修饰的。
当这个属性是每个对象所特有的时候,就把它定义为非static修饰的。

    2.方法

某个成员方法访问了对象所共享的内容。或者说,访问了静态成员。那么,该方法 就必须定义为static修饰的。访问了特有的属性,我们就不能要让它被静态修饰。

到这里,我们来对目前所有关键字看看

1、private、protected、public这些访问修饰符,处于安全及OOP思想开发合理运用即可,方法,类和字段上都可以对其设定访问修饰符

2、this、super用于类的实例方法和构造方法内。

用于实例方法内,方法被哪个对象调用,该方法内的this就代表哪个对象

3、abstract、final用于方法、类,final还能用于字段上。

两者类似相反关系,绝记不能同用。

4、static它和类绑定,属于类属性。

我们理解它就是类的私人财产;对象是引用,和对象没有私人所属关系即可。

 

到这里这么多关键字,我们要根据我们的需求合理去运用这些关键字,这样对我们的代码的复杂程度和可读性具有很大的提升。

接下来终于到了面向对象特征的最后一个多态~

返回 》
接口抽象类

上一篇


this和super关键字

下一篇


面向对象——多态

扩展


Java内存


类加载过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值