Java static关键字,final关键字

1、static关键字的特点:

a.随着类的加载而加载
b.优先于对象存在
c.被类的所有对象共享
d.可以通过类名调用
    其实它本身也可以通过对象名调用。
    推荐使用类名调用。
    静态修饰的内容一般我们称其为:与类相关的,类成员

2、static的注意事项:

a.在静态方法中是没有this关键字的。
    因为静态是随着类的加载而加载,this是随着对象的创建而存在。
    静态比对象先存在。
b.静态方法只能访问静态的成员变量和静态的成员方法
    静态方法:
        成员变量:只能访问静态变量
        成员方法:只能访问静态成员方法
    非静态方法:
        成员变量:可以是静态的,也可以是非静态的
        成员方法:可是是静态的成员方法,也可以是非静态的成员方法。
例如:
        class Demo {
            int num1 = 10;                      //非静态的成员变量
            static int num2 = 20;               //静态的成员变量

            public void print1() {//非静态的成员方法,既可以访问静态的成员也可以访问非静态的
                System.out.println(num1);
                System.out.println(num2);
            }

            public static void print2() {       //静态的成员方法
                //System.out.println(this.num1);//静态的成员方法不能访问非静态的,报错。
                System.out.println(num2);
            }
        }

3、静态数据加载内存图:

这里写图片描述

4、final关键字:

final是最终的
final修饰特点
    a.修饰类,类不能被继承
    b.修饰变量,变量就变成了常量,只能被赋值一次
    c.修饰方法,方法不能被重写
比如你的类里面的一些重要的方法不想被子类修改,你可以定义为final
如果你类里面所有方法都不想被改写,把整个类定义为final
String 类就是一个final类

例如:
        class Son {
            final int NUM = 10;                     //常量命名规范,如果是一个单词,所有字母大写,如果是多个单词,每个单词都大写,中间用下划线隔开
            public static final double PI = 3.14;   //final修饰变量叫做常量,一般会与public static共用
            public void print() {
                //NUM = 20;//不能修改了
                System.out.println(NUM);
            }
        }
注意:书写的顺序最好是 static final ,代码检查可能报个警告错误。

5、final关键字修饰局部变量:

修饰基本类型,是值不能被改变
修饰引用类型,是地址值不能被改变,对象中的属性可以改变
例如:
    class Demo2_Final {
        public static void main(String[] args) {
            final int num = 10;//final修饰基本类型
            //num = 20;//不能被修改
            System.out.println(num);

            final Person p = new Person("张三",23);//final修饰引用类型
            //p = new Person("李四",24);//地址不能被改变了
            p.setName("李四");//可以修改属性值
            p.setAge(24);
            System.out.println(p.getName() + "..." + p.getAge());

            method(10);//会输出10
            method(20);//会输出20
            //因为在执行第一个method的时候,执行完了就弹栈消失了,
            //第二个方法调用重新进栈,重新赋值了,所以会打印20
        }

        public static void method(final int x) {//修饰形参,在这个方法的匿名内部类可以访问。
            System.out.println(x);
        }
    }

    class Person {
        private String name;            //姓名
        private int age;                //年龄
        public Person(){}               //空参构造
        public Person(String name,int age) {
            this.name = name;
            this.age = age;
        }
        public void setName(String name) {  
            this.name = name;
        }
        public String getName() {       
            return name;
        }
        public void setAge(int age) {   
            this.age = age;
        }
        public int getAge() {
            return age;
        }
    }
注意:有时候我们在方法内部类中(android setListener中),想访问形参数据,这个时候我们可以用final修饰。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值