栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java基础笔记009—内部类+关键字

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java基础笔记009—内部类+关键字

java基础笔记009—内部类+关键字

今日内容
1. 【理解】什么是内部类
2. 【掌握】匿名内部类
4. 【理解】final关键字的使用
5. 【理解】包的定义及使用
6. 【理解】权限修饰符
7. 【掌握】static关键字的使用
一、内部类 1.1概念

内部类A就是定义在一个类B里面的类,A就是B的内部类,B是A的外部类

public class B{
    public class A{			//成员内部类
        
    }
    public void method(){
        class D{			//局部内部类
            
        }
    }
}
class C{		//C不是B的内部类,同级类
    
}
1.2内部类分类

1、成员内部类 2、局部内部类 3、匿名内部类

1.2.1成员内部类
  • 定义及格式
    定义在一个类的类里,方法外的类就是成员内部类。
class B{
    class A{
        
    }
}
  • 成员内部类特点
1.成员内部类中可以直接访问外部类成员,包括私有成员。
2.外部类要访问成员内部类的成员,必须创建内部类对象。
3.成员内部类可以在外部类、其他类中创建使用。
  • 成员内部类的对象创建

    1. 在它的外部类,正常使用

      成员内部类名  变量名 = new 成员内部类名();
      
    2. 在其他类中

      外部类.内部类  变量名  =  new 外部类().new 内部类();
      
  • 成员内部类编译生成的.class文件格式

    也会生成独立class文件,但会在前面加上外部类名,固定格式:外部类名$内部类名.class

1.2.2局部内部类
  • 定义及格式
    定义在类中的普通方法中的类就是局部内部类。
public class B{
    public void method(){
        int i = 9;
        class A{		//A就是B的局部内部类
            
        }
    }
}
  • 局部内部类的特点

    1.局部内部类和局部变量一样,定义在类中方法里
    2.局部内部类随着方法的创建而创建,当方法执行完毕后将被回收
    3.局部内部类只能在定义它的方法中创建对象并使用
    4.局部内部类中同样可以操作外部类的所有成员,包括私有
    
  • 局部内部类的对象创建
    局部内部类只能在定义它的方法中创建对象并使用

    public class B{
        public void method(){
            int i = 9;
            class A{		//A就是B的局部内部类
                public void show(){
                    System.out.println("局部内部类方法执行……");
                }
            }
            //在方法中创建并使用局部内部类对象
            A a = new A();
            a.show();
        }
    }
    
1.2.3匿名内部类
  • 定义及格式
    匿名内部类就是实现/重写了父接口或父类的匿名子类对象。

    //格式
    父类/父接口  变量名  =  new 父类/父接口(){
        //重写方法
    	......
    };
    

    以接口为例:

    //接口
    public interface B{
        void show();
    }
    //测试类的main方法
    public class Test{
        public static void main(String[] args){
            B b = new B(){
                //实现接口B方法
                public void show(){
                    System.out.println("匿名内部类方法执行……");
                }
            };
        }
    }
    
  • 匿名内部类的特点

    1.匿名内部类必须是对父类或父接口声明的变量的赋值。
    2.当是父类声明变量使用匿名内部类赋值时,变量只能操作父类属性和匿名内部类重写的方法,当然,父类中原有的非抽象方法就算没有重写,也能通过该变量调用。子类特有方法不能调用。
    3.当是父接口声明变量使用匿名内部类赋值时,变量只能操作匿名内部类实现的接口方法,当然,接口原有的静态方法和默认方法就算没重写,也能通过该变量调用。子类特有方法不能调用。
    4.本质与就是多态。
    
二、final关键字 2.1 解释

final 关键字,有道释义:最终的。可以用来修饰类、方法、和变量。

2.2final使用 2.2.1修饰类
  • 修饰的类,不能被继承。且不能修饰抽象类和接口。

  • 格式

    final class{
        
    }
    
2.2.2 修饰方法
  • 修饰的方法,可以被继承,不能被重写。且不能修饰抽象方法。

  • 格式

    访问权限修饰符 final 返回值类型 方法名(){
        方法体
    }
    
2.2.3修饰变量
  • 修饰的变量,叫做自定义常量,

    • 1.修饰局部变量–基本数据类型,只能赋值一次,再赋值会报错,可声明时赋值,也可声明后赋值。

      public class A{
          public void show(){
              final int a = 9;
              final int b;
              b=3;
              //a=1;	再次赋值,报错,下同
              //b=4;
          }
      }
      
    • 2.修饰成员变量–基本数据类型,只能赋值一次,再赋值报错,赋值方法有三种

      //1.赋值方法一,声明时赋值,最常用
      public class A{
          final int a = 9;
      }
      //2.构造方法中赋值,这里需要将所有自定义构造方法都对该自定义常量进行赋值。
      public class A{
          final int a;
          public A(){
              a=9;
          }
          public A(int a){
              this.a  = a;
          }
      }
      //3.静态代码块赋值,但final关键字前要加static
      public class A{
          static final int a;
          static {
              a = 5;
          }
      }
      
    • 修饰引用数据类型,同样只能赋值一次,但引用数据类型存储涉及栈、堆、方法区(包含常量池),所以引用数据变量(栈中)存放的堆中地址不能改变,但堆中存放的常量池的内容可以改变。

      public class A{
          public void show(){
              final B b = new B(); 
      		//b = new B();				报错
              b.属性1 = 4;				  //不报错
              b.属性1 = 6;				  //不报错
          }
      }
      
三、包package 包的定义及使用
包:本质上就是文件夹
  • 创建包:(单级包、多级包)
    • 多级包之间使用 " . " 进行分割
    • 多级包的定义规范:公司的网站地址翻转(去掉www)
  • 包的命名规则:字母都是小写

www.baidu.com --> com.baidu.模块功能的名称

com.baidu.当前的项目的名称.模块功能的名称

四、访问权限修饰符 4.1四种访问权限修饰符

访问权限由大-------------------->小

公共的public 受保护的protected 默认的 私有的private

4.2访问权限控制范围
访问权限修饰符修饰属性或方法时当前类同package子孙类其他package
public / 公共的
protected / 受保护的×(子孙类可访问)
不写,默认访问权限修饰法√(不同包时不可访问)×
private / 私有的×××
五、static关键字 5.1static解释

static 静态的,可修饰变量,方法,静态代码块,表示是类的,static修饰的内容只在使用被创建,方法方法区中,所有该类对象共享。

5.2static的使用 5.2.1修饰变量
  • 修饰变量,称为静态变量,可以被(类名.变量名)直接使用,所有该类对象共享。

    public class A{
        static int a = 9;
    }
    //测试类
    public class Test{
        public static void main(String[] args){
            A a1 = new A();
            A a2 = new A();
            //一下三种调用都对,且对静态变量a造成的操作是相互叠加的。
            a1.a = 8;
            a2.a = 4;
            A.a = 1;
        }
    }
    
5.2.2修饰方法
  • 修饰方法,称为静态方法,可以被(类名.方法)直接使用,所有该类对象共享,不能被子类重写。

    public class A{
        public static void show(){
            System.out.println("静态方法……");
        }
    }
    //测试类
    public class Test{
        public static void main(String[] args){
            A a1 = new A();
            A a2 = new A();
            //一下三种调用都对。
            a1.show();
            a2.show();
            A.show();
        }
    }
    
5.2.3修饰代码块
  • 修饰代码块(即一个花括号{}中的代码集合),称为静态代码块,类第一次使用时加载,且只加载一次。

    public class A{
        //静态代码块
        static {
           	代码块;
        }
    }
    
5.2.4static使用注意事项
  1. 静态方法只能调用静态方法和静态成员变量,不能调用普通方法和普通成员变量。
  2. static修饰的部分都是在类加载时执行一次,所有该类对象共享。
  3. static修饰内容存储结构,参考:从内存角度理解static与final关键字 - 简书
5.3含有static修饰内容的类加载构成

参考: java创建对象时类的加载顺序_samuBO的博客-CSDN博客

|父类静态变量 or 父类静态代码块 [看位置,顺序执行,从上往下]
| 子类静态变量 or子类静态代码块 [看位置,顺序执行,从上往下]
| 父类非静态变量 or 父类非静态代码块[看位置,顺序执行,从上往下]
| 父类构造方法
| 子类非静态变量 or 子类非静态代码块[看位置,顺序执行,从上往下]
| 子类构造方法

java基础笔记008

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/336825.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号