内部类 工具类

内部类 
	指的是在Java中可以将一个类定义在另一个类的内部
	内部类可以定义在 1.类的内部(与类成员层次一致)
					 2.方法/块内部(与类成员相差一个层次 方法的局部变量一个层次)
			
	*1.成员内部类
		 将一个类直接定义在类的里面 作为成员 与属性和方法层次一致
		 成员内部类和正常类一样 使用不同的修饰符来修饰
		 好处:1.省略了一个.java文件
			   2.成员内部类中可以访问外部类的所有成员 包括私有的元素
		 内部类存在后 源代码进行编译 产生一个字节码Demo$InnerDemo.class	   
	2.局部内部类
		 将一个类定义在方法/块里面 作为成员的内部结构 与临时的局部变量一个层次
		 局部内部类像是一个局部的变量一样 不嗯呢该用public protected private及static
		 只能用abstract或final
		 局部内命名规则Demo$1InnerTestMethod Demo$2InnerTestMethod
		 局部内部类 编译 字节码定义已经好了 由于变量的内容可以改变 
		 局部内部类使用只能是final修饰
	*3.匿名内部类
		 成员匿名内部类
		 局部匿名内部类
		 
		 public interface Test{
			public void test();
		 }	
		 Test t = new Test(){
			public void test(){
			}
		 }
		 通常接口或抽象类的具体子类这样写
		 开放中为了省略一个类文件 上述的写法比较常见 
		 匿名内部类很特殊 只有类体 没有类的所有结构 (修饰符 名字 继承 实现)
		 不能用任何修饰符来修饰 匿名内部类也没有构造方法
	4.静态内部类
		 成员静态内部类
		 不需要外部类对象  通过正常的方式直接创建内部类
		 静态元素不能访问非静态成员(自己类和外部类)
			
	1.枚举(类)
		可以将某些类中的对象一一列列举出来  类中的对象具有有限的个数
		1.通过enum来描述枚举  class interf enum
		2.可以在枚举类中直接列举对象 public enum Day{monday,tuesday}		
		3.通过枚举类直接访问属性名(枚举对象)	
		4.通过枚举对对象调用 发现很多方法
				每一个直接定义的enum枚举类型 都默认继承java.lang.Enum 
				name枚举对象名字 ordinal顺序(在枚举类中的索引)
				name() ordinal()获取相关属性信息的方法
				value
		5.可以在enum中定义自己的一般属性 一般方法
			必须在枚举类描述的第一行  列举枚举对象的样子 分号结尾
			添加自己定义的私有属性
			提供私有的构造方法(带参数) 我们自己是不能调用构造方法的
		6.自己定义的enum不能再继承别的类(单继承)
			实现多个接口  添加具体的方法
		7.可以使用在switch语句中	
	2.内存的管理问题
		栈内存-----变量空间 方法临时执行空间  从创建开始执行 完毕即回收
		堆内存-----我们自己new申请对象空间
		方法区-----常量  类模板 静态成员 有且只有一个 不回收
			
			
			
包装类(封装类)			1.5版本后 自动拆装包
	byte---Byte  short---Short int---Integer	long-Long
	float---Float  double---Double clar---Character  boolean---Boolean
	1.八个包装类都在同一个包下 java.lang包 不需要import导包直接使用 	
	2.八个包装类中有六个是和数字有关的		 都默认继承父类Number
	3.八个包装类都实现Serializable,Comparable
	4.八个包装类都有自己对应类型参数的构造方法
	 八个包装类中有七个(除了Character)还有构造方法重载 带String类型
	5.创建对象 对象调用属性/方法
				有六个与数字相关的类都继承Number  xxxValue(); 讲一个包装类类型转化为对应的基本类型(拆包)
	
1.==与equals()区别
==可以比较基本数据类型 也可以比较引用数据类型(变量中储存的类型)
如果比较基本类型比较的是变量中存储的值
如果比较引用类型比较的是变量中存储的地址引用
equals()是Object类中继承过来的方法 每一个引用类型都可以调用
默认继承equals();是Object继承过来的方法  每一个引用类型都可以滴啊哦哟请
由于Integer类就重写了equals()索引Integer比较的是数值
2.考察Integer类加载的时候 自己有一个静态的空间
空间内立即记载Integer类型的数组 内存储256个Interger对象   -128~127
如果我们用的对象范围在这之间Integer i1 = 10; 直接去静态区找对应的对象
如果我们用的对象范围超过了Integer  Integer i1 = 1000; 会帮我们创建一个新的Interger对象
posted @ 2021-02-16 11:09  JAVA初当力  阅读(44)  评论(0编辑  收藏  举报