1. 抽象类与接口
抽象类:
l 不能创建基类对象,只能向上转型(Upcasting)
l 基类只提供未实现的接口函数,继承基类的类,必须全部实现基类中的函数,否则该类也会变成抽象类
l 抽象方法只能在抽象类中
接口:
l 禁止任何函数定义
l 实现接口与代码完美分割
l 实现多继承
2. equals()方法:默认行为是对引用进行比较。但大多数java类库,实现对equals()的重写,实现对对象内容比较
4. this
i. 调用本类的另一个构造函数,必须放在第一句,且只能放一个
Constructor call must be the first statement in a constructor
public Flower(int petals, String ss) {
this(petals);
this(s);
}
ii. 表当前对象,普通方法的形参名与类属性名一样,this指示当前对象。
5. 数组
int[] a1 = {1, 2, 3, 4, 5};
int[] a2 = new int[]{1, 2, 3, 4, 5};
int[] a3 = new int[5];
数组深拷贝:
publicstaticvoid main(String[] args) {
int[] a = {1, 2, 3, 4, 5};
int[] a1 = a.clone();
print(a1);
int[] a2 = newint[a.length];
System.arraycopy(a, 0, a2, 0, a.length);
print(a2);
int[] a3 = Arrays.copyOf(a, a.length);
print(a3);
int[] a4 = Arrays.copyOfRange(a, 0, a.length);
print(a4);
}
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
6. final
1). final data: 编译时不变,运行时不变
blank final, it must be initialized in every constructor
2). final parameter: 与final data一样,方法内部,不能改变参数引用指向的对象
3). final method: 防止子类override;efficiency, 允许编译器转换调用为inline call
4). final class: 拒绝inherited
7. static: static is modifier
1). static import (static import …)
Single-static-import declaration: import static TypeName.Identifier
2). static initializer (static {})
只在类初始化时执行一次(这里的初始化,一是指的是new Instance,二指的是调用main方法)
publicclass StaticBlock {
privatestaticfinal String s = "hello";
static {
System.out.println("static block is running");
}
publicstaticvoid main(String[] args) {
System.out.println(StaticBlock.s);
new MyStatic();
System.out.println(MyStatic.ss);
}
}
class MyStatic {
publicstaticfinal String ss = "hello world";
static {
System.out.println("my static block is running");
}
}
3). static field (static type field)
Static field: class variable。静态变量在内存中只有一个拷贝(节约内存)。JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问,也可通过对象来访问。
Non-static fields: instance variable
4). static method (static type method())
Same as above
静态方法可以直接通过类名调用,任何实例也可以调用,因此静态方法中不能使用this和super关键字,不能直接访问所属类的实例变量和实例方法(即未被static修饰的属性和方法)
因为静态方法独立于任何实例,因此静态方法必须被实现,不能是抽象的abstract
5). static member type (member class & member interface)
JVM实现static机制:类变量作为类型信息的一部分存储在方法区(jvm放置类定义的内存结构)。JVM在使用类之前,必须在方法区中为这些类变量分配空间。类变量时所有类实例共享的,及时没有任何类实例,它也可以被访问。这些变量只与类有关。
被static修饰的属性和方法独立于该类的任何对象。它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,JVM就能根据雷鸣在运行时数据区的方法区找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。
8. 多态(Polymorphism)
多态性
多态性是指发出同样的消息(指对类成员函数的调用)被不同类型的对象接收时导致完全不同的行为。
多态的实现:
函数重载 静态:编译时的多态
运算符重载 静态:编译时的多态
虚函数 动态:运行时的多态
1). 方法调用的绑定:将一个方法调用同一个方法主体连接到一起就称为”绑定”(Binding)
早期绑定:在程序运行前执行绑定,由编译器和链接程序完成。Java final方法使用该类型绑定。
后期(动态)绑定:绑定在运行时进行,以对象的类型为基础。Java中除了final方法外的所有方法均使用后期绑定
2). 抽象类和方法
抽象方法:只有一个声明,没有方法主体。abstract void f();
抽象类:包含一个或多个抽象方法的类,必须指定为抽象类。即使不包含任何abstract方法,亦可将一个类声明为抽象类,但该类无法被实例化(new)。
9. 设计构造函数的规则:
用尽可能简单的方法是对象进入就绪状态;如果可能,避免调用任何方法。在构造函数内唯一能安全调用的是在基类中具有final熟悉的那些方法,也适用于private方法,它们自动具有final属性。
10. 接口(Interface)
1). 纯抽象类
2). 只有方法名、参数列表及返回类型,无方法主体。
3). 接口中原始数据类型的数据成员(即类属性),默认为static和final
4). 接口中的方法声明明确定义为”public”,即使不明确定义,它们也会默认为public。
11. 匿名类(Anonymous Inner Class)
没有名字的内部类,不能继承其他类,但一个内部类可作为一个接口,由另一个内部类实现
1) 匿名内部类没有名字,所以它没有构造函数。因为它没有构造函数,所以它必须完成借用父类的构造函数来实例化,换言之,匿名内部类完全把创建对象的任务交给了父类去完成。
2) 在匿名内部类里创建新的方法没有太大意义,但它可以通过覆盖父类的方法达到神奇效果。
3) 因为匿名内部类没有名字,所以无法进行向下的强制类型转换,持有对一个匿名内部类对象的引用的变量类型一定时它的直接或间接父类类型
使用匿名内部类要注意的原则:
1) 不能有构造方法
2) 不能定义任何静态成员,方法和类
3) 不能是public, protected, private, static
4) 只能创建匿名内部类
5) 一个匿名内部类一定在new的后面,用其隐含实现一个接口或实现一个类
6) 因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效
7) 内部类只能访问外部类的静态变量或静态方法
12. 静态内部类(Static Nested Class)
不需要内部类对象与其外围类对象之间有联系,可以将该内部类声明为static
1) 嵌套类的对象,并不需要其他外围类的对象
2) 不能从嵌套类的对象中访问非静态的外围类对象
相关推荐
2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip...
本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...
《Friends学习笔记全集上》是一份非常珍贵的资源,专为那些希望通过观看经典美剧《Friends》(老友记)来提升英语水平的学习者所准备。这份笔记集合了第一部分的内容,涵盖了每一集的详细解读,包括剧本、字幕翻译...
Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Spring...
PHP个人学习笔记
CCNA学习笔记 CCNA学习笔记 CCNA学习笔记
希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf
Go 学习笔记 第四版 雨痕 ⼆二〇⼀一四年末 下载:不定期更新,https://github.com/qyuhen/book。 联系:qyuhen@hotmail.com 2012-01-11 开始学习 Go。 2012-01-15 第⼀一版,基于 R60。 2012-03-29 升级到 1.0。 ...
本文是一篇关于Redis全套学习笔记的文章,主要介绍了Redis的基础知识、数据结构、持久化、集群、高可用、性能优化等方面的内容。通过本文的学习,读者可以全面掌握Redis的使用和应用,提高自己的技术水平和实践能力...
《Linux学习笔记》这份资料非常全面且详细,从 Linux 常用命令到 Linux 常用操作,再到网络管理、性能优化,几乎覆盖了 Linux 基础学习的方方面面,非常适合初学者入门!这里只是对于常用命令进行了整理,希望可以...
Learning hard C# 学习笔记
springcloudalibaba学习笔记
《PFC2D学习笔记全集》是一份深入探讨PFC2D软件应用的资源集合,涵盖了该软件的多个核心方面。PFC2D(Particle Flow Code in Two Dimensions)是岩土力学和地质工程领域常用的一款离散元方法(DEM)软件,用于模拟...
《阿秀的学习笔记》第四版By阿秀-420 这份笔记的作者阿秀是一名普通的2021届计算机研究生,毕业于普通双非学校。在秋招期间,阿秀面试了多家大厂,包括百度、阿里、腾讯、美团、滴滴、字节跳动、猿辅导、华为等,...
《Java JDK7学习笔记》是作者多年来教学实践经验的总结,汇集了教学过程中学生在学习java时遇到的概念、操作、应用或认证考试等问题及解决方案。《Java JDK7学习笔记》针对java se 7新功能全面改版,无论是章节架构...
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...
go语言学习经典数据,雨痕,go语言学习笔记 第四版 pdf版本
这份"Python学习笔记"涵盖了从环境搭建到基础语法,再到数据类型和控制结构等关键知识点,旨在为初学者提供全面的学习指导。 首先,1.1章节介绍了Python的基础,包括Python的起源和历史。Python是由Guido van ...
基于F|ask的在线学习笔记 ( Wtforms+ passlib+ MySQL+ PymySQL实现) 杨绛在《钱钟书是怎样做读书笔记的》一文中写到:“许多人说,钱钟书记忆力特强,过日不忘他本人却并不以为自己有那么「神」。他只是好读书,肯下功夫...
【标题】"良葛格JAVA学习笔记"是一个专注于Java编程的学习资源,由知名教育者或博主"良葛格"编撰。这份学习笔记以其清晰易懂的讲解方式和详尽的内容,深受学习者喜爱,被强烈推荐。它旨在帮助初学者和有一定基础的...