package Learn.com.seven;
/**
*
* @author tqw
* 本例主要学习内部类的使用
* Java的内部类分成两部分来讲:
* 1:内部类
* 2:静态内部类
*
*/
public class ParcellA {//外部类 private int pMember;//声明一个私有成员
private static int pstMember;//声明一个私有静态成员
private final int pfMember=9;//常量值
private final static int pfsMember=0;//常量静态成员 /**
*
* @author tqw
* -# 普通内部类可以访问外部类的所有成员和方法,
* -# 如何在其他的类访问此内部类呢
* -# 必须使用外部类的对象来创建内部类对象
* -# ParcellA parcel = new ParcellA(); 见Entry.java
* ParcellA.Contents content = parcel.new Contents();
*/
public class Contents{//嵌套定义一个内部类
private int i = 11; public int value(){//给内部类,定义的一个方法
System.out.println(pMember);//所有成员
System.out.println(pstMember);
System.out.println(pfMember);
System.out.println(pfsMember);
outClassMethod();//可以访问外部类的普通方法
outClassStaticMehtod();//及静态方法
return i;
}
/**
* @see 但是若Contesnts是静态的,则可以声明静态成员和静态方法
*/
// private static int j=0;//非静态内部类,不能声明[静态成员]
// private static int out(){//非静态内部类,不能声明[静态方法]
// } }
/**
*
* @author tqw
* - 定义一个嵌套内部类
* -# 不能访问外部内的【非静态成员】,只能访问外部类的【静态成员】。同理也不能访问外部类的非静态方法
* -#
*/
public static class InnerStaticClass{
private static int memberOfStatic;//可以定义静态成员
private static int Out(){//可以定义静态方法
//outClassMethod();//不能访问外部类的非静态方法
//System.out.println(pMember);//由于ParcellA,是静态内部类,所以不能访问外部内的非静态成员
//因为静态类,是在加载类时,就初始化了。而非静态成员,是在创建对象时才初始化,分配内存
//因此,在静态类初始化时访问外部类的非静态成员时,非静态成员还不存在,所以不能访问
System.out.println(pstMember);//可以访问静态成员
System.out.println(pfsMember);//可以访问常量成员.由于final int是不可变的成员,即在程序运行中它的值不可以修改。因此
//final成员的值,就可以在加载类时就确定下来。所以在静态内部类访问它时,它是已知的,所以就
//可以访问
System.out.println(pfsMember);//同上原因,所以可以访问
outClassStaticMehtod();//可以访问静态方法
return memberOfStatic;
} public void Myout(){
Out();
}
}
/**
*
* @author tqw
*
*/
class Destination{//定义另一个内部类,注意默认访问权限为包访问权限,不能在另一个包访问
private String label;
Destination(String WhereTo){//内部类的构造方法
label =WhereTo;
}
String ReadLabel(){//给内部类,定义的一个方法
return label;
}
} public void outClassMethod(){
System.out.println("outClass Non_Static Method");
}
public static void outClassStaticMehtod(){
System.out.println("outClass Static Method");
}
}
 package Learn.com.test;

 import Learn.com.seven.ParcellA;

 public class Entry {

     /**
* @param args
*/
public static void main(String[] args) {
ParcellA parcel = new ParcellA();
//由于Contests这个内部类,是public权限,所以可以访问,
//但注意必须是用外部类ParcellA的对象来parcel.new 来创建内部类的对象.
//并且声明内部类的对象时,需要使用ParcellA.Contents 这种"外部类.内部类"的方式 ParcellA.Contents content = parcel.new Contents();
content.value(); //由于Destination,是包访问权限,所以下面的访问错误
//ParcellA.Destination desten = parcel.new Destination("china"); //注意,由于InnerStaticClass是ParcellA的静态内部类,所以可以直接用它来创建对象
//对于这种用法,在android中的布局中用到,比如
//LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
//LinearLayout.LayoutParams 类就是LinearLayout中的静态内部类,可以通过android的LinearLayout.java源码查看
ParcellA.InnerStaticClass obj = new ParcellA.InnerStaticClass();
obj.Myout();//可以调用public方法 ,只能访问自己的方法,在这里不能直接访问外部类的方法,外部方法对它不可见
} }

Java内部类{[普通内部类][静态内部类]}的更多相关文章

  1. Java中的内部类(成员内部类、静态内部类、局部内部类、匿名内部类)

