- 浏览: 178981 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (104)
- JavaScript备忘 (11)
- Java编程 (23)
- struts框架 (3)
- hibernate框架 (0)
- ibatis框架 (2)
- C++编程 (2)
- 数据库 (8)
- 操作系统 (2)
- Extjs (0)
- 基于web的工作流引擎设计 (0)
- 开发异常备忘 (5)
- 项目管理工具 (6)
- Spring框架 (3)
- HTML (1)
- 项目架构 (1)
- 备忘 (20)
- 设计模式 (9)
- Disruptor (0)
- CQRS (0)
- DDD (0)
- Axon (0)
- JavaScript (1)
- 微信 (0)
- 新浪微博 (1)
- 软件备份 (2)
- AngularJS (1)
- 安全性 (1)
- Linux (2)
- 工具 (4)
- OSGI (1)
- idea (2)
- Docker (1)
- 测试相关 (0)
- WebService (1)
- 数据安全 (0)
- 移动开发 (0)
- springboot (1)
最新评论
-
larryscale:
zz_wangyuhoho 写道你这个工程跑不起来呀我测试过的 ...
Springmvc3+Spring3+MyBatis3 -
zz_wangyuhoho:
你这个工程跑不起来呀
Springmvc3+Spring3+MyBatis3 -
aeolusj:
var myAlert=alert;改为var myAlert ...
js 拦截alert对话框 -
skcks:
建行内部开发平台也是做了一个类似的封装用于ajax远程调用服务 ...
通用Ajax设计 -
qiuyu1990:
这个应该是 DWR的原理吧
通用Ajax设计
内部类 (inner class)
定义:在一个类中定义另外一个类,这个类就叫做内部类。
优点:内部类可以让我们将逻辑上相关的一组类组织起来,并由外部类来控制内部类的可见性。
当我们建立一个内部类时,其对象 就拥有了与外部类对象 之间的一种关系,这是通过一个特殊的this reference形成的,使得内部类对象可以随意的访问外部类中所有的成员。
为什么要使用内部类?
1). 在内部类中,可以随意的访问外部类的成员,这可以让我们更好地组织管理我们的代码,增强代码的可读性。
2).内部类可以用于创建适配器类,适配器类是用于实现接口的类。使用内部类来实现接口,可以更好地定位与接口关联的方法在代码中的位置。
3).将内部类设置为私有的,可以隐藏实现的细节。
4).一个方法要继承另一个类且要实现一个接口,并且父类和接口中有一个相同签名的方法,此时,可以用内部类来解决这种问题
通过以下代码演示,可清楚地了解到如何进行内部类和外部类之间进行访问。
1. 在同一类中,从外部类中调用内部类的属性和方法
Outer.java
public class Outer {//外部类 private int member=123; //外部类成员 private void outerMethod(){//外部类方法 System.out.println("outer_Method:"+member); } private class Inner {//内部类 private int member = 789;//内部类成员 private void innerMethod(){//内部类方法 System.out.println("inner_Method:"+member); } } public void print (){ Inner inner = new Inner(); System.out.println("inner_Member:"+inner.member); inner.innerMethod(); } }
Test.java
public class Test {//测试类 public static void main(String[] args) { Outer outer = new Outer(); outer.print(); } }
结果:
inner_Member:789
inner_Method:789
2. 在同一类中,从内部类中调用外部类的属性和方法
Outer.java
package main.java.sameclass2; public class Outer {//外部类 private int member=123; //外部类成员 private void outerMethod(){//外部类方法 System.out.println("outer_Method:"+member); } private class Inner {//内部类 private int member = 789;//内部类成员 private void innerMethod(){//内部类方法 System.out.println("inner_Method:"+member); } private void accessOuter(){//内部类访问外部类 System.out.println("outer_Member:"+Outer.this.member); Outer.this.outerMethod(); } } public void print (){ Inner inner = new Inner(); inner.accessOuter(); } }
Test.java
package main.java.sameclass2; public class Test {//测试类 public static void main(String[] args) { Outer outer = new Outer(); outer.print(); } }
结果:
outer_Member:123
outer_Method:123
3. 在一个类中,调用另一个类中的内部类对象的属性和方法
Outer.java
package main.java.nosameclass1; public class Outer {//外部类 private int member=123; //外部类成员 private void outerMethod(){//外部类方法 System.out.println("outer_Method:"+member); } public class Inner {//内部类 private int member = 789;//内部类成员 private void innerMethod(){//内部类方法 System.out.println("inner_Method:"+member); } public void accessOuter(){//内部类访问外部类 System.out.println("outer_Member:"+Outer.this.member); Outer.this.outerMethod(); } } public void print (){ Inner inner = new Inner(); inner.accessOuter(); } }
Test.java
package main.java.nosameclass1; public class Test {//测试类 public static void main(String[] args) { Outer outer = new Outer(); Outer.Inner inner = outer.new Inner(); inner.accessOuter(); } }
结果:
outer_Member:123
outer_Method:123
4. 将一个内部类定义在一个方法中,定义在一个条件名句块中,定义在一个单独的语句块中均可以,但其对外使用的范围也受到相应的限制,不管内部类嵌套的层次有多深,均可以访问外部类的属性及方法。
5. 在方法中定义的内部类,如果要访问方法中定义的本地变量或方法的参数,则变量必须被声明为final.
6. 内部类可以声明为private 或protected;还可以声明为abstract或final.
7. 内部类可以声明为static的,但此时就不能再使用外部类的非static的属性和非静态的方法。
8. 非static的内部类中的属性不能声明为static的,只有最外层或static的内部类中才可以声明static成员。
9. 内部类的派生类
Car.java[外部类和内部类]
package main.java.deriveInnerClass; public class Car {//汽车类(外部类) class Driver{//司机类(内部类) } }
CarDriver.java[ 内部类的派生类]
package main.java.deriveInnerClass; import main.java.deriveInnerClass.Car.Driver; public class CarDriver extends Driver {//派生自内部类(Driver) CarDriver(Car car){ car.super(); //建立内部类与外部类的联系 } }
10. 用内部类实现一个接口
Car.java[接口]
package main.java.anonymous; public interface Car { void run(); void start(); }
Audi.java
package main.java.anonymous; public class Audi { class Q7 implements Car { public void run() { System.out.println("Q7:run"); } public void start() { System.out.println("Q7:start"); } } Car getCar(){ return new Q7(); } }
Test.java
package main.java.anonymous; public class Test { public static void main(String[] args) { Audi audi = new Audi(); audi.getCar().start(); audi.getCar().run(); } }
结果:
Q7:start
Q7:run
11. 匿名的内部类:
Car.java[接口]
package main.java.anonymous; public interface Car { void run(); void start(); }
Audi.java
package main.java.anonymous; public class Audi { class Q7 implements Car{ public void run() { System.out.println("Q7:run"); } public void start() { System.out.println("Q7:start"); } } Car getCar(){ // return new Q7(); return new Car(){//匿名的内部类 public void run() { System.out.println("Q8:run"); } public void start() { System.out.println("Q8:start"); } }; } }
Test.java
package main.java.anonymous; public class Test { public static void main(String[] args) { Audi audi = new Audi(); audi.getCar().start(); audi.getCar().run(); } }
结果:
Q8:start
Q8:run
发表评论
-
Springboot项目(整合WebService带协议头验证+WebSocket+Web+动态日志输出)
2020-05-12 14:05 1117环境配置: springboot 1.5.14 ... -
activiti5.18 默认查询的sql生成两个order by
2019-10-17 12:14 393<spring.version>4.2.4.RE ... -
springboot 定时任务重复执行
2019-06-04 17:35 2192开发一数据接收WebService,里面用到定时任务@Sc ... -
mybatis-generator自动生成代码[增加Service的生成]
2016-03-22 10:08 9899源码包见附件[Maven项目,在1.3.2基础上修改官方源码] ... -
网络状态监控
2014-06-27 12:56 635import java.io.BufferedReader; ... -
Spring MVC+Jquery Ajax 前后台传递Json对象
2014-03-29 10:02 6147关于Spring MVC3.X 接收和返回Json ... -
同时启动多个Tomcat服务器
2013-10-25 17:15 597我所用Tomcat服务器都为zip版,非安装版。以两个为例: ... -
md5+BASE64加密
2013-10-08 23:20 981import sun.misc.BASE64Encoder; ... -
用MD5对密码进行加密
2013-08-10 15:21 1026package com.yong.bin.md5; i ... -
把CST格式的字符串转成普通的日期格式
2013-02-27 15:58 1591public static void main(Str ... -
Springmvc3+Spring3+MyBatis3
2012-11-27 15:03 1381最近写的一个三层框架:Springmvc3+Spring3+ ... -
自定义标签
2012-10-26 17:13 0<?xml version="1.0" ... -
log4j.properties
2012-10-24 12:32 0log4j.rootLogger=INFO, log4j ... -
通用Ajax设计
2012-10-21 10:20 2021利用Servlet和反射技术实现通用的Ajax调用设计,如下: ... -
导入Jar包的快捷键
2012-07-02 22:47 1177导入当前光标所在的地方未导入的Jar包: shift+ctrl ... -
Extjs grid 后台
2012-05-22 08:16 0public String gridRecordsByXML( ... -
Extjs 布局
2012-04-18 12:27 0<%@ page language="java ... -
FreeMarker在java项目中的应用
2011-02-15 21:34 3212一、体验FreeMarker FreeMar ... -
动态代理 [用cglib实现]
2011-02-09 10:28 1246一. 用cglib 实现java 的動態代理 ... -
动态代理 [用jdk实现]
2011-02-08 16:41 1202一. java 的jdk動態代理 ...
相关推荐
Java之——类热加载 在Java编程中,类的加载是程序运行的重要环节。传统的Java应用程序在启动时,由JVM(Java虚拟机)通过类加载器将类加载到内存中,一旦加载完成,除非程序退出,否则这些类通常不会被重新加载。...
IBM java培训内部资料——Java 常用类讲解.pptx
4. **JVM内部机制**:了解Java虚拟机(JVM)的工作原理,包括类加载、内存管理、垃圾回收以及性能优化策略,这有助于编写出更加高效和稳定的代码。 5. **Java开发工具**:讲解JDK自带的工具,如javac编译器、...
Java内部类之局部内部类 Java内部类是一种特殊的类,它可以嵌套在其他类中,今天我们主要介绍Java局部内部类的相关知识,了解局部内部类...局部内部类是一种非常有用的技术,可以使我们的代码更加简洁、易读和可维护。
Java Web开发是构建Web应用程序的一种常见方式,它主要基于Java技术栈。在"09_Java Web——Request&Response案例"这个主题中,我们聚焦于HTTP请求和响应这两个核心概念,它们是Web应用中客户端与服务器交互的基础。...
Java SE中的静态内部类是一种特殊的内部类,它与非静态内部类(也称为成员内部类)有着显著的区别。静态内部类并不需要外部类的实例来创建它的对象,而是可以直接通过类名进行实例化,就像普通的类一样。在给定的...
这个压缩包文件“java面试——杭州-阿里云-Java中级.zip”包含了一份详细的PDF文档,它可能涵盖了面试中常遇到的问题、技术要点以及解决策略。以下是基于Java中级工程师面试的一些关键知识点: 1. **基础语法**:...
在Java并发编程中,无锁实现是一个高级技术,它可以让多个线程在没有使用传统锁机制(如synchronized关键字或显示锁Lock)的情况下,安全地执行对共享资源的操作。无锁机制主要依赖于硬件的原子指令,尤其是比较并...
在深入Java虚拟机的光盘中,可能包含了一系列关于JVM内部机制的文档、示例代码和演示程序,这些内容有助于开发者理解JVM的工作方式以及如何优化Java代码。其中,"Inside JVM"可能是一个详细的指南,涵盖了类加载机制...
4. **JVM优化**:熟悉JVM内部结构,包括类加载机制、运行时数据区、字节码执行引擎等。理解并能运用JVM调优工具(如jconsole、VisualVM等),进行参数调整以提升系统性能。 5. **设计模式**:设计模式是软件开发的...
这份"java面试——SpringCloud面试专题.zip"资源很可能包含了关于Spring Cloud的深度面试指南,旨在帮助求职者准备Spring Cloud相关的技术问题。以下是对Spring Cloud关键知识点的详细解析: 1. **Spring Cloud概述...
在Java高级面试中,杭州的蚂蚁金服公司通常会考察候选人的深度技术理解、实际问题解决能力和项目经验。这份"java面试——杭州-蚂蚁金服-Java高级.zip"压缩包包含了一份详细的PDF文档,旨在帮助求职者准备这些面试。...
《基于JSP技术的猎头公司管理软件设计与实现——内部事务部分》是针对现代猎头公司的业务流程,采用Java开发技术,结合JSP(JavaServer Pages)进行的一次实践性项目开发。该项目旨在构建一个高效、易用的管理平台,...
JDK5.0引入了一些重要的新特性,例如自动内存管理的垃圾回收机制、枚举类型、匿名内部类、泛型以及增强的for循环(也称为foreach循环)。这些特性极大地提升了Java的可读性和实用性。 此外,笔记可能还会涉及异常...
《基于JSP技术的猎头公司管理软件设计与实现——内部事务部分》 在现代商业环境中,猎头公司扮演着连接企业与人才的关键角色。为了提高业务效率和管理水平,开发一款基于JSP技术的猎头公司管理软件显得尤为重要。本...
【标题】中的“基于JSP技术的猎头公司管理软件的设计和实现——内部事务部分”表明,这是一个关于使用JavaServer Pages (JSP) 技术开发的管理软件项目,主要关注的是猎头公司的内部事务处理。JSP是Java平台上的一个...
### Java知识精炼总结 #### 一、Java概述与基础知识 **1....** 编程是指通过编写计算机程序来实现特定...以上总结了Java的一些基础概念和技术要点。接下来的部分将深入探讨更多高级主题,如异常处理、线程、集合框架等。
《基于JSP技术的猎头公司管理软件设计与实现——内部事务部分》 本文将深入探讨一个毕业设计项目,即采用JavaServer Pages (JSP) 技术开发的猎头公司管理软件,主要关注其内部事务处理部分。JSP是一种在服务器端...
Java提供了`java.util.Random`类,它能够生成0到最大值(包括0但不包括最大值)之间的伪随机数。我们可以通过构造函数传入种子值来初始化`Random`对象,或者直接使用默认种子。然后,我们可以调用`nextInt()`方法...