当前位置: 首页 > news >正文

Java基础内部类、包的声名、访问修饰符、代码块整理

       内部类

14.1内部类概念

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

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

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

 

14.2成员内部类

成员内部类,定义在外部类中的成员位置。与类中的成员变量相似,可通过外部类对象进行访问

 

格式:

class 外部类 {

    修饰符 class 内部类 {

       //其他代码

}

}

 

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

 

 

14.3局部内部类

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

 

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

 

 

14.4内部类的实际使用——匿名内部类

 

14.4.1匿名内部类概念

内部类是为了应对更为复杂的类间关系。查看源代码中会涉及到,而在日常业务中很难遇到,这里不做赘述。

最常用到的内部类就是匿名内部类,它是局部内部类的一种。

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

n  临时定义某一指定类型的子类

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

14.4.2定义匿名内部类的作用与格式

匿名内部类是创建某个类型子类对象的快捷方式。

 

格式:

    new 父类或接口(){

       //进行方法重写

    };

 

使用匿名对象的方式,将定义子类与创建子类对象两个步骤由一个格式一次完成,。虽然是两个步骤,但是两个步骤是连在一起完成的。

匿名内部类如果不定义变量引用,则也是匿名对象

例子:

    new Person(){

       public void eat() {

           System.out.println(“我吃了”);

    }

    }.eat();

 

 

 

  包的声明与访问

 

15.1包的概念

java的包,其实就是我们电脑系统中的文件夹,包里存放的是类文件。

在项目中,我们将相同功能的类放到一个包中,方便管理。并且日常项目的分工也是以包作为边界。

15.2包的声明格式

格式:

package 包名.包名.包名…;//包的声明,必须在有效代码的第一行

 

 

    访问修饰符

Java中提供了四种访问权限,使用不同的访问权限时,被修饰的内容会有不同的访问权限

 

 

 

public

protected

default

private

同一类中

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

 

不同包的子类

 

 

不同包中的无关类

 

 

 

 

 

 

编写的类、方法、成员变量的访问

l  要想仅能在本类中访问使用private修饰;

l  要想本包中的类都可以访问不加修饰符即可;

l  要想本包中的类与其他包中的子类可以访问使用protected修饰

l  要想所有包中的所有类都可以访问使用public修饰。

l  注意:如果类用public修饰,则类名必须与文件名相同。一个文件中只能有一个public修饰的类。

 

  代码块

 

17.1局部代码块

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

特点:

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

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

 

 

17.2构造代码块

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

特点:

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

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

 

17.3静态代码块

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

特点:

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

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

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

转载于:https://www.cnblogs.com/mengmengi/p/10528265.html

相关文章:

  • c/c++ 网络编程 read,write函数深入理解
  • DevExpress WinForms使用教程:SVG图库和Image Picker
  • 4.标准信号与槽
  • 爬取碧蓝航线wiki
  • LeetCode 第104题 二叉树的最大深度
  • 学习进度二
  • Maven 属性
  • ASP.NET Core 基于JWT的认证(二)
  • javascript面向对象编程,带你认识封装、继承和多态
  • 【SQL优化】MySQL官网中可优化的层次结构
  • 1.2变量
  • Kubernetes 笔记 06 豌豆荚之旅(一)
  • 2019.3.19
  • JPA将查询结果转换为DTO对象
  • CTF-rootme 题解之PHP filters
  • angular学习第一篇-----环境搭建
  • CentOS7 安装JDK
  • django开发-定时任务的使用
  • Flannel解读
  • HTML5新特性总结
  • httpie使用详解
  • Java 多线程编程之:notify 和 wait 用法
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • JDK 6和JDK 7中的substring()方法
  • mysql中InnoDB引擎中页的概念
  • php ci框架整合银盛支付
  • PHP CLI应用的调试原理
  • React+TypeScript入门
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • Twitter赢在开放,三年创造奇迹
  • 从零开始在ubuntu上搭建node开发环境
  • 如何合理的规划jvm性能调优
  • 如何在 Tornado 中实现 Middleware
  • 怎么将电脑中的声音录制成WAV格式
  • python最赚钱的4个方向,你最心动的是哪个?
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 数据可视化之下发图实践
  • ​渐进式Web应用PWA的未来
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #if 1...#endif
  • #pragma multi_compile #pragma shader_feature
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (1)STL算法之遍历容器
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (六)vue-router+UI组件库
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)详解PHP处理密码的几种方式
  • .naturalWidth 和naturalHeight属性,
  • .NET序列化 serializable,反序列化
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell