Java SE
shangboerds
淡薄以明志,宁静而致远
展开
-
Java 并发处理
– Start为了提供效率,我们还可以使用并发Stream来处理。package shangbo.functional.demo18;import java.util.stream.IntStream;public class App { public static void main(String[] args) { Integer sum = IntStream.range(...原创 2019-06-02 15:39:21 · 419 阅读 · 0 评论 -
线程池
-- StartJDK 1.5 加入了并发包, 其中加入了大量的接口和类, 极大的简化了我们开发并发程序的难度, 下面是一个简单的例子.import java.util.concurrent.Callable;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;原创 2012-07-04 10:02:11 · 756 阅读 · 0 评论 -
观察者模式 (Observer)
-- Start观察者模式又被称为发布-订阅模式, 它通常应用在用户界面中, 一个典型的例子是当业务对象发生变化时, 通知用户界面, 从而实时刷新数据, 此时用户界面是观察者, 业务数据是被观察者. Java 通过 Observer(观察者) 和 Observable(被观察者) 为我们实现了一个观察者模式的框架, 下面是一个简单的例子.import java.util.Observa原创 2012-09-13 13:07:56 · 853 阅读 · 0 评论 -
格式化消息
-- Start任何程序都需要向用户显示消息, 无论是成功的消息或者是失败的消息. 通常我们通过字符串拼接来构造消息, 下面是一个简单的例子.public static void main(String[] args) throws Exception { Scanner in = new Scanner(System.in); System.out.print("What is原创 2012-05-15 17:45:18 · 1490 阅读 · 0 评论 -
比较字符串
-- Start如果我们要比较两个字符串,我们可以使用 String 类的 compareTo 方法, 它是按照字典的顺序来比较字符串的, 或者更确切的说它比较的是字符的编码. 大多数情况下, compareTo 方法足够我们使用了, 但是在有些情况下, 它并不能满足我们的需求, 如: 在中文环境下, 英语字母, 标点符号等有半角和全角之分, 在比较的时候我们认为他们是等同的, 下面是一个原创 2012-08-05 15:17:26 · 992 阅读 · 0 评论 -
Java 原子操作
-- Startjava.util.concurrent.atomic 包中提供了以下原子类, 它们是线程安全的类, 但是它们并不是通过同步和锁来实现的, 原子变量的操作会变为平台提供的用于并发访问的硬件原语.AtomicBoolean -- 原子布尔AtomicInteger -- 原子整型AtomicIntegerArray -- 原子整型数组AtomicLong -- 原原创 2012-07-16 16:27:58 · 16113 阅读 · 1 评论 -
线程
-- Start线程与进程的区别线程之间可以共享内存, 而每个进程有自己独立的内存空间.定义线程继承 Thread定义线程的一种方式是继承 Thread, 然后覆盖 Thread 类的 run 方法.public class Test { public static void main(String[] args) throws Exceptio原创 2012-06-20 13:06:24 · 735 阅读 · 0 评论 -
分叉/结合池
-- Start-- 待续-- 更多参见:Java 精萃-- 声 明:转载请注明出处-- Last Updated on 2012-07-09-- Written by ShangBo on 2012-07-09-- End原创 2012-07-09 17:13:08 · 745 阅读 · 0 评论 -
并发
-- Start当多个线程对同一个对象进行读写操作时将引发并发问题, 学过数据库的人都知道并发将导致脏读和丢失更新等错误, 本文将介绍 Java 是如何解决并发问题的.同步方法(synchronized)解决并发问题的方法之一是将并发读写的操作放到一个同步方法中, 下面是一个简单的例子.public class Test { public static vo原创 2012-06-22 10:22:02 · 1110 阅读 · 0 评论 -
线程交互
-- Start我们在 并发 一节中讲了一个并发存钱和取钱的例子, 事实上这个例子有一个问题, 那就是当余额小于等于0时我们仍然可以取钱(也许是信用卡), 下面我们把这个例子修改一下, 增加卡类型, 如果是信用卡, 则当余额小于等于0时我们仍然可以取钱; 如果是储蓄卡, 当余额小于等于我们要取的钱时, 取钱的线程必须等待, 直到存钱的线程唤醒它或超时为止.public clas原创 2012-06-22 10:23:43 · 2354 阅读 · 0 评论 -
反射
-- Start反射是一个很强大的工具, 它赋予我们动态分析类和对象的能力, 下面的例子对比了采用正常方式和反射方式操作对象.import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;public class Test { pub原创 2012-05-24 16:43:45 · 805 阅读 · 0 评论 -
内部类
-- Start定义在类中的内部类public class Test { public static void main(String[] args) throws Exception { Outer o = new Outer("尚波"); // 要想实例化内部类, 首先必须得到外部类对象 Outer.Inner i = o.new Inner(); // 用特殊的 ne原创 2012-05-25 17:48:55 · 684 阅读 · 0 评论 -
实现 Comparable 和 Comparator 接口
-- StartComparable 和 Comparator 接口中都有 compare 方法, 实现 compare 方法和实现 equals 方法类似, 也需要考虑有无子类两种情况. 除此之外, 有以下几点需要注意.1. 一致性: compare 方法和 equals 方法的定义应该一致, 也就是说, 如果 x.equals(y), 那么 x.compareTo(y) == 0. 注原创 2012-05-25 11:39:32 · 810 阅读 · 0 评论 -
静态导入
-- Start当我们需要调用其他类的静态方法时, 我们不需要创建对象, 直接用类名调用方法即可. 从 JDK 1.5 开始, 我们可以导入一个类的静态方法或域, 之后当我们调用该类的静态方法时, 我们连类名也可以省略了, 如下:import static java.lang.Math.abs;public class Test { public static void main(原创 2012-06-12 14:37:54 · 721 阅读 · 0 评论 -
Java 集合框架
-- StartListArrayListArrayList 是一个可变数组, 它有数组的所有优缺点, 如高效的随机访问, 低效的插入和删除. 它允许重复值, 允许null, 有序(所谓的有序指的是读取元素的顺序和插入的顺序一致).VectorVector 除了提供了同步外, 它和 ArrayList 没有任何区别, 因为它是线程安全的, 所以效率比较差, Ja原创 2012-09-19 11:04:00 · 4267 阅读 · 0 评论 -
注解
-- Start---更多参见:Java 精萃-- 声 明:转载请注明出处-- Last Updated on 2014-08-22-- Written by ShangBo on 2014-08-22-- End原创 2014-08-22 15:49:01 · 902 阅读 · 0 评论 -
java switch语句
java switch 语句原创 2015-10-29 16:29:35 · 1352 阅读 · 0 评论 -
– Java 处理 null
– Start在处理集合时,如果有 null 元素,将会导致空指针异常。package shangbo.functional.demo17;import java.util.ArrayList;import java.util.Comparator;import java.util.List;import java.util.Objects;public class App {...原创 2019-06-02 15:35:33 · 721 阅读 · 0 评论 -
Java 函数组合
– Start函数还可以组合,下面是一个简单的例子。package shangbo.functional.demo16;import java.util.function.Function;import java.util.function.Predicate;public class App { public static void main(String[] args) { ...原创 2019-06-02 15:30:02 · 601 阅读 · 0 评论 -
Java 函数接口(Funtional Interface)
– Start在 Java 中,一切都是对象,函数不能独立于对象存在,如何把一个函数作为参数传递给另一个函数呢?一个简单的想法是,如果一个对象只包含一个函数,我们不就可以认为该对象是一个函数吗?这就是所谓的函数接口(Functional Interface)的概念。值得注意点是函数接口只能包含一个为实现的函数,但是它可以有默认和静态函数,下面是一个简单的例子。package shangbo.f...原创 2019-05-29 21:19:12 · 842 阅读 · 0 评论 -
Java Stream API
– Start从之前的例子我们可以看到,Stream 接口是 Java 函数式编程的核心接口,下面我们来了解一下 Stream 接口。构造 Stream通常我们都是调用 Java集合的 stream 方法得到 Stream 对象,当然还有其他一些方法得到 Stream 对象。package shangbo.functional.demo13;import java.util.Array...原创 2019-06-01 14:53:42 · 597 阅读 · 0 评论 -
Java 函数式编程 vs SQL
– Start让我们通过例子来演示一下函数式编程和SQL吧。例子说明假设我们有个订单表 Order, 有如下几列order_id, order_datetime, buyer, seller, goods, status, price假设我们有如下订单package shangbo.functional.demo5;import java.time.LocalDateTime;...原创 2019-05-31 21:20:27 · 368 阅读 · 0 评论 -
Java 过程式编程 vs 函数式编程
– Start下面的例子演示了过程式编程和函数式编程,可以看到,函数式编程只要一行代码就搞定了。package shangbo.functional.demo1;import java.util.ArrayList;import java.util.List;public class App { public static void main(String[] args) { ...原创 2019-05-29 07:28:59 · 420 阅读 · 0 评论 -
Java 什么是函数式编程
– Start函数式编程的中心思想是把函数作为参数传递给另一个函数,或把函数作为一个返回值。为什么要这么做呢?这么做有什么好处呢?在我看来,函数式编程和 SQL 语句很像,它们操作的对象是一个集合。最开始,几乎所有的语言都是面向过程的,而 SQL 是面向集合的,后来由于业务需求越来越复杂,各大数据库厂商推出了面向过程的 SQL,如 PL/SQL。同时各种编程语言也开始支持面向集合的编程方式,即函...原创 2019-05-28 21:27:52 · 684 阅读 · 0 评论 -
Java 函数式编程精萃
– Start– 更多参见:Java SE 精萃– 声 明:转载请注明出处– Last Updated on 2019-05-28– Written by ShangBo on 2019-05-28– End原创 2019-05-28 21:21:48 · 689 阅读 · 0 评论 -
Java Lambda 表达式
– Start函数式编程需要永达大量的函数,这些函数往往非常简答,如果每个函数都需要定义类去实现函数接口,编程体验会非常糟糕,为此 Java 引入了 Lamda 表达式来定义匿名函数,下面是一些简单的例子。package shangbo.functional.demo4;import java.util.function.BiFunction;import java.util.funct...原创 2019-05-30 20:59:01 · 994 阅读 · 1 评论 -
java 泛型
-- Start使用泛型泛型是 Java 1.5 加入的新特性,使用泛型非常简单,下面是一个简单的例子。import java.util.ArrayList;import java.util.List;public class Test2 { public static void main(String[] args) { // 未使用泛型 List原创 2012-06-12 22:18:38 · 850 阅读 · 0 评论 -
Java 数据类型
-- StartJava 有八种基本数据类型(primitive type), 4个整型, 2个浮点型, 1个字符型和1个布尔型.每一种数据类型都对应一个包装类, 在 JDK 1.5 之后它们之间可以自动转换, 我们把这种能力称之为自动装箱和自动拆箱. 值得注意的是它们都是 final 类, 所以我们不可能继承它们实现自己的子类.所有的包装类都提供了 valueOf 方法和构造方法来创原创 2012-04-24 14:31:49 · 780 阅读 · 0 评论 -
Java SE 精萃
-- Start如果你认为本系列文章对你有所帮助,请大家有钱的捧个钱场,点击此处赞助,赞助额1元起步,多少随意,赞助时留下 Email,你将收到本人所写的所有电子书。没钱的捧个人场,求好评或建议。在Windows XP中安装Java SE使用记事本 (Notepad)开发一个 hello world 程序Java 数据类型UTF-16 编码简介Java 大数值Java...原创 2012-04-19 13:57:07 · 3351 阅读 · 0 评论 -
java try-with-resources 语句
java try-with-resources 语句原创 2015-10-29 16:51:18 · 2089 阅读 · 0 评论 -
重写 copy 方法
-- Start重写 copy 方法有几点需要注意.重新定义 Oject 类中的 copy方法并将方法从 protected 修改为 public, 将方法的返回值类型从 Object 修改为具体类型 (在 JDK 1.5 之前, 在覆盖方法时, 我们不能改变返回类型, 从 1.5 开始, 我们可以返回子类型).实现 Cloneable 接口. Cloneable 接口中并没有任何方法原创 2012-05-25 14:40:11 · 1283 阅读 · 0 评论 -
枚举
-- Start枚举通常用来封装一组表示分类的常量值, 如: 生物包括动物和植物, 我们可以定义如下枚举来表示生物.enum Organism { ANIMAL, PLANT;}从本质上说, 上面语句的意思是定义一个类 Organism, 它有两个实例 ANIMAL 和 PLANT. 因为它本质上是类, 所以我们还可以给枚举添加构造器, 方法和域.enum Organism {原创 2012-05-23 15:38:58 · 769 阅读 · 0 评论 -
格式化日期和时间
-- Start预定义格式不同国家和地区显示日期和时间的方式是不同的, 显然格式化日期和时间和本地的语言环境有密切关系. 利用 DateFormat 类提供的方法, 我们可以很容易的将日期和时间格式化成符合本地语言环境的形式.格式化日期下面的例子演示了各个国家和地区是如何显示日期的.public static void main(String[] args) throws Ex原创 2012-05-11 17:34:39 · 5201 阅读 · 0 评论 -
断言
-- Start断言通常只用在开发和测试阶段, 用来表示致命的, 不可恢复的错误, 尤其是用在单元测试的时候.断言的形式assert 条件assert 条件:表达式断言将对条件进行判断, 如果条件是 false 则抛出 AssertionError 异常, 如果采用第二种形式, 表达式将被用来构造 AssertionError 异常.启用和禁用断言默认情况下, 断言是禁用的,原创 2012-05-30 14:41:29 · 905 阅读 · 0 评论 -
格式化数字和货币
-- Start什么是格式化呢? 所谓的格式化是指套用一定的格式将数字,日期或消息等转换成字符串, 或将具有一定格式的字符串还原成数字或日期. 我们为什么要格式化数字,日期和消息呢? 主要是为了在显示或打印的时候符合本地用户的习惯. 本节我们主要关注如何格式化数字和货币.预定义格式不同国家和地区显示数字和货币的方式是不同的, 显然格式化数字或货币和本地的语言环境有密切关系. 利用原创 2012-05-09 17:50:03 · 6741 阅读 · 0 评论 -
异常
-- Start所有的异常都继承自 Throwable, 其中 Error 和 RuntimeException 被称为非检查异常. 因为他们不需要我们捕获, 出现 Error, 那一定是 Java 本身的问题, 出现 RuntimeException, 那一定是你的问题, 如: 出现 NullPointerException, 一定是你在没有初始化对象的情况下调用了对象的方法或属性.下面原创 2012-05-29 17:34:50 · 619 阅读 · 0 评论 -
动态代理
-- StartJava 的反射功能很强大, 但是我们并不能通过反射实例化一个接口, 也不能动态定义一个新类. 为了解决这个问题, 我们可以利用动态代理在运行时创建一个实现了一组给定接口的新类, 只有在编译时无法确定需要实现哪个接口时才使用代理.import java.lang.reflect.InvocationHandler;import java.lang.reflect.M原创 2012-05-28 15:35:07 · 650 阅读 · 0 评论 -
Java 字符串
-- Start什么是字符串呢? 呵呵, 所谓的字符串就是一串字符的意思. Java 用 char 来表示字符, 那是不是要用 char 数组来表示字符串呢? 如果是那样的话, 我们操作字符串将非常困难, 也不符合面向对象思想. 为此, Java 提供了 String 类来表示字符串, 事实上, 如果你查看String 类的源代码, 你会发现, 在String 类内部就是使用char数组来原创 2012-05-03 19:42:58 · 700 阅读 · 0 评论 -
Java语言规范
-- StartJava语言规范(Java Language Specification) 和Java虚拟机规范(Java Virtual Machine Specification) 描述了更多的细节, 你可以从下面的网址在线阅读或下载.http://docs.oracle.com/javase/specs/---更多参见:Java 精萃-- 声 明:转载请注明出处-原创 2012-04-20 14:10:25 · 2325 阅读 · 0 评论 -
Java 白皮书
-- StartJava 白皮书(White Papers) 是 Java 的设计者编写的用来解释设计初衷的指导纲领,我们可以在下面的链接中找到它.http://java.sun.com/docs/white/langenv/---更多参见:Java 精萃-- 声 明:转载请注明出处-- Last Updated on 2012-04-19-- Writte原创 2012-04-19 14:05:41 · 4138 阅读 · 0 评论