zoukankan      html  css  js  c++  java
  • java之 关键字&内部类

    0x01、final关键字

    final: 不可改变。可以用于修饰类、方法和变量。

    • 类:被修饰的类,不能被继承。
    • 方法:被修饰的方法,不能被重写。
    • 变量:被修饰的变量,就只能赋值一次,不能被重新赋值。

    1、修饰类

    格式如下:

    修饰符 final class 类名 {
      
    }
    例如:
    public final class FinalClassFu {
    }
    public class FinalClassZi /*extends FinalClassFu*/ {
        // FinalClassFu类被final修饰了,所以不能被继承
    }
    

    查询API发现像 public final class Stringpublic final class Mathpublic final class Scanner 等,很多我们学习过的类,都是被final修饰的,目的就是供我们使用,而不让我们所以改变其内容。

    1、修饰方法

    格式如下:

    修饰符 final 返回值类型 方法名(参数列表){
        //方法体
    }
    

    重写被 final修饰的方法,编译时就会报错。

    public class FinalMethodFu {
        public final void show(){
    
        }
    }
    public class FinalMethodZi extends FinalMethodFu {
    
        /*@Override
        public void show() {
    
        }*/
        // 无法重写父类中的show方法,因为父类中的show方法被final修饰了
    }
    

    2 、修饰变量

    局部变量——基本类型

    基本类型的局部变量,被final修饰后,只能赋值一次,不能再更改。代码如下:

    public class FinalDemo1 {
        public static void main(String[] args) {
            // 声明变量,使用final修饰
            final int A;
            // 第一次赋值 
            A = 10;
            // 第二次赋值
            A = 20; // 报错,不可重新赋值
        }
    }
    
    局部变量——引用类型

    引用类型的局部变量,被final修饰后,只能指向一个对象,地址不能再更改。但是不影响对象内部的成员变量值的修改,代码如下:

    public class FinalDemo2 {
        public static void main(String[] args) {
            // 创建 User 对象
            final User U = new User();
            
            // 创建 另一个 User对象
            // U = new User(); // 报错,指向了新的对象,地址值改变。
    
            // 调用setName方法
            U.setName("张三"); // 可以修改
        }
    }
    
    
    成员变量

    成员变量涉及到初始化的问题,初始化方式有两种,只能二选一:

    1. 显示初始化;

      public class FinalVariable {
          final int NUM1 = 10;
      }
      
    2. 构造方法初始化。

      public class FinalVariable {
          final int NUM2;
          public FinalVariable(int NUM2){
              this.NUM2 = NUM2;
          }
          public FinalVariable(){
              this.NUM2 = 10;
          }
      }
      

    被final修饰的常量名称,一般都有书写规范,所有字母都大写

    0x02、static关键字

    1、static修饰成员变量

    static 修饰成员变量时,该变量称为类变量。该类的每个对象都共享同一个类变量的值。任何对象都可以更改该类变量的值,但也可以在不创建该类的对象的情况下对类变量进行操作。

    定义格式:
    static 数据类型 变量名; 
    
    静态成员变量的访问方式:
    对象名.静态成员变量名;  
    类名.静态成员变量名;
    

    2、static修饰成员方法

    概述
    • 被static修饰的方法会变成静态方法,也称为类方法,该静态方法可以使用类名直接调用。
    格式
    修饰符 static 返回值类型 方法名 (参数列表){ 
    	// 执行语句 
    }
    
    访问方式
    对象名.方法名(实参);
    类名.方法名(实参);   推荐
    

    静态方法调用的注意事项:

    • 静态方法中不能出现this关键字
    • 静态方法中只能直接访问静态成员变量和静态成员方法
    • 静态方法中不能直接访问非静态成员变量和非静态成员方法
    • 非静态方法中可以直接访问一切成员变量和成员方法

    3、static修饰代码块

    概述
    • 被static修饰的代码块,就叫做静态代码块
    格式
    static{
    
     }
    
    定义和执行
    • 位置:类中方法外。
    • 执行:随着类的加载而执行且执行一次,优先于构造方法的执行。
    • 注意: 如果是main所在的类中的静态代码块,会优先main方法执行
    • 使用场景: 例如加载驱动,也就是只需要执行一次的代码就可以放在静态代码块中

    0x03、内部类

    内部类:将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类。

    内部类的格式:

    public class 外部类名{
           public class 内部类名{
    
          }
    }
    

    成员内部类的访问特点:

    • 内部类可以直接访问外部类的成员,包括私有成员。
    • 外部类要访问内部类的成员,必须要建立内部类的对象。

    成员内部类的创建方式:

    外部类名.内部类名 对象名 = new 外部类名().new 内部类名();
    

    0x04、匿名内部类

    匿名内部类 :是内部类的简化写法。它的本质是一个带具体实现的 父类或者父接口的 匿名的 子类对象

    在代码中比较常用的可能就是匿名内部类。
    在使用到一个接口的时候需要做的几步操作,

    1.定义实现类
    
    2.重写父接口的方法
    
    3.实例化实现类对象
    
    4.调用重写后的方法
    

    如果是只调用一次的话,那么就可以使用到匿名内部类。

    前提条件是匿名内部类必须继承一个父类或者是父接口

    public abstract class Fu {
        public abstract void fly();
        
    }
    
    
    
    main方法代码:
    
    public class ZiMain {
        public static void main(String[] args) {
    
            Fu f = new Fu() {
                @Override
                public void fly() {
                    System.out.println("会飞");
                }
            };
            f.fly();
        }
    }
    
  • 相关阅读:
    HTML5结构
    HTML5新增的非主体元素header元素、footer元素、hgroup元素、adress元素
    CF GYM 100703G Game of numbers
    CF GYM 100703I Endeavor for perfection
    CF GYM 100703K Word order
    CF GYM 100703L Many questions
    CF GYM 100703M It's complicate
    HDU 5313 Bipartite Graph
    CF 560e Gerald and Giant Chess
    POJ 2479 Maximum sum
  • 原文地址:https://www.cnblogs.com/0x7e/p/14320011.html
Copyright © 2011-2022 走看看