JAVA静态和非静态内部类
直接上代码。
- package com.test.xml;
- /**
- * @author <a href="mailto:dq201@126.com">du.qiang</a>
- * @version $Revision 1.1 $ 2010-6-23 上午06:48:28
- */
- public class OutClassTest {
- static int a;
- int b;
- public static void test() {
- System.out.println("outer class static function");
- }
- public static void main(String[] args) {
- OutClassTest oc = new OutClassTest();
- // new一个外部类
- OutClassTest oc1 = new OutClassTest();
- // 通过外部类的对象new一个非静态的内部类
- OutClassTest.InnerClass no_static_inner = oc1.new InnerClass();
- // 调用非静态内部类的方法
- System.out.println(no_static_inner.getKey());
- // 调用静态内部类的静态变量
- System.out.println(OutClassTest.InnerStaticClass.static_value);
- // 不依赖于外部类实例,直接实例化内部静态类
- OutClassTest.InnerStaticClass inner = new OutClassTest.InnerStaticClass();
- // 调用静态内部类的非静态方法
- System.out.println(inner.getValue());
- // 调用内部静态类的静态方法
- System.out.println(OutClassTest.InnerStaticClass.getMessage());
- }
- private class InnerClass {
- // 只有在静态内部类中才能够声明或定义静态成员
- // private static String tt = "0";
- private int flag = 0;
- public InnerClass() {
- // 三.非静态内部类的非静态成员可以访问外部类的非静态变量和静态变量
- System.out.println("InnerClass create a:" + a);
- System.out.println("InnerClass create b:" + b);
- System.out.println("InnerClass create flag:" + flag);
- //
- System.out.println("InnerClass call outer static function");
- // 调用外部类的静态方法
- test();
- }
- public String getKey() {
- return "no-static-inner";
- }
- }
- private static class InnerStaticClass {
- // 静态内部类可以有静态成员,而非静态内部类则不能有静态成员。
- private static String static_value = "0";
- private int flag = 0;
- public InnerStaticClass() {
- System.out.println("InnerClass create a:" + a);
- // 静态内部类不能够访问外部类的非静态成员
- // System.out.println("InnerClass create b:" + b);
- System.out.println("InnerStaticClass flag is " + flag);
- System.out.println("InnerStaticClass tt is " + static_value);
- }
- public int getValue() {
- // 静态内部类访问外部类的静态方法
- test();
- return 1;
- }
- public static String getMessage() {
- return "static-inner";
- }
- }
- public OutClassTest() {
- // new一个非静态的内部类
- InnerClass ic = new InnerClass();
- System.out.println("OuterClass create");
- }
- }
- /**
- * 总结:
- * 1.静态内部类可以有静态成员(方法,属性),而非静态内部类则不能有静态成员(方法,属性)。
- * 2.静态内部类只能够访问外部类的静态成员,而非静态内部类则可以访问外部类的所有成员(方法,属性)。
- * 3.实例化一个非静态的内部类的方法:
- * a.先生成一个外部类对象实例
- * OutClassTest oc1 = new OutClassTest();
- * b.通过外部类的对象实例生成内部类对象
- * OutClassTest.InnerClass no_static_inner = oc1.new InnerClass();
- * 4.实例化一个静态内部类的方法:
- * a.不依赖于外部类的实例,直接实例化内部类对象
- * OutClassTest.InnerStaticClass inner = new OutClassTest.InnerStaticClass();
- * b.调用内部静态类的方法或静态变量,通过类名直接调用
- * OutClassTest.InnerStaticClass.static_value
- * OutClassTest.InnerStaticClass.getMessage()
- */
原文地址:
http://duqiangcise.iteye.com/blog/697476
JAVA静态和非静态内部类的更多相关文章
- “全栈2019”Java第七十六章:静态、非静态内部类访问权限
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- java静态与非静态区别
这里的静态,指以static关键字修饰的,包括类,方法,块,字段. 非静态,指没有用static 修饰的. 静态有一些特点: 1.全局唯一,任何一次的修改都是全局性的影响 2.只加载一次,优先于非静态 ...
- 基于NACOS和JAVA反射机制动态更新JAVA静态常量非@Value注解
1.前言 项目中都会使用常量类文件, 这些值如果需要变动需要重新提交代码,或者基于@Value注解实现动态刷新, 如果常量太多也是很麻烦; 那么 能不能有更加简便的实现方式呢? 本文讲述的方式是, 一 ...
- java静态类与非静态类区别
java静态与非静态区别 这里的静态,指以static关键字修饰的,包括类,方法,块,字段. 非静态,指没有用static 修饰的. 静态有一些特点: 1.全局唯一,任何一次的修改都是全局性的影响 ...
- Java非静态内部类中为什么不能有静态变量却可以有常量?
如:public class InnerClassDemo{ int x; class A{ static int a = 0;//这样写是不合法的. static final int b=0;//这 ...
- “全栈2019”Java第七十三章:外部类里多个静态非静态内部类详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Java 静态内部类与非静态内部类 学习记录.
目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...
- java之内部类(InnerClass)----非静态内部类、静态内部类、局部内部类、匿名内部类
提起java内裤类(innerClass)很多人不太熟悉,实际上类似的概念在c++里面也有,那就是嵌套类(Nested Class),关于这俩者的区别,在下文中会有对比.内部类从表面上看,就是在类中定 ...
- Java:静态内部类的使用目的、使用限制、与非静态内部类的对比
Java之静态内部类(static class) 在一个类中创建另外一个类,叫做成员内部类.这个成员内部类可以静态的(利用static关键字修饰),也可以是非静态的. 一.静态内部类的使用目的. 在 ...
随机推荐
- Codeforces Gym 100610 Problem A. Alien Communication Masterclass 构造
Problem A. Alien Communication Masterclass Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codefo ...
- C#中使用UDP通信
UDP通信是无连接通信,客户端在发送数据前无需与服务器端建立连接,即使服务器端不在线也可以发送,但是不能保证服务器端可以收到数据. 服务器端代码: static void Main(string[] ...
- ABAP 日期时间函数(转)
转自:http://www.sapjx.com/abap-datetime-function.html 函数名称 (内页-点击名称可查看操作) 函数说明 备注 FIMA_DATE_CREATE RP_ ...
- Sharepoint 2010 根据用户权限隐藏Ribbon菜单(利用css)
本文介绍的是根据用户权限隐藏整个Ribbon菜单项. 操作环境:Windows Server 2008 r2+ SharePoint 2010 1.关于SharePoint 权限详细请参考:http ...
- windows mysql utf-8中文乱码解决方法
今天写项目,无论如何实质调试,在mysql里始终是中文乱码,找了好多办法一个一个尝试,最终才找到解决办法: 打开wamp-> mysql→my.ini,在如图所示的地方添加相应的代码
- mysql查询更新时的锁表机制分析
为了给高并发情况下的mysql进行更好的优化,有必要了解一下mysql查询更新时的锁表机制. 一.概述 MySQL有三种锁的级别:页级.表级.行级.MyISAM和MEMORY存储引擎采用的是表级锁(t ...
- 刚安装完jdk和eclipse需要配置什么?
还需要配置环境变量,你还要下载 apache-tomcat WEB服务器,也就是说 系统能找到你的 服务器,具体配置:(在windows桌面上右击“我的电脑” —> “属性” —> “高级 ...
- nodejs的mysql模块学习(三)数据库连接配置选项详解
连接选项 当在创建数据连接的时候 第一种大多数人用的方法 let mysql = require('mysql'); let connection = mysql.createConnection({ ...
- Android(java)学习笔记99:android的短信发送器研究
1.第一种可以调用系统内部的短信程序. 之前我曾经出现过一个bug就是报错: android.content.ActivityNotFoundException: No Activity found ...
- iOS之原生地图与高德地图
原生地图 1.什么是LBS LBS: 基于位置的服务 Location Based Service 实际应用:大众点评,陌陌,微信,美团等需要用到地图或定位的App 2.定位方式 1.GPS定位 2. ...