类内部可以有另一个类,也就是内部类,如果带static则为静态内部类
静态内部类当然不能直接访问实例变量
内部类修饰符可以有四种,而外部类只有两种
 
内部类的意义:
这个内部类只适用于这个外部类
因为外部类的某些字段是private的,这个内部类要想访问除非是他的成员
生成的class文件也会在一起的,便于整理
 
内部类作为类的成员,当然也要有外部类的对象才能访问
静态内部类的使用,相当于包名

OuterClass.StaticNestedClass nestedObject =
new OuterClass.StaticNestedClass();

非静态的内部类要动态生成:

OuterClass.InnerClass innerObject = new OuterClass().new InnerClass();

 
内部类的字段如果覆盖了外部类的 非static字段,要全名访问
OuterObject.this.x
 
内部类有两种特殊形式,一是在块中,局部内部类
局部内部类只能访问所在块中的final变量(跟一般内部类的区别)
JDK8以后,如果这个局部变量初始化后就没变过,可以不声明为final
只有方法自己才能访问自己的参数,局部类不可以
JDK8以后,局部类也可以访问所在方法的参数了
 
静态方法的局部内部类当然只能访问外部类的静态字段
 
局部内部类不能有static成员,除非是常量
接口都是显式static的,所以不可能出现在块中,包括局部内部类里
 
 
跟局部内部类不同,另一种,匿名内部类只是一个表达式,可以出现在表达式能出现的任何地方
new,父类名称或接口名称,构造(),类体{}

HelloWorld frenchGreeting = new HelloWorld() {
String name = "tout le monde";
public void greet() {
greetSomeone("tout le monde");
}
public void greetSomeone(String someone) {
name = someone;
System.out.println("Salut " + name);
}
};

这个类体里面定义的是一个子类或者实现类,会有覆盖或实现的方法
 
匿名内部类也是外部类的成员,访问规则同一般内部类或局部内部类
另外匿名内部类是没有构造的
 
局部内部类通常用来定义一个内部类型
匿名内部类通常用来实现接口,且多用于界面编程
 

Lambda 表达式(略)
Enum(枚举)

public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,//不加引号
THURSDAY, FRIDAY, SATURDAY //后面没东西的话可以不加分号
}

 枚举是一个类,可以有字段和方法的定义,且自带一些方法,如values()

for (Day d : Day.values()) {

 枚举都是显式继承java.lang.Enum,所以不能继承其他了
构造或者是默认,或者是private,且不能手动调用

Classes and Objects :类和对象(2)的更多相关文章

  1. Classes and Objects :类和对象(1)

    类的定义:修饰符,class,类名,extends,逗号分隔的implements,类体{}规范的类名:首字母要大写,以后每个单词首字母都大写字段的定义:修饰符,类型,字段名按照封装的思想,字段通常定 ...

  2. DELPHI学习---类和对象(五篇)

    Classes and objects(类和对象) 类(或者类类型)定义了一个结构,它包括字段(也称为域).方法和属性:类的实例叫做对象:类的字段.方法和属性被称为它的部件(components)或成 ...

  3. 知乎上看到的关于类.class,对象.getClass

    public class TestDemo { //测试 @Test public void fun01() { TestDemo q=new TestDemo(); A a = new A(); q ...

  4. 危险代码:如何使用Unsafe操作内存中的Java类和对象

    危险代码:如何使用Unsafe操作内存中的Java类和对象—Part1 危险代码:如何使用Unsafe操作内存中的Java类和对象—Part2 危险代码:如何使用Unsafe操作内存中的Java类和对 ...

  5. Reloading Java Classes 101: Objects, Classes and ClassLoaders Translation

    The original link: http://zeroturnaround.com/rebellabs/reloading-objects-classes-classloaders/ A Bir ...

  6. Classes as objects

    Before understanding metaclasses, you need to master classes in Python. And Python has a very peculi ...

  7. 13_Python的面向对象编程-类class,对象object,实例instance

    1.面向对象概述 1.类是用来描述对象的工具,把拥有相同属性和行为的对象分为一组     2.对象是由类实例化出来的一个具体的对象         属性: 对象拥有的名词,用变量表示         ...

  8. Objective-C Runtime 运行时之一:类与对象

    Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一 ...

  9. day24:面向对象设计与面向对象编程、类和对象

    一.三大编程范式: 面向过程: 面向函数: 面向对象: 二.程序的进化论: 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 2.从上述的指令中提取重复的代码块或逻辑,组织到一起(比方说,你定 ...

随机推荐

  1. 一步一步开发sniffer(Winpcap+MFC)(一)工欲善其事,必先配环境——配置winpcap开发环境(图文并茂,非常清楚)

    http://blog.csdn.net/litingli/article/details/5950962

  2. HDU5088——Revenge of Nim II(高斯消元&矩阵的秩)(BestCoder Round #16)

    Revenge of Nim II Problem DescriptionNim is a mathematical game of strategy in which two players tak ...

  3. Linux下安装、配置、启动Apache

    http://www.cnblogs.com/zhuque/archive/2012/11/03/2763352.html#

  4. shell编程基础(3)条件判断语句

    1,带参数的shellscript #this is program build 5.11 to test shell script ############ cxz ####### 5.11 ### ...

  5. C++异常以及异常与析构函数

    1. 抛出异常 1.1 抛出异常(也称为抛弃异常)即检测是否产生异常,在C++中,其采用throw语句来实现,如果检测到产生异常,则抛出异常. 该语句的格式为: throw 表达式; 如果在try语句 ...

  6. MySQL学习笔记一

    MySQL 学习笔记 一 一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系 ...

  7. BCB遍历所有窗体的组件

    for(iFormIdx=0; iFormIdx<Screen->FormCount; iFormIdx++) { TForm *pForm = Screen->Forms[iFor ...

  8. JAVA中获取工程路径的方法

    在jsp和class文件中调用的相对路径不同.在jsp里,根目录是WebRoot 在class文件中,根目录是WebRoot/WEB-INF/classes 当然你也可以用System.getProp ...

  9. 为PHP增加PDO-Mysql驱动

    一.问题 公司有一台老的Linux服务器,Apache+MySQL+Php结构的, 要把最近做的一个PHP项目部署到上面,做为测试环境, 由于新项目是用PHP的YII框架开发的,而YII框架的数据访问 ...

  10. vs2010 js代码折叠

    方法一:插件   在Visaul Studio 2010中写js或css代码,缺少像写C#代码时的那种折叠功能,当代码比较多时,就很不方便. 但是已经有VS2010扩展支持这个功能,它就是--JSEn ...