Java Class10
内部类
首先整理类下的几大成员
属性:
方法:
构造器:
初始化块:
内部类:
public class A {
private int age;//属性
public void method(int age){
//方法
this.age=age;
}
public A(){
//构造器
System.out.println(age+10);
}
{
System.out.println(age+100);//初始化块
}
class A1{
//内部类
}
}
匿名内部类
匿名内部类就是没名内部类,就是说他行使了内部类的功能,但是没有名字来命名。
public class B {
public static void main(String[] args) {
new IA(){
//匿名内部类
@Override
public void go() {
}
};
}
}
interface IA{
public void go();
}
比如我想在B中实现IA下的go方法,但是接口下的方法不能直接调用需要实例化,而且现在我们没有继承关系不能直接实现方法,所以用匿名内部类的方法就是最简单方便的。
public class B {
public static void main(String[] args) {
new B().plan(new IA() {
@Override
public void go() {
System.out.println("2");
}
@Override
public void to() {
System.out.println("1");
}
},"北京").to();
}
IA plan(IA ia,String name){
ia.go();
return new IA(){
@Override
public void go() {
System.out.println("3");
}
@Override
public void to() {
System.out.println("4");
}
};
}
}
interface IA{
void go();
void to();
}
输出2,4
equals
一般我们会把=,==,equals方法进行比较
=
意为赋值,把等号右边的内容赋给左边
在基本类型时,是将值赋给左边
在引用类型时,是将地址赋给左边
==
相等,判断等号两边是否相等
在基本类型时,比较值是否相等
在引用类型时,比较地址是否相等
equals()
用于比较两个引用类型的值是否相等
具体解释请看=,==和equals用法与区别
equals和hashCode也经常一起讨论
他们共同用来标识对象,两个方法协同工作用来判断两个对象是否相等
具体请看:重写equals为什么要重写hashcode
String,StringBuffer,StringBuilder
String就是字符串对象
String s1="abc";
String s2="a"+"b"+"c";
在这s2生成字符串的过程与s1并不一样,s2是引号一次就开一次堆,每次开堆过程会占用内存并影响运算速度
而StringBuffer和StringBuilder就是可以一次开辟多个空间,避免多次开堆影响效率的问题
public class C {
public static void main(String[] args) {
String s="OK";//定义字符串s
s="OK1";//修改字符串的值
String s2="OK";//定义字符串s2
String s3="我"+"很"+"帅"+"!";//定义字符串s3
StringBuffer sb=new StringBuffer("我");//实例化StringBuffer对象
sb.append("很");//向StringBuffer中添加元素
sb.append("帅1234567891234567");//向StringBuffer中继续添加元素
System.out.println(sb.capacity());//打印此时StringBuffer的空间
}
}
包装类型
public class Demo {
Integer i=1;//自动装箱
int j=i;//自动拆箱
}