【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()方法

*指示其他某个对象是否与此对象“相等”。

*默认情况下比较的是对象的引用是否相同。

*一般建议重写该方法。

*与==的区别:==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值;

equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法一般比较的是对象中的属性。

猜你喜欢

转载自blog.csdn.net/gsafjhbfqwergerkbvgk/article/details/81605973