目录
1.外部类与内部类
1.成员内部类
一个类里边定义另外一个类,里边的类就叫内部类,外边的就叫外部类
内部类可以访问外部类的成员,即使是私有的。但是要想创建内部类之前就必须先创建外部类。
public class Outer { private int id = 10; void show(){ System.out.println("我是外部类"); } class Inner{ private String name = "zhangsan"; void show(){ System.out.println(id); System.out.println("我是内部类"); } } }
测试
public class Demo01 { public static void main(String[] args) { Outer outer = new Outer(); outer.show(); Outer.Inner inner = outer.new Inner(); inner.show(); } }
2.静态内部类
他和外部类是一个等级,外部类可以用静态内部类的东西,而静态内部类调用外部类的东西需要创建外部类的对象
注意:只有内部类才能用static修饰
3.局部内部类
定义在外部类的方法里,只在方法内有效,可以直接访问外部类的属性。
局部内部类访问所属方法的属性值都是加了final修饰的常量
4.匿名内部类
没有类名的局部内部类,一切特征与局部内部类相同
必须继承一个父类或是实现一个接口
2.整数缓冲区
-128--127之间是一个整数的缓冲区,如有Integer数字在这里边就直接在缓冲区取(前提是你没有用new创建,而是直接定义实现自动装修的),若不在之间就会重新new一个对象来创建,所以上述图片代码结果为FTF
3.String
概述
代码:
描述:
-
字符串第一种创建方式,栈中有一个name保存一个地址指向方法区中字符串池中的具体值hello
-
先去寻找字符串池有没有zhangsan这个值,没有就创建这个值,并将他的地址值赋给name。所以是改的name的地址,地址指向的地方才是新赋的值
-
创建name2后去寻找字符串池有没有这个值,有就直接将地址赋值给name2
-
字符串的的第二中创建方式,会产生两个对象(推和字符串常量池中),new就会在堆中有一个对象(第一个对象),堆中对象指向字符串常量池中的java对象(第二个对象),而str则存储堆中对象的地址值
-
str2也会在堆中创建一个对象,虽然str与str2在堆中的对象都指向字符串常量池中的同一个对象,但是他们只是内容相同,而自己本身存的是地址却不相同,所以字符串比较内容用equals,==是比较地址值
内存图:
常用方法
-
split:按条件拆分字符串,返回拆分后的一个字符串数组
split("[ ,]+")表示的条件是以空格或逗号进行拆分,+表示可以按多个空格或多个逗号拆
4.StringBuffer与StringBuild
-
StringBuffer:可变长字符串,线程安全,运行效率慢(相对于StringBuild)
-
StringBuild:可变长字符串,线程不安全,运行效率快
一些方法(StringBuffer/StringBuild通用):
BigDecimal
SimpleDateFormat
System