摘要: 调用同步锁的wait()、notify()、notifyAll()进行线程通信 看这个经典的存取款问题,要求两个线程存款,两个线程取款,账户里有余额的时候只能取款,没余额的时候只能存款,存取款金额相同。相当于存取款交替进行,金额相同。 线程间通信,需要通过同一个同步监视器(也就是this或者显式的O 阅读全文
posted @ 2016-12-06 17:46 sonng 阅读(404) 评论(0) 推荐(1) 编辑
摘要: 什么是同步 在上一篇 "0036 Java学习笔记 多线程 创建线程的三种方式" 示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条线程访问,一条线程在执行一个循环的过程中被中断,下一个线程则出现错误 因此,线程任务中可能引 阅读全文
posted @ 2016-12-05 16:39 sonng 阅读(379) 评论(0) 推荐(0) 编辑
摘要: 创建线程 创建线程的三种方式: + 继承java.lang.Thread + 实现java.lang.Runnable接口 + 实现java.util.concurrent.Callable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行的代码 继承ja 阅读全文
posted @ 2016-12-05 11:43 sonng 阅读(459) 评论(0) 推荐(0) 编辑
摘要: 什么是注解 注解可以看作类的第6大要素(成员变量、构造器、方法、代码块、内部类) 注解有点像修饰符,可以修饰一些程序要素:类、接口、变量、方法、局部变量等等 注解要和对应的配套工具(APT:Annotation Processing Tool)一起使用,APT会对含有注解进行一些处理 比如API文档 阅读全文
posted @ 2016-12-01 12:13 sonng 阅读(323) 评论(0) 推荐(0) 编辑
摘要: 通过反射创建对象 通过反射创建对象有两种方式,一种通过Class对象的newInstance()方法,一种是获取到Class对象的Constructor后,再调用newInstance()方法,前者要求对应类有默认的无参构造器,后者则可以用特定的的构造器 前者用得较多,很多Java EE框架中都用x 阅读全文
posted @ 2016-11-30 17:27 sonng 阅读(353) 评论(0) 推荐(0) 编辑
摘要: 先看看通过反射能干嘛 示例:修改对象的private实例变量 上面的示例中,虽然age和name被private修饰,但还是被修改了,那这岂不是很不安全,违背了封装的初衷?我也不知道 java.lang.class 有一个类很特别,它是所有类的类,它就是java.lang.class 要使用一个类的 阅读全文
posted @ 2016-11-30 11:22 sonng 阅读(298) 评论(0) 推荐(0) 编辑
摘要: JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器、堆栈、寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹配JVM对载入编译文件格式要求,任何语言都可以交由JVM运行,比如Scala、Groovy、Fant 阅读全文
posted @ 2016-11-28 17:05 sonng 阅读(401) 评论(0) 推荐(0) 编辑
摘要: 第01章 计算机、程序和Java概述 第02章 基本程序设计 第03章 选择 第04章 数学函数、字符和字符串 第05章 循环 第06章 方法 第07章 一维数组 第08章 多维数组 第09章 对象和类 第10章 面向对象思考 第11章 继承和多态 第12章 异常处理和文本I/O 第13章 抽象类和 阅读全文
posted @ 2016-11-25 19:33 sonng 阅读(1759) 评论(0) 推荐(0) 编辑
摘要: 垃圾回收特点 垃圾:程序运行过程中,会为对象、数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制只回收 中的对象,不回收数据库连接、IO等资源,所以才要在finally中关闭 要回收,但什么时候回 阅读全文
posted @ 2016-11-24 15:08 sonng 阅读(365) 评论(0) 推荐(0) 编辑
摘要: 可以创建几个对象? n多个:大部分的类,都可以随意创建对象,只要内存不爆掉 1个:比如 "单例类" 有限的几个:采用单例类的设计思路,可以只允许创建少数的几个特定的对象;还有就是枚举类。 创建少数几个对象,不用枚举类实现 创建少数几个对象,用枚举类改写 枚举类 枚举类的关键字是enum,跟class 阅读全文
posted @ 2016-11-23 17:48 sonng 阅读(355) 评论(0) 推荐(0) 编辑
摘要: 匿名内部类与Lambda表达式示例 下面代码来源于: "0027 Java学习笔记 面向对象 (非静态、静态、局部、匿名)内部类" 下面用Lambda表达式改写 Lambda表达式的基本结构 + 形参列表:()圆括号部分 形参列表位于圆括号中 形参类型允许省略:上面代码中省略"int[]"也是可以的 阅读全文
posted @ 2016-11-22 20:53 sonng 阅读(608) 评论(0) 推荐(1) 编辑
摘要: 内部类 内部类就是把一个类写在另一个类的内部 用途: + 如果一个类只希望它被某一个类访问,那么可以把它定义在另一个类的内部,并用private修饰 + 内部类可以访问它所在外部类的private成员;但所在的外部类的成员不能直接访问内部类的数据 + 内部类适合于创建那些仅需要一次使用的类 内部类除 阅读全文
posted @ 2016-11-21 17:24 sonng 阅读(368) 评论(0) 推荐(0) 编辑
摘要: 抽象方法与抽象类 抽象方法用abstract修饰,没有方法体部分,连花括号都不能有; 抽象方法和抽象类都用abstract修饰 包含抽象方法的类一定是抽象类;但不包含抽象方法的类也可以是抽象类 不能创建抽象类的实例,抽象类里可以有构造方法,但只是用来给子类调用的 抽象类可以包含类的5大要素:成员变量 阅读全文
posted @ 2016-11-21 10:45 sonng 阅读(359) 评论(0) 推荐(0) 编辑
摘要: final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 + 类变量: + 实例变量: + : 注意可以修饰形参 + 局部变量 修饰方法:该方法不可被重写 final修饰成员变量 final修饰成员变量,必 阅读全文
posted @ 2016-11-18 18:33 sonng 阅读(618) 评论(0) 推荐(0) 编辑
摘要: 包装类 基本类型 包装类 + byte Byte + short Short + int Integer + long Long + char Character + float Float + double Double + boolean Boolean 基本类型转为包装类型: + 自动装箱Au 阅读全文
posted @ 2016-11-18 00:03 sonng 阅读(410) 评论(0) 推荐(0) 编辑
摘要: 初始化代码块 在18篇 类的基本要素中说到,类的三大成员:成员变量、构造方法、方法,初始化代码块是类的第4个成员 初始化块用于对类或者对象的初始化, 一个类的初始化块可以有0~多个,按先后顺序执行 跟实例方法 类方法、实例变量 类变量一样,也可以用static修饰初始化块,静态初始化块 非静态初始化 阅读全文
posted @ 2016-11-17 15:27 sonng 阅读(817) 评论(0) 推荐(0) 编辑
摘要: 继承的特点 单继承:每个子类最多只有一个直接父类,注意是直接父类,间接父类个数不限 注意父类的概念:A B C D,在这里,ABC都是D的父类,C是D的直接父类,AB是D的间接父类 父类和子类是一般和特殊的关系;子类扩展了父类,子类是一种特殊的父类 Object是所有类的直接或间接父类;定义一个类时 阅读全文
posted @ 2016-11-17 11:12 sonng 阅读(331) 评论(0) 推荐(0) 编辑
摘要: 封装 面向对象的三大特征: + 封装 + 继承 + 多态 封装: + 将对象的状态信息隐藏,不允许外部程序直接访问 + 通过该类提供的方法来访问和操作 有啥用: + 隐藏类的实现细节 + 在方法中加入控制逻辑,限制对成员变量的不合理访问,比如把年龄设置为1000岁 + 进行数据检查,有利于保证对象信 阅读全文
posted @ 2016-11-16 16:03 sonng 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 变量分为哪些 成员变量:类里面,方法外面定义的变量 + 实例变量:没有用static修饰的变量,属于对象;存在期:创建实例~销毁实例;作用域:与该实例的生存范围相同 + 类变量:用static修饰的变量,属于类;存在期:类的准备阶段~销毁该类;作用域:与类的生存范围相同 局部变量: + 形参:方法签 阅读全文
posted @ 2016-11-16 11:58 sonng 阅读(277) 评论(0) 推荐(0) 编辑
摘要: 方法属于谁 方法要么属于类,要么属于对象 static修饰的方法属于类 没有static修饰的方法属于对象 方法只能定义在类里面,不能独立定义 不能独立的执行方法,要么通过类调用,要么通过方法调用 一个类里,一个方法调用另一个方法,看似没有调用者,实际上对于非static方法使用this调用,sta 阅读全文
posted @ 2016-11-16 10:37 sonng 阅读(286) 评论(0) 推荐(0) 编辑