【Java要点】4. 内部类、eclipse快捷键、Object类的常见方法

转发请在文章中提供本文的链接,谢谢!
一、 内部类
1.1 内部类概述
*在java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。内部类一般来说包括这四种:①成员内部类、②局部内部类、③匿名内部类和④静态内部类。
*内部类可以直接访问外部类的成员,包括私有成员变量和私有成员方法。
*成员内部类是依附外部类而存在的,外部类要访问内部类的成员,必须创建相应的对象。
1.2 成员内部类
*成员内部类位于另一个类的内部。
*内部类可以拥有private访问权限、protected访问权限、public访问权限及包访问权限。
*创建成员内部类对象的一般形式为:外部类类名.内部类类名 xxx = 外部类对象名.new 内部类类名()

class Circle {//外部类 private double radius = 0; public Circle(double radius) { this.radius = radius; getDrawInstance().drawSahpe(); //必须先创建成员内部类的对象,再进行访问 }private Draw getDrawInstance() {//获得内部类的一个实例 return new Draw(); }class Draw {//内部类 public void drawSahpe() { System.out.println(radius); //外部类的private成员 } } }

1.3 局部内部类
*局部内部类是定义在一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于该作用域内。
*局部内部类就像是方法里面的一个局部变量,不能有public、protected、private以及static修饰符。
*局部内部类要想访问局部变量,那么这个局部变量必须用final修饰。
class People{ } class Man{ public Man(){}public People getWoman(){ class Woman extends People{//局部内部类 int age =0; } return new Woman(); } }

1.4 匿名内部类
*匿名内部类本质上就是内部类的简化写法。
*前提:使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或者实现一个接口。
*匿名内部类中是不能定义构造函数的。
*匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。
class Demo{ public static void main(String[] args) { Outer o = new Outer(); o.method(); } }interface Inter { public void show1(); public void show2(); } //匿名内部类只针对重写一个方法时候使用 class Outer { public void method() { new Inter(){ public void show1() { System.out.println("show1"); }public void show2() { System.out.println("show2"); } }.show1(); Inter i = new Inter(){ public void show1() { System.out.println("show1"); }public void show2() { System.out.println("show2"); }/*public void show3() { System.out.println("show3"); }*/ }; i.show1(); i.show2(); //i.show3(); //匿名内部类是不能向下转型的,因为没有子类类名 } }

1.5 静态内部类
*静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static。静态内部类是不需要依赖于外部类的。
*创建静态内部类对象的一般形式为:外部类类名.内部类类名 xxx = new 外部类类名.内部类类名()
class Demo1_InnerClass { public static void main(String[] args) { //外部类名.内部类名 对象名 = 外部类名.内部类对象; Outer.Inner oi = new Outer.Inner(); oi.method(); Outer.Inner2.print(); } }class Outer { static class Inner { public void method() { System.out.println("method"); } } static class Inner2 { public static void print() { System.out.println("print"); } } }

注:这里讲的比较简略,有关内部类的详细介绍请参考链接https://www.cnblogs.com/dolphin0520/p/3811445.html。
二、 Eclipse中快捷键
* A:新建 ctrl + n
* B:格式化ctrl+shift+f
* C:导入包ctrl+shift+o
* D:注释ctrl+/,ctrl+shift+/,ctrl+shift+\
* E:代码上下移动 选中代码alt+上/下箭头
* F:查看源码选中类名(F3或者Ctrl+鼠标点击)
* G:查找具体的类 ctrl + shift + t
* H:查找具体类的具体方法 ctrl + o
* I:给建议 ctrl+1,根据右边生成左边的数据类型,生成方法
* J:删除代码 ctrl + d
* K:抽取方法alt + shift + m
* L:改名alt + shift + r
*M:Alt+/ 起提示作用
*N:alt + shift + s 自动生成指定方法
三、Object类
3.1 Object类概述
*Object类是类层次结构的根类,所有类都直接或者间接的继承自该类。
3.2 Object类的hashCode()方法
* 声明方法:public int hashCode();
* 该方法返回该对象的哈希码值。默认情况下,该方法会根据对象的地址来计算
* 不同对象的hashCode()一般来说不会相同。但是,同一个对象的hashCode()值肯定相同。
3.3 Object类的getClass()方法
*声明方法:public final Class getClass();
*返回此 Object 的运行时类Class。
*可以通过Class类中的一个方法public String getName(),获取对象的真实类的全名称。
3.4 Object类的toString()方法
*声明方法:public String toString()
*该方法返回该对象的字符串表示,调用System.out.println方法对该对象进行打印时,会默认调用该方法。
* 如果不重写该方法的话,其默认的值等于:
getClass().getName() + "@" + Integer.toHexString(hashCode())
* 一般建议重写该方法。
3.5 Object类的equals()方法
*指示其他某个对象是否与此对象“相等”。
*默认情况下比较的是对象的引用是否相同。
*一般建议重写该方法。
*与==的区别:==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值;
【【Java要点】4. 内部类、eclipse快捷键、Object类的常见方法】equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法一般比较的是对象中的属性。

    推荐阅读