一、接口:是对类的一组需求的描述。接口中所有的方法自动地属于public,所以不用提供关键字public。在接口中还可以定义常量,但是接口绝对不能含有实例域,也不能在接口中实现方法。类实现接口用implements关键字,实现接口要实现接口的所有方法,并且方法必须声明为public。
Arrays里的静态方法sort(Object[] o)要求数组中的元素必须属于实现了Comparable接口的类(实现该接口的int CompareTo(T other)方法)。
1、接口的特性:不能使用new运算符实例化一个接口,但是可以声明一个接口的变量引用一个实现了该接口的类的对象。可以使用instanceof来检查某个对象是否实现了某个接口。接口中的域将被自动设为public static final。JAVA每个类只能够拥有一个超类,但却可以实现多个接口,实现的各个接口用逗号隔开。
二、对象克隆:先掌握protected这个访问权限:相同包里的类可以互相访问protected方法,子类可以访问超类的protected方法,但是超类并不能访问子类的protected方法,就算是子类覆盖了超类的方法。子类都继承父类的protected方法,并且也是protected的,如果子类不在一个包下,也不能互相访问这个继承于超类的方法,也就是说子类继承的超类的protected的方法不具有包的访问权限,要访问的话除非又让另一个类去继承他。(不是所有的子类都可以看做是一个超类吗?但是这里一定要注意,他们继承超类的protected方法不能互相访问,除非他们和超类在一个包下)
浅克隆:就是对对象里面的其他对象的引用做拷贝,而引用指向的是同一对象,这样的克隆,只有本类对象才能克隆本类对象,调用的是Object的克隆方法。
深克隆:让类继承标记接口Cloneable,并使用public修饰符重新定义clone方法,并调用超类的super.clone(),必继续克隆对象里的实例域(那么该实例域的类也应该继承Cloneable接口,如果没有那么会抛出一异常个ClonenotSupportedException),这样克隆的是值,而不是引用。
三、接口与回调:一般是定义一个接口,其他类的方法接受这个接口,并去调用这个接口的实现类里面的方法。
四、内部类:
1、使用内部类的主要原因:内部类可以访问类定义所在的作用域中的数据,包括私有数据;内部类可以对同一个包中的其他类隐藏起来;可以使用匿名的内部类可以让代码简洁。
2、普通内部类的特性:内部类的对象总有一个隐式引用,它指向了创建它的外部类对象。实际上是编译器修改了内部类的构造器,为内部类添加了一个外围类的引用。内部类可以为私有的,这样只有它的外围类才能产生这个内部类的对象。如果是一个公用的内部类,那么可以先new一个外围类的对象,然后用这个外围的对象去new一个内部类的对象,语法是OuterClassInstance.new InnerClass(),示例:
class Outer{
private String str="PRIVATE";
public class Inner{
public void callOuter(){
System.out.println(Outer.this.str);
}
}
}
public class Test{
public static void main(String[] args){
Outer outer=new Outer();
Outer.Inner inner=outer.new Inner();
inner.callOuter();
}
}
需要注意的是:内部是一种编译器现象,而与虚拟机无关的。内部类可以访问外围类的私有数据。内部类怎么去调用外围类的私有变量:其实是编译器编译时就给外围类添加了一个静态的方法,而内部类去调用这个方法。
javap -private||public ClassName 可以反射编译后的类。
3、局部内部类:不能用public说明符进行说明。在局部方法里的内部类,在外围内的其他方法里无法访问,但是这个内部类不仅可以访问外围类变量,还可以访问局部变量,不过为了维护数据的同一,要被访问的局部变量必须声明为final。(可以用一个对象的引用作为final,这样引用的对象里的值可以变,只是不可以让他去引用其他对象,比如可以用数组变量声明为final).
4、匿名内部类:假如只创建这个类的一个对象,就不必命名了,这个叫匿名的内部类。由于匿名类没有类名,所以匿名类不能有构造器,取而代之的是会将参数传递给超类构造器。
5、静态内部类:如果使用内部类只是为了把一个类隐藏在另一个类的内部,并不需要内部类引用外围类对象,此时可以将内部类声明为静态的,可以取消产生的对外围类的引用。静态的内部类可以在其他类中访问,要加上外围类名修饰:OuterClassName.InnerclassName innerclass=new OuterClassName.InnerclassName();
五、代理:利用代理可以在运行时创建一个实现了一组给定接口的新类,这样不用实现接口而用代理类去调用方法。代理需要掌握的类主要是:Proxy和InvocationHandler.所有代理类都覆盖了Object中的:tostring,equals,hashcode,这些方法也是调用invoke,Object中的其他方法没有被覆盖。
代理示例:
import java.lang.reflect.*;
public class MyProxy {
public static void main(String []args){
Myinterface o=(Myinterface)Proxy.newProxyInstance
(Thread.currentThread().getContextClassLoader(),
new Class[]{Myinterface.class},
new MyInvocationHandle("ss"));
System.out.println(o.myMethod("xx"));
}
}
class MyInvocationHandle implements InvocationHandler{
private String s;
public MyInvocationHandle(String s){
this.s=s;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("代理成功");
System.out.println(method.getName());
return args[0].toString();
}
}
interface Myinterface{
String myMethod(String s);
}
分享到:
相关推荐
【Java面向对象技术总结】 在Java编程中,面向对象(Object-Oriented Programming,OOP)是核心的设计原则。它包括三大特征:封装、继承和多态。封装是指将数据和操作这些数据的方法捆绑在一起,形成一个独立的实体...
在Java面试中,尤其是针对杭州阿里云的中级Java工程师岗位,深入理解和熟练应用Java核心技术是至关重要的。这个压缩包文件“java面试——杭州-阿里云-Java中级.zip”包含了一份详细的PDF文档,它可能涵盖了面试中常...
理解类、对象、接口的概念,以及异常处理、集合框架(如ArrayList、LinkedList、HashMap等)的使用是必备的基础知识。 2. **多线程**:Java提供了强大的多线程支持,包括Thread类和Runnable接口。了解线程同步机制...
- **4.4 内部类与匿名内部类**:介绍内部类的概念及其特殊类型——匿名内部类。 - **4.5 泛型与枚举**:讲解泛型和枚举的使用方法及其优缺点。 - **第5章:高级主题** - **5.1 并发编程**:讨论Java中的并发编程...
本教程主要围绕Java的基础知识和实际应用展开,旨在帮助初学者掌握Java编程的核心概念和技术要点,并通过丰富的实例加深理解。以下是对该教程各部分知识点的详细说明。 ### 1. Java入门与环境配置 - **什么是Java**...
根据提供的文档信息,我们可以归纳出该文档主要涵盖了Java软件开发的基础知识及项目实战案例,特别是针对网络五子棋和网络版JQ(类似QQ的聊天工具)的开发过程进行了详细介绍。接下来,我们将从文档的标题、描述以及...
4. **类与对象**:Java是面向对象的语言,所以理解和创建类与对象是核心内容。你会学习如何定义类、创建对象,以及如何使用继承、封装和多态等面向对象特性。 5. **字符串处理**:Java中的`String`类是不可变的,...
- **面向对象与面向接口**:理解封装、继承和多态的核心概念,掌握类的设计原则。了解this关键字、final和static的用途,理解对象实例化过程,以及如何处理方法的重写和重载。 - **JVM内存模型**:学习Java虚拟机...
为了在激烈的求职竞争中脱颖而出,掌握Java的核心概念和技术是至关重要的。这份"Java面试题以及答案收集"涵盖了13个部分,旨在帮助Java开发者准备面试,增强对Java的理解。 1. **Java基础** - **数据类型**:Java...
5. **类与对象的高级特性**:包括内部类、匿名类、反射机制、动态代理、枚举类型以及注解。 6. **输入/输出流**:讲解Java I/O系统,包括字节流、字符流、对象序列化,以及文件操作和缓冲流的使用。 7. **多线程...
2. **面向对象**:理解OOP(面向对象编程)的核心原则——封装、继承、多态和抽象,以及如何在Java中实现这些概念。此外,接口、内部类、匿名类和访问修饰符也是常见考点。 3. **异常处理**:了解try-catch-finally...
### CoreJava核心知识点详解 #### 一、Java的特点与运行原理 **1.1 Java特点** - **简单性**:Java的设计目标之一是使语言尽可能简单直观。 - **面向对象**:Java是一种纯面向对象的语言,支持封装、继承、多态等...
理解类的构造器、访问修饰符、抽象类和接口、内部类以及对象的生命周期是关键。 3. **异常处理**:Java中的try-catch-finally语句块用于处理运行时错误。理解异常类型,如IOException、NullPointerException等,并...
本书作为《Java工程师成神之路》系列的第一部分,涵盖了从基础到进阶的多个主题,包括但不限于面向对象编程、Java语言基础、异常处理、集合类、I/O流、反射、枚举类型、泛型、动态代理、序列化、注解、单元测试、API...
此外,JVM也是许多开源工具和技术的基础,如动态代理、AOP(面向切面编程)、JIT(即时编译器)和各种性能分析工具。学习JVM的内部运作还能帮助开发者更好地利用这些工具,提高开发效率和代码质量。 对于初学者,...
1. **基础语法**:Java的基础知识是面试的必考项,包括数据类型、变量、运算符、流程控制(如if、switch、for、while)、类与对象、封装、继承、多态等概念。 2. **面向对象**:理解面向对象编程的基本原则,如抽象...
### Java基础知识点详解 #### Arrays.sort实现原理与Collection实现原理 - **Arrays.sort**:`Arrays.sort()` 方法内部实现依赖于具体的JDK版本。在Java 7及之前版本,对于基本类型,它采用的是快速排序算法;对于...
【Java——白皮书】 Java,作为一种广泛使用的高级编程语言,由Sun Microsystems(后被Oracle收购)于1995年推出,其设计目标是“简单、面向对象、健壮、安全、平台独立”。白皮书是技术领域的权威文档,通常会详细...
以上只是Java面试中可能涉及的一部分核心知识点,实际面试时,面试官可能会根据应聘者的经验和项目经历提出更具针对性的问题。在准备面试时,除了理论知识,实践经验的分享和问题解决能力的展示同样重要。不断实践、...
1. **基础语法**:这是所有Java面试的基础,包括变量、数据类型、运算符、流程控制(if、switch、for、while)、方法、类与对象、封装、继承和多态等。 2. **面向对象**:深入理解面向对象的三大特性——封装、继承...