java之final关键字

java之final关键字

在java中,final含义在不同场合下有细微的差别,但总体上来说,他指的是“这是不可变的”。

  • 修饰数据:这时候,数据变成常量。

    • 必须初始化值。

    • 被final修饰的成员变量赋值,有两种方式。第一种,直接赋值。第二种,全部在构造方法中赋值。

      • 第一种

        public  class FinalTest {
            private final int age=10;
            private final int sex=1;
        }
        
      • 第二种

        public  class FinalTest {
        
            private final int age;
            private final int sex;
        
            public FinalTest(int age, int sex) {
                this.age = age;
                this.sex = sex;
            }
        }
        
    • 如果修饰的成员变量是基本类型,则表示这个变量的值不能改变。

    • 如果修饰的成员变量是一个引用类型(String),则是说这个引用地址的值不能改变,但是这个引用所指向对象里面的内容还是可以改变的。

      public  class FinalTest {
          private final int age=10;
          private final int sex=1;
          private final String name;
          public FinalTest(String name) {
              this.name = name;
          }
      }
      
    • 如果修饰的成员变量是一个对象,则必须直接复制,并不能在构造函数中赋值,会报语法错误。但是其对象的属性值可以通过内部方法修改设定比如get方法。

      • 必须

         private final Cat c =new Cat();
        

      所谓对象的内容是指对象的属性值等

      //user变量的引用是不能够改变的,否则的话,编译会报错
            //    user=new User();
            //user变量的值是能够修改的,但所指向的引用是不能够改变的
            user.setUserName("小王");
      
  • 修饰方法参数

    • 修饰的是基本类型,那么在这个方法的内部,基本类型的值是不能够改变的.

    • 如果修饰的是引用类型的变量,那么就需要注意了,引用类型变量所指的引用是不能够改变的,但是引用类型变量的值是可以改变的。

      package com.jd.test;
      
      import com.jd.domain.User;
      
      /**
       * 
       * final修饰参数的测试例子
       * 
       * @author  zhanghao10@jd.com
       * @since    2015-10-8
       */
      public class Test{
            public static void main(String hh[]){
            User user=new User();
            user.setId(1);
            user.setUserName("校长");
            user.setPassword("123456");
            checkInt(user);
      }
      
      /**
       * 对于基本类型,基本类型的值在方法内部是不能够改变的
       * @param i
       */
      public static void checkInt(final User user)
      {
            //user变量的引用是不能够改变的,否则的话,编译会报错
            //    user=new User();
            //user变量的值是能够修改的,但所指向的引用是不能够改变的
            user.setUserName("小王");
      
          }
      }
      
  • 修饰方法

    • 被final修改的方法不能被重写。
    • 一个类的private【方法】会被自动指定为final方法,不能重写。
  • 修饰类:表示这个类不能被继承。

  • 总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值