Map接口
摘要:HashMap: 作为Map的主要实现类 线程不安全的,效率高 存储null的key和value LinkedHashMap:保证遍历map元素时,可以按照添加的顺序实现遍历 在原有的HashMap底层结构继承上,添加一对指针,指向前一个和后一个 HashMap的底层:数组+链表 jdk7之前 数组
阅读全文
Set接口
摘要:Set接口:存储无序、不可重复的数据 HashSet 作为Set接口的主要实现类 线程不安全 可以存储null值 LinkedHashSet 作为HashSet子类,遍历其内部数据时,可以按照添加的顺序遍历 TreeSet:可以按照添加对象的指定属性进行排序 一、Set接口中没有额外定义新的方法 以
阅读全文
List接口
摘要:ArrayList 1.2 作为List接口的主要实现类 线程不安全的,效率高 底层用Object[] elementData存储 jdk7: ArrayList list = new ArrayList() 底层创建了长度是10的Object【】数组 添加导致底层数组容量不够,则扩容。 每次扩容1
阅读全文
Java集合框架
摘要:Java集合可分为Collection和Map两种体系 Collection接口:单列数据,定义了存取一组对象的方法的集合 List 有序可重复 Arraylist LinkedList Vector Set 元素无序不可重复 HashSet LinkedHashSet TreeSet Map接口:
阅读全文
枚举类的使用
摘要:主要内容 如何自定义枚举类 如何使用关键字 enum自定义枚举类 Enum类的主要方法 实现接口的枚举类 类的对象只有有限,确定的。 当需要定义一组常量时,强烈建议使用枚举类 如果枚举类中只有一个对象,可以作为单例模式的实现方式 如何定义: jdk5.0之前自定义枚举类 enum定义的枚举类默认继承
阅读全文
StringBufferBuilder
摘要:String StringBuffer StringBuilder的异同 后两者可变的字符序列 StringBuffer 线程安全的 效率低 new char[16 ] StringBuilder 线程不安全 效率低 JDK5.0新增 如果要添加的数据底层数组盛不下,需要扩容底层的数组 默认情况下,
阅读全文
String的常用方法
摘要:int length():返回字符串的长度 char charAt(int index): 返回某索引处的字符 boolean isEmpty() 判断是否空字符串 String toLowerCase() String toUpperCase() String trim()返回字符串的副本,忽略前
阅读全文
Java的String类
摘要:String是一个final类,代表不可变的字符序列。 当对字符串重新赋值时,需要重新指定内存区域,不能使用原有value进行赋值 当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值 当调用String的replace方法修改指定字符或字符串,也需要重新指定内存区域赋值 字符串是常量,它们的
阅读全文
Java异常处理
摘要:Erro:Java虚拟机无法解决的严重问题 Exception:其他因编程错误或偶然的外在因素导致的一般性问题 如控指针访问,试图读取不存在的文件,网络连接中断,数组下标越界 异常的体系结构 java.lang.Throwable java.lang.Error java.lang.Exceptio
阅读全文
JDK5.0新增线程创建方式
摘要:1.实现Callable接口 相比run()方法,可以有返回值 方法可以抛异常 支持泛型的返回值 需要借助FutureTask类,比如获取返回结果 2.使用线程池 背景:经常创建和销毁、使用量特别大的资源 比如并发情况下的线程,对性能影响很大 思路:提前创建好多个线程,放入线程池中,使用时直接获取,
阅读全文
线程的通信
摘要:涉及到三个方法 wait() :一旦执行此方法 当前线程就进入阻塞状态并释放同步监视器 notify():唤醒被wait的另一个线程。如果有多个线程被wait,就唤醒优先级高的线程 notify():唤醒所有被wait的线程 三个方法必须使用在同步代码块或同步方法中 调用者必须是同步代码块或同步方法
阅读全文
线程的死锁问题
摘要:死锁: 不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,就形成了线程的死锁 出现死锁后,不会出现异常,不会出现提示,只是所有的线程都处于阻塞状态,无法继续 解决方法 专门的算法 原则 尽量减少同步资源的定义 尽量避免嵌套同步 解决线程安全问题的方式三:Lock锁 JD
阅读全文
使用同步机制将单例模式中的懒汉式改写为线程安全的
摘要:class Bank{ private Bank(){} private static Bank instance = null; public static Bank getInstance(){ //方式一:效率稍差 方式二if(instance==null){ synchronized(Ban
阅读全文
线程安全
摘要:某个线程操作共享数据的过程中,尚未操作完成时,其他线程参与进来。 Java中,我们通过同步机制解决线程安全问题。 方式一:同步代码块 synchronized(同步监视器){ 需要被同步的代码 } 说明:操作共享数据的代码,即为需要被同步的代码 共享数据:多个线程共同操作的变量 同步监视器,俗称:锁
阅读全文
创建多线程方式二:实现Runnable接口
摘要:1.创建一个实现了Runnable接口的类 2.实现类去实现Runnable中的抽象方法:run() 3.创建实现类的对象 4.将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象 通过Thead类的对象调用start方法 比较创建线程的两种方式: 开发中:优先选择实现Runna
阅读全文
Java创建多线程方式之一:继承Thread类
摘要:1.创建一个继承于Thread类的子类 2.重写Thread类的run() -->将此线程执行的操作声明在run()中 3.创建Thread类的子类对象 4,通过此对象调用start():1.启动当前线程 2.调用当前线程的run() 不能通过直接调用run()的方式启动线程 再启动一个线程,已经s
阅读全文
Java8中接口新特性
摘要:接口中定义的静态方法,只能通过接口来调用。 默认方法使用default修饰,通过实现类对象来调用 如果实现类重写了接口中的默认方法,调用时,仍然调用的是重写以后的方法 如果子类继承的父类和实现的接口中声明了同名同参数的方法,子类在没有重写此方法的情况下,默认调用的是父类中的同名同参数的方法。 如果实
阅读全文
接口应用:代理模式和工厂模式
摘要:代理设计就是为其他对象提供一种代理以控制对这个对象的访问。 工厂模式: 实现了创建者与调用者的分离,即创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。
阅读全文
内部类
摘要:类的内部成员之五:内部类 1.Java中允许将一个类A声明在另一个类B中,则类A就是内部类,类B称为外部类 局部内部类(方法内,代码块内,构造器内) 成员内部类(静态、非静态) 一方面,作为外部类的成员 调用外部类的结构 可以被static修饰 可以被四种不同的权限修饰 另一方面,作为一个类: 类内
阅读全文
接口的使用
摘要:1.接口使用interface定义 2.接口和类是并列的两个结构 3.如何定义接口:定义接口中的成员 JDK7以前 只能定义全局常量和抽象方法 全局常量 public static final的 抽象方法 public abstract的 JDK8: 还可以定义静态方法 默认方法 4.接口中不能定义
阅读全文
abstract关键字
摘要:可以修饰类 方法 abstract修饰类:抽象类 此类不能实例化 抽象类中一定有构造器,便于子类实例化时调用 修饰方法: 抽象方法 没有方法体 abstract不能用来修饰私有方法、静态方法、final的方法、final的类
阅读全文
final
摘要:final 可以用来修饰的结构: 类 方法 变量 final用来修饰一个类:此类不能被其他类所继承 String System StringBuffer 修饰方法: 不能被重写 final用来修饰变量:此时变量就称为是一个常量 可以考虑赋值的位置:显示初始化 代码块中初始化 构造器中初始化
阅读全文
代码块
摘要:类的成员之四:代码块(或初始化块) 只能用static 修饰 静态代码块: 内部可以有输出语句 随着类的加载而执行,而且只执行一次 非静态代码块: 内部可以有输出语句 随着对象的加载而执行 每创建一个对象,就执行一次非静态代码块 对属性可以赋值的位置: 默认初始化 显示初始化 构造器中初始化 有了对
阅读全文
单例(Singletion)设计模式
摘要:类的单例设计模式:采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得对象实例的方法。 饿汉式 class Bank{ 1.私有化类的构造器 private Bank(){ } 2.内部创建类的对象 4.要求此对象也必须声明为静态的 private static
阅读全文
static关键字
摘要:static可以用来修饰:属性 方法 代码块 内部类 使用static修饰属性:静态变量(类变量) 属性,按是否使用static修饰,又分为静态属性和实例变量 实例变量:我们创建了类的多个对象,每个对象都独立的拥有一套类中的非静态属性。当修改其中一个对象中的 非静态属性时,不会导致其他对象中同样的属
阅读全文
equals
摘要:== 和equals的区别 ==的使用: ==运算符 1.可以使用在基本数据类型变量和引用数据类型变量中 2.如果比较的是基本数据类型变量,比较两个变量保存的数据是否相等(不一定类型要相同) 如果比较的是引用数据类型,比较两个对象的地址值是否相同。即两个引用是否指向同一个对象实体 equals()方
阅读全文
对象的多态性
摘要:父类的引用指向子类的对象 Person p1 = new Man(); 多态的使用:当调用子父类同名同参数的方法时,实际执行的是子类重写父类的方法 虚拟方法调用 多态性的使用前提 类的继承性 方法的重写 对象的多态性:只使用于方法,不适用于方法 虚拟方法调用 子类中定义了与父类同名同参数的方法,在多
阅读全文
子类对象实例化的全过程
摘要:从结果上看: 子类继承父类后,就获取了父类中声明的属性或方法 创建子类的对象,在堆空间中,就会加载所有父类中声明的属性 从过程上看 当我们通过子类的构造器创建子类对象时,一定会直接或间接的调用其父类的构造器,进而调用父类的父类的构造器。
阅读全文
super
摘要:我们可以在子类的方法或构造器中,通过使用super.属性或super.方法的方式,显示的调用父类中声明的属性或方法。 特殊情况,子类和父类中定义了同名的属性时,我们想要在子类中调用父类中声明的属性,则必须显示的调用super.属性的方式。表明调用的是父类中声明的属性。 子类重写了父类的方法、 我们可
阅读全文
Java中面向对象的继承性
摘要:继承性的好处 减少了代码冗余 提高了代码的复用性 便于功能的扩展 为之后多态性的使用提供了前提 继承的格式:class A extends B{} A:子类、派生类、subclass B:父类、超类、基类 体现:一旦子类A继承父类B后,A就获取了父类B中声明的所有属性、 方法 特别的,父类中声明为p
阅读全文
属性的赋值过程
摘要:属性赋值的先后顺序 1.默认初始化 2.显示初始化 3.构造器中初始化 4.通过“对象.方法” 或“对象.属性”的方法 赋值 1->2->3->4
阅读全文
类的成员之构造器
摘要:constructor 构造器的作用: 创建对象 new+构造器 初始化对象 如果没有显示的定义类的构造器的话,系统默认提供一个空参的构造器 定义构造器的格式:权限修饰符 类名 (形参列表){} 一个类中定义的多个构造器,彼此构成重载 一旦我们显示的定义了类的构造器之后,系统就不再提供默认的空参构造
阅读全文
面向对象之封装性
摘要:高内聚:类的内部数据操作细节自己完成,不允许外部干涉 低耦合:仅对外暴露少量的方法用于使用 隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性可维护性。 封装性的体现:将类的属性私有化,同时提供公共的方法set和get 不对外暴露的私有的方法 单例模式 对属性的设置 s
阅读全文
再谈方法
摘要:恢复内容开始 方法的重载 两同一不同:同一个类、相同方法名,参数列表不同 在同一个类中,允许存在一个以上的同名方法, 只要它们的参数个数或者参数类型不同即可。 重载的特点: 与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型,参数顺序不同) 判断是否重载: 和方法的权限修饰符、
阅读全文
类中方法的声明和使用
摘要:方法:描述类应该具有的功能 Math类 sqrt() random() 方法的声明:权限修饰符 返回值类型 方法名(形参列表){ 方法体 } 说明: 关于权限修饰符: java规定的4种权限修饰符:private public 缺省 protected 返回值类型 有返回值 如果方法有返回值,则必须
阅读全文
属性和局部变量的区别
摘要:恢复内容开始 相同点: 定义变量的格式: 数据类型 变量名=变量值 先声明后使用 变量都有其对应的作用域 不同点: 1.在类中声明的位置不同 属性:直接定义在类的一对{}内 局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量 2.关于权限修饰符的不同 属性:可以在声明属性时,指
阅读全文
对象的创建和使用:内存解析
摘要:堆: 此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。所有的对象实例以及数组都要在堆上分配。 栈:指虚拟机栈。用于存储局部变量等。局部变量表存放了编译期可预知长度的各种疾病数据类型、对象引用(reference类型,它不等同于对象本身,是对象在堆内存存放的首地址)。方法执行
阅读全文
Java二维数组的使用
摘要:1.二维数组的声明和初始化 int[][] arr = new int[][]{{1,2,3},{4,5}}; 静态初始化 动态初始化 String[][] arr2 = new String[3][2]; String[][] arr3 = new String[3][]; 2.如何调用数组的指定
阅读全文
Java数组
摘要:数组Array,是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理 常见概念 数组名 下标 元素 数组的长度 特点:有序排列 数组是引用数据类型,元素可以是任意类型 创建数组会在内存中开辟一块连续的空间 数组长度一旦确定,就不能修改
阅读全文
Java运算符
摘要:算术运算符 赋值运算符 int j1=10 int i2,ji2; i2=j2=10 int i3=10,j3=20 += -= /= *= short s1=10; s1+=2; 不会改变变量本身的数据类型 比较运算符 == != > < >= <= instanceof 逻辑运算符 &逻辑与 &
阅读全文