Java
文章平均质量分 69
JAVA学习心得记录
程序员阿甘
这个作者很懒,什么都没留下…
展开
-
类的成员之变量
思维导图代码练习思考题原创 2021-03-18 20:00:03 · 260 阅读 · 0 评论 -
类的成员之方法
思维导图代码练习思考题原创 2021-03-18 19:58:49 · 306 阅读 · 0 评论 -
类的成员之构造器
思维导图代码练习思考题原创 2021-03-18 19:57:35 · 407 阅读 · 0 评论 -
类的成员之初始化块
思维导图代码练习思考题原创 2021-03-18 19:56:25 · 236 阅读 · 0 评论 -
final关键字
思维导图点击标题可以下载xmind代码练习final可修饰package finalTest;// final可以修饰类// final修饰的类是最终类,即不能派生子类的类public final class FinalTest { // final可以修饰变量 // 被final修饰的变量是常量,一旦初始化,则不能二次赋值,否则编译报错 // 被final修饰的成员变量,系统不会自动初始化,必需由程序员显式初始化 // 被final修饰.原创 2021-03-13 16:59:48 · 437 阅读 · 3 评论 -
static关键字
思维导图代码练习static基本使用public class StaticTest { // 静态变量 // 静态变量会执行默认初始化 public static int x; // 静态变量的初始化时机 1.声明时 public static int a = 10; // 静态变量的初始化时机 2.静态初始化块中 public static int b; //静态成员中不能访问实例成员(非静态成员),否则编译报错原创 2021-03-15 12:56:38 · 311 阅读 · 0 评论 -
流程控制
思维导图代码练习思考题原创 2021-03-19 16:04:43 · 198 阅读 · 0 评论 -
面向对象特征之封装
思维导图代码练习符合封装要求地类需要具备public class JavaBeanModel { // 私有化类的属性 private String name; private int age; // 提供公开地getter方法来帮助外部获取类的私有化属性 public String getName() { return name; } // 提供公开地setter方法来帮助外部修改类的私有化属性 publ原创 2021-03-18 11:57:25 · 244 阅读 · 0 评论 -
面向对象特征之继承
思维导图代码练习思考题Java的继承体系都是单继承吗?不是。Java的类的继承体系都是单继承。但是Java的接口的继承体系时多继承,即一个接口可以继承多个其他接口。Java的类不是单继承吗,比如A继承B,但是B中并没有定义equals,toString等方法,为什么A类对象还是可以调用这些方法?Java类的继承体系是单继承。即一个类只能由一个父类。且继承发生后,子类可以继承父类的所有成员变量,成员方法,内部类,枚举类。但是Java继承还有一个规则:..原创 2021-03-16 20:52:20 · 322 阅读 · 1 评论 -
面向对象特征之多态
思维导图代码练习public class PolymorTest { public static void main(String[] args) { // 多态概念:一个引用变量的编译时类型和运行时类型不一致 // 多态实现:1.父类引用指向子类对象 2.子类重写父类方法 3.父类引用调用被重写的方法 Father father = new Son(); // 多态体现: // 在成员变量上不呈现多态性原创 2021-03-15 20:23:29 · 245 阅读 · 0 评论 -
【专题讨论】【继承】父类构造器中调用了被子类重写的方法
专题讨论原因因为自我感觉java继承这块学习的不错,就去网上找了相关的笔试题,然后就被虐的不轻,感叹Java的海洋太大了,或者说自己对继承的理解还不够深入。这个专题名称叫做:“父类构造器中调用了被子类重写的方法”,不知道大家有没有了解过或者实践过这个概念,我这边呢,首先在被笔试题虐之前这个概念我是见过的,具体是在李刚老师的《疯狂Java讲义 第五版》157页中,为了保证父类具有良好的封装性,不会被子类随意修改,设计父类时应该遵循如下规则:其中有一条规则就是:尽量不要在父类构造器中调用将要被子原创 2021-03-17 17:01:47 · 1349 阅读 · 2 评论 -
【专题讨论】【继承】创建子类对象时,子类成员变量的初始化顺序
专题讨论原因这个专题算是上一个专题的衍生专题吧。但是也具有单独拎出来讲的价值。毕竟只有搞清出了new关键字创建对象的流程,你才能继续其他面向对象概念的学习。或者说现在继承这块的笔试题,好多都是考察对象成员变量初始化顺序的。特别时发生继承关系后的创建子类对象的流程中对象成员变量的初始化顺序考察更是百花齐放,眼花缭乱。但是万变不离其中,弄清楚原理,自然是“打得一拳开,免得百拳来”。专题讨论方向1.没有显式继承关系的子类(即没有使用extends关键字的类),创建对象过程中成员变量的初始化顺.原创 2021-03-17 23:10:59 · 491 阅读 · 1 评论 -
【专题讨论】【继承】子类中继承自父类的方法(没有重写),只能操作继承自父类的成员变量
专题讨论原因随便找的笔试题,感觉能够开拓自己对继承的认知。专题讨论方向子类中继承自父类的方法(没有重写),只能操作继承自父类的成员变量专题讨论代码演练public class Main{ public static void main(String[] args){ A a = new A(); a.printOut(); B b = new B(); b.printOut(); b.show(); a = b; a.printOut(); ..原创 2021-03-18 00:22:57 · 707 阅读 · 0 评论 -
抽象类
思维导图点击标题即可下载xmind文件代码练习package abstractTest;// 抽象类定义:// 1.访问权限修饰符只能是public或默认,和具体类要求一致// 2.抽象类定义必须加abstract修饰,可以说只有被abstract修饰的类才是抽象类// 3.抽象类可以继承具体类,也可以继承抽象类。但是也要符合类继承特性:单继承// 4.抽象类主要用于派生子类,如Shape类派生了Triangle,Rectangular,Circular类public abs原创 2021-03-12 12:15:53 · 480 阅读 · 1 评论 -
接口
思维导图代码练习package interfaceTest;// 接口定义使用关键字interface// 访问权限修饰符只能是public或默认// 接口可以多继承其他接口(多个接口间逗号隔开),不能继承类// 接口可以被类多实现,见Test1Impl,类实现接口使用关键字implements,实现的多个接口间以逗号隔开public interface Test extends Test1,Test2,Test3{ // 接口成员:常量 // 默认被public原创 2021-03-11 13:01:42 · 310 阅读 · 1 评论 -
内部类
public class Main { public static void main(String[] args) { // 外部类外,创建非静态内部类变量 Outter.Inner1 inner1; // 外部类外,创建非静态内部类对象,注意是通过”外部类对象“调用非静态内部类构造器 inner1 = new Outter().new Inner1(); // 外部类外,创建静态内部类变量 O...原创 2021-03-04 23:59:27 · 539 阅读 · 2 评论 -
Lambda表达式
public class LambdaTest { static int c = 10; public static void main(String[] args) { int a = 10; int b = 10; // 匿名内部类方式创建函数式接口实例 Run runInner = new Run(){ @Override public void run(Str...原创 2021-03-04 00:11:47 · 425 阅读 · 1 评论 -
枚举类
import java.util.Arrays;public class EnumTest { public static void main(String[] args) { System.out.println(Season.SPRING); // 枚举类默认继承java.lang.Enum,可以继承父类的实例方法toString(),name(),values(),valueOf(),compareTo(),ordinary() Syste.原创 2021-03-02 20:20:13 · 238 阅读 · 0 评论 -
基本类型到包装类
思维导图代码练习public class BaoTest { public static void main(String[] args) { // 自动装箱,拆箱 // 发生时机:1.将基本数据类型(包装类)的变量直接赋值给包装类或者Object类型(基本类型)时 int a = 1; // 编译后,Integer aa = Integer.valueOf(a); Integer aa = a;// 自动原创 2021-03-15 15:25:15 · 302 阅读 · 0 评论 -
Java容器之数组
思维导图代码练习思考题原创 2021-03-19 17:55:13 · 297 阅读 · 0 评论 -
Java容器之集合
思维导图思考题1、Java容器已经有了数组,为什么还需要引入集合容器概念?因为数组的使用有其局限性。我们知道数组的定义如下:数组可以用来存储一组相同类型的数据。数组一旦初始化完成,则数组长度就固定了,不能自动扩容。很多时候,我们存储数据时都不确定数据的个数有多少,所以很难确定数组的长度,而不给定数组的长度,则数组就无法定义。而定义一个超长数组,则可能会造成内存和性能的浪费,定义一个小数组,又可能会出现数组越界,数组容量不足等情况。所以为了实现一个动态容量的容器,ja原创 2021-03-20 13:13:52 · 190 阅读 · 0 评论 -
集合之Collection接口
思维导图思考题为什么要设计Collection接口?我们知道接口的定义是:多个类中的共同的公共行为规范。实现接口的类必须重写接口的抽象方法。重写方法具体内部实现可以因类而异,但是对外暴露的方法签名必须按照抽象方法的来。这样的好处是:方便外部的调用,规范了方法的定义,而又不影响内部实现。而Collection接口正是体现了接口的优点。Collecton接口将单列集合的共同的公共行为提取出来,形成统一的行为规范。所以外界可以使用Collection接口中定义的方法,操.原创 2021-03-20 14:15:48 · 312 阅读 · 0 评论 -
List集合之ArrayList(一)通过源码看特性
思维导图源码剖析(jdk1.8.0_282)构造器public ArrayList() /** * Shared empty array instance used for default sized empty instances. We * distinguish this from EMPTY_ELEMENTDATA to know how much to inflate when * first element is added.原创 2021-03-22 15:25:44 · 323 阅读 · 2 评论 -
集合之迭代器
思维导图思考题1、迭代器的概念的是什么?迭代器用于访问容器中的元素。而访问容器中的元素面临两个难点:1.不同的容器可能使用不同数据结构,而不同的数据结构导致访问容器元素方式的多变性。2.针对容器的数据结构特点来访问容器中的元素会暴露容器的内部细节。所以为了针对不同容器1.提供统一的访问容器元素的方法2.不暴露容器的内部细节提出了迭代器模式。2、Iterable接口和Iterator接口的概念,它们之间是否有联系?Java中为迭代器模式设计了两个接口It原创 2021-03-24 18:16:43 · 607 阅读 · 0 评论 -
List集合之ArrayList(二)通过源码看迭代器实现
ArrayList迭代器的简介我们知道Collection接口继承了Iterable接口,所以所有的Collection接口的实现类都需要实现Iterable接口中的Iterator<E> iterator()方法。ArrayList实现了iterator()方法,但是该方法要求返回Iterator实现类对象。此时一般有两个方式获取Iterator实现类对象:1.定义Iterator接口的匿名内部类2.定义Iterator接口的实现类由于匿名内部类只能使用一次,不利于代码复用原创 2021-03-24 22:50:23 · 466 阅读 · 2 评论 -
List集合之ArrayList(三)ArrayList总结
思维导图代码练习ArrayList常用方法练习import java.util.*;public class ArrayListTest { public static void main(String[] args) { ArrayList al = new ArrayList(); // ArrayList集合添加的元素类型可以不一致,但是必须是引用类型 // ArrayList集合的容量是可变的 al.ad原创 2021-03-26 23:46:43 · 680 阅读 · 0 评论 -
List集合之Vector
思维导图思考题Vector内部方法因为加了同步,所以只能单线程操做,这比ArrayList更加安全,为什么大家都不推荐使用Vector?Stack的设计是否有问题?Stack模拟栈结构真的合适吗?原创 2021-03-27 18:13:47 · 257 阅读 · 0 评论 -
List集合之LinkedList(一)通过源码看特性
思维导图(以下源码来自jdk1.8.0_282)数据结构双向链表由于Java中并没有像数组那样直接提供双向链表的类,所以我们这里需要先实现双向链表数据结构。双向链表的关键实现是 “链接节点” 设计。因为链接节点具有承上启下的作用。只有具备承上启下的能力才能实现双向联系。 private static class Node<E> { E item; Node<E> next; Node<E>.原创 2021-03-27 19:44:34 · 452 阅读 · 1 评论 -
List集合之LinkedList(二)通过源码看迭代器实现
思维导图源码分析ListIterator迭代器ListIterator<E> listIterator(int index) /** * Returns a list-iterator of the elements in this list (in proper * sequence), starting at the specified position in the list. * Obeys the general contrac原创 2021-03-29 13:46:05 · 385 阅读 · 1 评论 -
List集合之LinkedList(三)LinkedList总结
思维导图代码练习思考题原创 2021-03-30 11:35:50 · 783 阅读 · 4 评论 -
集合之Map接口
思维导图思考题总结Map接口的成员成员方法因为Map是集合框架,而集合本身作为容器,肯定要具备插入,删除,查询元素的能力插入元素在Map集合中插入键值对 V put(K key, V value); 将另一个Map集合中的键值对全部插入到当前Map集合中 void putAll(Map<? extends K, ? extends V> m); 删除元素根据key删除对应键值对...原创 2021-04-02 12:57:01 · 223 阅读 · 0 评论 -
Map集合之HashMap(一)
HashMap定义HashMap继承自AbstractMap,实现了Map,Cloneable,SerializableAbstractMap实现了Map接口,且定义了内部类实现类Map.Entry接口,重写了大部分的Map接口抽象方法Cloneable是一个标记型接口,实现该接口说明HashMap可以对象克隆Serializable是一个序列化接口,实现该接口,说明HashMap对象支持序列化和反序列化HashMap数据结构HashMap的底层数据结构是 数组+链表+红黑树数组.原创 2021-04-07 10:20:03 · 551 阅读 · 0 评论 -
泛型
泛型理解举个例子:一个箱子什么东西都可以装。但是后面,我们嫌箱子装的东西太杂了,就给它贴了一个标签,标签写着“玩具”,那么我们理解这个箱子就是专门装玩具的。泛型就像上面例子中的标签。在Java中我们将泛型称为“参数化类型”,就像例子中的标签可以写任何东西,比如化妆品,玩具,水果,衣服等等。类似于方法形参的作用。所以泛型也称为“类型形参”。泛型作用泛型是JDK5新推出的特性。而最能体现泛型作用的就是集合类。JDK5中将集合类全部按照泛型特性处理重写了。在JDK5前,没有泛型的集合有原创 2021-04-12 18:31:41 · 874 阅读 · 0 评论 -
Map集合之HashMap(二)
思维导图代码练习package hashmaptest;import linkedlist.Person;import java.util.HashMap;import java.util.Map;public class HashMapTest { public static void main(String[] args) {// noParamConstractor();// oneParamConstractor();//原创 2021-04-20 12:43:28 · 600 阅读 · 0 评论 -
Set集合之HashSet
定义public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.SerializableHashSet继承了AbstractSet实现了Set接口,支持Set接口中定义的操作实现了Cloneable接口,支持对象克隆实现了Serializable接口,支持对象序列化,反序列化底层数据结构HashSet的集.原创 2021-04-20 14:14:04 · 529 阅读 · 2 评论 -
Map集合之Hashtable
定义public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.SerializableHashTable是JDK1.0时就提供的集合类。HashTable也是双列集合,它实现了Map接口,属于Map实现类。但是HashTable继承自Dictionary类。另外Hashtable也实现了Clonable接口,原创 2021-04-20 19:36:40 · 436 阅读 · 0 评论 -
Java异常机制
异常概念异常体系Java异常体系的基类是Throwable类Throwable类由两个子类:Error:错误,一般是虚拟机错误,如内存溢出,栈溢出等,这种错误无法修复或不可捕获,将导致应用程序中断。Exception:异常,一般是指编译期异常或运行期异常。异常可以被声明,捕获和处理。由于Error不能被捕获和无法修复,所以应用程序无法处理或抛出Error,也不能捕获Error,定义方法时也不能声明Error。Java中的异常通常是指Exception。异常分类原创 2021-04-22 20:08:35 · 932 阅读 · 2 评论 -
Map集合之LinkedHashMap
定义public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>LinkedHashMap继承自HashMap,实现了Map接口。由于HashMap实现了Cloneable,Serializeable接口,所以LinkedHashMap作为HashMap的子类也有对象克隆和序列化的能力。成员变量序列化id private static原创 2021-04-27 21:24:00 · 540 阅读 · 1 评论 -
Set集合之LinkedHashSet
源码分析package java.util;public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, java.io.Serializable { private static final long serialVersionUID = -2851667679971038690L; public LinkedHashS原创 2021-04-28 11:33:05 · 297 阅读 · 0 评论 -
通过BST,AVL,234树来理解红黑树
红黑树的认识树(Tree)结构及基本概念生活中我们认识的树,如下图树根在最下面树干上有很多树杈,树杈上还有小树杈,树杈顶端有叶子但是在数据结构中,树结构描述有所不同树根在最上面,树根称为根节点根节点可以有多个子节点,子节点又可以又多个子节点最末端的子节点称为叶子节点树的高度就是叶子节点到根节点的节点数树(Tree) 是 n (n>=0) 个节点的有限集。在任一非空树中,只有一个根节点(root),其余节点可以组合为根节点的子树(subTre..原创 2021-04-28 15:21:01 · 1109 阅读 · 2 评论