    Java中的内部类(成员内部类.静态内部类.局部内部类.匿名内部类) 神话丿小王子的博客主页 我们先看这样一段话:人是由大脑.肢体.器官等身体结果组成.而组成我们人体的心脏它也有自己的属性和行为(血液 ...

  2. “全栈2019”Java第七十七章:抽象内部类与抽象静态内部类详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  3. 牛客网Java刷题知识点之什么是内部类、为什么要使用内部类、内部类如何使用外部类的属性和方法、成员内部类、局部内部类、静态内部类、匿名内部类

    不多说,直接上干货! 可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二). 内部类 ...

  4. 【java基础】内部类,局部内部类,匿名内部类、静态内部类、接口中的内部类

    内部类: 1.定义在一个类中的内部类,内部类的实例化伴随着外围类所定义的方法来构造,内部类对象有外围类的隐式引用,所以内部类可以直接访问外围类的外围类的域,包括私有的,这是内部类的访问特权,所以比常规 ...

  5. Java内部类(4):静态内部类&接口内部类

    使用static修饰的内部类我们称之为静态内部类,不过我们更喜欢称之为嵌套内部类.静态内部类与非静态内部类之间存在一个最大的区别,我们知道非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向 ...

  6. java基础之 内部类

    Java中的内部类共分为四种: 静态内部类static inner class (also called nested class) 成员内部类member inner class 局部内部类loca ...

  7. java 笔记(2) —— 内部类的作用

    一.内部类简介 个人觉得内部类没多少研究价值,GUI中的事件响应算是非常典型的应用了. Java内部类其实在J2EE编程中使用较少,不过在窗口应用编程中特别常见,主要用来事件的处理.其实,做非GUI编 ...

  8. Java基础(53):内部类(转)

    java中的内部类总结 内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类 如同一个人是由大脑.肢体.器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行 ...

  9. JAVA 第二天 内部类

    package com.company; /** * Created by Administrator on 2016/8/23. */ public class Outter {//生成的字节码文件 ...

  10. Java中的 内部类(吐血总结)

    1. 内部类的作用 内部类是一个独立的实体,可以用来实现闭包:能与外部类通信:内部类与接口使得多继承更完整 2. 内部类的分类 1)普通内部类 类的实例相关,可以看成是一个实例变量.内部类的类名由 “ ...

随机推荐

  1. Python-使用Magellan进行数据匹配总结

    参考:http://www.biggorilla.org/zh-hans/walkt/ 使用Magellan进行数据匹配过程如下: 假设有两个数据源为A和B, A共有四列数据:(A_Column1,A ...

  2. 通过Navicat for MySQL远程连接的时候报错mysql 1130 的解决方法

    用Navicat连接远程MYSQL,提示如下错误,我以为是自己的防火墙问题,但是关了,依然不行. ERROR 1130: Host '192.168.1.3' is not allowed to co ...

  3. Hibernate框架中的HibernateUtil

    对于刚学习三层框架的人来说.每个配置文件和每个类.以及功能来说都非常新奇,时常就忘记了相关类的功能. 在这里建议编程就是要多加练习,才干熟能生巧. 这里说一下HibernateUtil类,在使用Hib ...

  4. B树、B-树、B+树、B*树(转)

    B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: B ...

  5. 【Excle】如何隐藏数据透视表中的错误值

    如下:数据透视表出现错误 怎么解决呢 步骤 方法① 单击数据透视表任意单元格→数据透视表工具→分析→选项→勾选"对于错误值显示"→确定 方法② 右键→数据透视表选项(同样可以修改)

  6. Android Zxing 加入闪光灯功能

    近期做了关于二维码解析的模块 选用的是google的开源projectZxing 在Zxing 加入闪光灯功能 例如以下: 在 com.xxx.xxx.Zxing.camera 包下的CameraMa ...

  7. windows小游戏之扫雷技巧

    通过单击即可挖开方块.如果挖开的是地雷,则您输掉游戏. 如果方块上出现数字,则表示在其周围的八个方块中共有多少颗地雷.

  8. fabric自动发布tomcat线上项目

    现在公司的每个tomcat项目都有测试和生产两个环境,对于经常需要上线的tomcat项目,如用手工更新就非常耗费时间和人力.现用fabric开发了一个自动发布tomcat项目的脚本,该脚本已经在公司使 ...

  9. SVN 创建仓库操作

    服务端安装完成后 1.创建一个存放仓库的文件夹(这里在home目录创建) #mkdir svnRepo #cd svnRepo/ 创建一个仓库 (写全路径) # svnadmin create /ro ...

  10. CDN与缓存的归纳理解

    缓存是什么 缓存是一个到处都存在的用空间换时间的例子.通过使用多余的空间,我们能够获取更快的速度. 我们通常意义上说的缓存主要包含两部分.第一个是用户浏览器端的缓存,第二个是服务器端为了提高访问速度而 ...