zoukankan      html  css  js  c++  java
  • 2018-07-27Final+Static+匿名对象+3中代码块

    Final修饰类:被Final修饰的类不可以被继承,但可以继承别的类(太监类)!

    Final修饰成员方法:该方法可以被子类继承,但是不能被重写;从父类继承来的方法重写后可以加Final关键字!

    Final修饰变量:基本数据类型/引用数据类型,一次赋值终身不变!

    Final修饰成员变量:必须要赋初始值,一次赋值终身不变(可以在构造方法内赋初值,不可以在Set方法里赋初值,因为构造方法是在创建对象时被调用的)!

    //基础知识:

    Final是个修饰符,它可以用来修饰类,类的成员,以及局部变量,不能修饰构造方法!

    Final特点:

    Final类不可以被继承,但是可以继承其他类!

    Final修饰的方法不可以被子类重写,但父类中没有被Final修饰方法,子类重写后可以加Final(可以被继承,但是不能被重写)!

    Final修饰的变量为常量,这个变量只能被赋值一次,且终身不变(引用数据类型:final Test tar1=new Test//这个tar1存储的是对象的地址,如果被final修饰,这个地址是不可以改变的,但是地址中包含的属性值可以修改)!

    修饰成员变量,需要在创建对象前赋值,否则报错!(也就是说,可以构造方法赋值,不可以用Set方法赋值,因为构造方法是创建对象时执行,而Set方法是创建对象完成之后,调用才可以赋值)!

    Static关键字:

    被Static修饰的成员变量属于类,不属于这个类的某个对象(也就是说,多个对象在访问或修改Static修饰的成员变量时,其中一个对象将Static成员变量值进行了修改,其他对象中的Static成员变量值跟着改变,即多个对象共享同一个Static成员变量)!

    //被Static修饰的变量/方法是放在内存(JVM)中方法和数据共享区中的静态区被优先执行(程序开始之前)的!

    Static修饰的成员可以并且建议通过类名直接访问,Static优先于Main方法执行!

    访问静态成员的格式:

    类名.静态成员变量名

    类名.静态成员方法名(参数)

    对象名.静态成员变量名 //不建议使用该方式,会出现警告!

    对象名.静态成员方法名(参数) //不建议使用该方式,会出现警告!

    注意:

    静态内容是优先于对象存在,只能访问静态,不能使用This/Super,静态修饰的内容存于静态区!

    同一个类中,静态成员只能访问静态成员,而非静态成员可以访问静态成员和普通成员!

    Main方法为静态方法仅仅为程序执行入口,它不属于任何一个对象,可以定义在任意类中!

    //小测试:

    package com.oracle.test1;

    public class Test1 {

         public static void main(String[] args) {

             //调用Method方法:

             Method();

         }

         //在包含Main方法的类中创建输出方法!

         public void Method(){

             System.out.println("测试Static");

         }

    }

    //以上代码会报错!原因是Main方法进入方法和数据共享区中的静态区时,根本不知道下面Method方法的存在,所以会报错!

    //解决方法:

    ①给Method加上static关键字,让Method方法和Main方法一起进入程序执行之前的静态区!

    ②创建Test1类的对象,用这个对象调用Method方法!

    静态修饰的成员变量不管静态还是非静态都是看父类!

    静态修饰的成员方法看父类!

    //跟对象无关,创建对象时是谁的引用变量,就是输出时就是谁的内容!

    //学这些东西是为了查JDK API做准备!

    package com.oracle.test1;

    public class Person {

         String name="熊大";

         int age=0;

         public void eat(){

             System.out.println("这是父类的方法!");

         }

         public Person getPerson(){

             return new Person();

         }

    }

    匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量!

    //匿名对象特点:

    创建匿名对象直接使用,没有变量名!

    匿名对象在没有指定其引用变量时,只能使用一次!

    匿名对象可以作为方法接收的参数/方法返回值使用!

    内部类:

    将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类!其他类也称为外部类!

    内部类分为成员内部类与局部内部类:

    我们定义内部类时,就是一个正常定义类的过程,同样包含各种修饰符、继承与实现关系等!在内部类中可以直接访问外部类的所有成员!

    内部可以访问外部,外部方法不能访问内部方法(作用域问题)!

    成员内部类:

    class 外部类 {

         修饰符 class 内部类 {

             //其他代码

    }

    }

    访问方式:

    外部类名.内部类名 变量名 = new 外部类名().new 内部类名();

    局部内部类:

    局部内部类,定义在外部类方法中的局部位置!与访问方法中的局部变量相似,可通过调用方法进行访问!

    定义格式:

    class 外部类 {

         修饰符 返回值类型 方法名(参数) {

    class 内部类 {

    //其他代码

    }

    }

    }

    访问方式:

    在外部类方法中,创建内部类对象,进行访问!

    匿名内部类,它是局部内部类的一种:

    定义的匿名内部类有两个含义:

    ①临时定义某一指定类型的子类!

    ②定义后即刻创建刚刚定义的这个子类的对象!

    //格式:

    new 父类或接口(){

         //进行方法重写

    };

    //访问修饰符:

    public

    protected

    default

    private

    同一类中

    同一包中(子类与无关类)

    不同包的子类

    不同包中的无关类

    代码块:

    局部代码块是定义在方法或语句中!

    以{}划定的代码区域,只需要关注作用域的不同即可!

    方法和类都是以代码块的方式划定边界的!

    构造代码块:

    构造代码块是定义在类中成员位置的代码块!

    优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化操作!

    每创建一个对象均会执行一次构造代码块!

    静态代码块:

    静态代码块是定义在成员位置,使用Static修饰的代码块!

    优先于主方法执行,优先于构造代码块执行,当以任意形式第一次使用到该类时执行!

    该类不管创建多少对象,静态代码块只执行一次!

    可用于给静态变量赋值,用来给类进行初始化!

  • 相关阅读:
    8.图形软件开发
    7.GDI绘图技术
    15.MFC网络通信
    JavaWeb:基于MVC设计模式的一个小案例(一)
    在虚拟机里连接PLC S7-200
    mark-又重新回到博客园
    早起的奇迹
    STM32-cJSON库的打包和解析
    Copley-STM32串口+CANopen实现双电机力矩同步
    DataStructure-链表实现指数非递减一元多项式的求和
  • 原文地址:https://www.cnblogs.com/postgredingdangniu/p/9381121.html
Copyright © 2011-2022 走看看