• JAVA Class9


    学习内容:

    1.final修饰词

    (1)修饰类:

    类无法被继承,但可以继承其他类

    (2)修饰方法:

    方法无法被子类重写

    (3)修饰局部变量:

    该变量只能被赋值一次

    (4)修饰成员变量:

    该变量必须在对象创建之前初始化,可以通过直接赋值、构造代码块或者利用构造器初始化

    (5)修饰引用变量

    该变量只有一次指向对象的机会,例:

    final Hero h;

    h = new Hero();

    h = new Hero();//报错

    public final class F {//不可被继承,但可以继承其他类
        //final int b = 0 ;创建时必须初始化
        final int b;
        F(int b){//创建对象前必须初始化且只能被赋值一次
            this. b =b;
        }
        public final void test1() {
            System.out.println("测试");
        }
        
        public static void main(String[] args) {
            final F f;//只可引用一次
            final int a;//只能赋一次值
            a = 5;
            f = new F(4);
            //f.b = 6;报错,只能赋值一次
            //f = new F();报错
            //a = 10;报错
        }
    }

    2.static修饰词

    被static修饰的方法与成员变量被称为静态方法、静态变量或者类方法、类属性

    (1)类方法可被类、实例化对象调用,类方法只能访问类属性

    (2)类属性属于“共享”属性,需要在声明时被初始化,所有实例化对象共享一个值,一改全改,一般被用作常量,加final,使其只能被赋值一次,

    类属性同样可由类、实例化对象访问,推荐使用类访问。

    public class F {
        int w;
        int t = 10;
        static int s = 10; //类属性,共享值,必须被立即初始化
        static{ //静态初始化块
               s = 10;
        }
        public static void test() {
            //w = 2;//报错,静态方法只能访问静态值,但是非静态方法可以访问静态属性
        }
        public static void main(String[] args) {
            F h = new F();
            h.s = 20;//一改全改
            System.out.println(f.s);//20
            System.out.println(h.s);//20
            System.out.println(F.s);//类访问类属性,推荐
            //静态属性、方法进入如静态区,先于非静态属性、方法创建,
       //非静态方法、属性随着实例化对象的产生而产生,故而静态方法无法访问非静态属性。
    } }

     3.内部类

     (1)成员内部类:

    public class Test{
        int i = 8;
        class bt{
            int i = 7;
            public void t() {
                System.out.println(Hero.this.i);
            }
        }
        public static void main(String[] args) {
            h.new bt().t();/成员内部类必须在有一个外部类对象时才能存在,可访问外部类属性、方法
        }
    
    }

    (2)局部内部类

    public class Test{
        public void inner() {
            class inner{
                public void te() {
                    System.out.println("局部内部类");
                }
            }
            inner i = new inner();
            i.te();//方法内访问局部内部类
        }
    }

    (3)静态内部类

    public class Test{
        int i = 8;
        static class win{
            int i = 8;
            public void t() {
                //System.out.println(Hero.this.i);//无法访问外部类属性、方法
            }
            public void tt() {
                System.out.println("静态内部类");
            }
        }
        public static void main(String[] args) {
            new win().tt();//静态内部类不需要一个外部类的实例为基础
        }
    
    }

    (4)匿名类

    继承接口重写抽象方法:

    public interface Test {
        public void test();
    }
    
    public class Test2{
        public static void main(String[] args) {
            new Test() {//匿名类,实例化同时当场重写方法
                public void test() {
                    System.out.println("匿名类测试");
                }
            }.test();
            Test ta = new Test() {
                public void test() {
                    System.out.println("引用匿名类");
                }
            };
            ta.test();
        }
    
    }

    继承一般类重写对象方法

    public class T {
        public void test() {
            System.out.println("测试");
        }
    }
    
    public class TC {
        public static void main(String[] args) {
            T t = new T() {
                public void test() {
                    System.out.println("匿名类");
                }
            };
            System.out.println(t);
        }
    }

    运行结果:,JVM分配一个TC$1的“虚拟”类名。

    4.访问修饰符

    5.代码块

    (1)静态代码块,最高执行优先级,先于main方法执行,一般用于初始化类属性,只执行一次。

    (2)构造代码块,先于构造方法执行,一般用于初始化对象属性,每实例化一个对象就执行一次。

    (3)局部代码块,大括号分隔作用域。

    public class Test{
        static{//静态代码块优于主方法、构造代码块执行,一般用于初始化类属性
            System.out.println("静态代码块");
        }
        public Hero(){
            System.out.println("构造方法");
        }
        {
            System.out.println("构造代码块");
        }
        
        public static void main(String[] args) {
            Test t = new Test();//构造代码块先于构造方法执行
            //局部代码块 大括号分隔作用域
            {
                int x = 9;
                System.out.println(x);//输出9
            }
            int x = 3;
            System.out.println(x);//输出3
        }
    
    }
  • 相关阅读:
    vue+element ui 实现菜单无限极菜单
    DOM事件绑定原理和传播机制
    数组和对象的深浅克隆
    new源码分析和Object.create的重写
    原型和原型链的学习
    4.3 模型参数的延后初始化
    4.2 模型参数的访问、初始化和共享
    CSAPP Float Point
    4.1 模型构造
    3.16 实战Kaggle比赛:房价预测
  • 原文地址:https://www.cnblogs.com/whwjava/p/8681200.html
Copyright © 2020-2023  润新知