- 博客(34)
- 资源 (4)
- 收藏
- 关注
原创 Java工厂模式
为什么要使用工厂? 考虑现实的一种情况,如果我们需要一件上衣,我们可以自己做,也可以去订做,如果要自己做,自己必须了解做衣服的所有细节,如果订做,只要告诉他们我们要什么样的就行了,我们不知道做的一切细节。在开发软件的时候也一样,如果我们需要一个对象,我们可以自己new一个,我们自己new的话,对象和客户端必须紧密耦合。如果我们用一个工厂类来实例化所需要的对象,我们就只告诉我们要什么就行了。工厂模式
2017-06-27 13:19:37
240
原创 Java 中Redirect和Forward
Java中连接跳转的2中方式Redirect和Forward - (重定向)Redirect重定向是把request 直接转到其他组件处理,response.sendRedirect()后,response已经提交,不能再对response操作。 一个简单的重定向response.sendRedirect("redirect");这个应该和下面的代码一样的效果: response.
2017-06-27 13:19:15
1030
原创 Java 线程异常处理
如果我们调用一个线程处理任务,但是当线程发生异常的时候我们调用线程的地方无法捕捉到异常。 用例子验证:我在main中把调用线程的代码放到try-catch里面,但是结果却没有捕捉到任何异常。package thread;class MRunnable implements Runnable{ @Override public void run() { throw n
2017-06-27 13:18:57
394
原创 Java 中线程(三)
如果要用能返回值得线程,得用到Callable 和FutureTask,但是返回值是阻塞式的,因此自己实现了个异步返回值的线程。 功能简单了点,只是个思路。package thread;import java.text.SimpleDateFormat;import thread.FutureJob.CallBack;interface ReturnBackRunnable<T>{ T
2017-06-27 13:18:31
240
原创 Java 中线程(二)
Runnable和Thread都没有返回值,如果想要在线程结束后有返回值,需要Callable接口。Callable是个支持泛型的接口,我们是实现这个接口的时候可以指定返回值得类型。 其实我们还需要一个支持取得返回值得方式,并且实现了Runnable的类。这个类就是FutureTask。FutureTask就是一个Runnable,因此可以调用Thread的start()方法运行它。 例子:pa
2017-06-27 13:18:11
330
原创 Java 中线程(一)
线程是程序执行流的最小单元。Java中创建线程的方式,1)实现Ruuable接口,2)继承Thread类,3)实现Callable接口 一个例子:package thread;import java.util.concurrent.Callable;import java.util.concurrent.FutureTask;public class TThread { public
2017-06-27 13:17:51
205
原创 Java 中的enum
枚举应该是一个有限集合组成的一个对象一个简单的例子:public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }枚举最简单的就是当常量用,但是比常量安全,最常用的就是在switch里面。 其实枚举可以当个普通的类使用,可以有变量,方法等。 当普通类使用的时候,其中有几个注意
2017-06-27 13:17:24
296
原创 Java 中的IO
Java Old IOJava IO是通过Stream 以block方式读取数据的。其中包括字节和字符Stream. 下面一个小例子,分别用字节和字符流来读取文件。import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream
2017-06-27 13:16:54
230
原创 Java Object和Class
Java Object: 拥有一组行为和状态。 Java Class: 描述Object的行为和状态。 通过Class对象,我们能获得Object对象的变量和方法。 下面一个例子:package ttttt;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.Modi
2017-06-27 13:16:21
394
原创 Java 动态代理
A dynamic proxy class is a class that implements a list of interfaces specified at runtime such that a method invocation through one of the interfaces on an instance of the class will be encoded and di
2017-06-27 13:15:49
230
原创 怎么继承一个非静态的内部类?
如果某些情况下,如要继承一个内部类,现实中可能不会有这种要求。 一个包含内部类的类class WithInner { class Inner { }}我们这样直接继承好像会有错误的。/错误信息://Multiple markers at this line//- No enclosing instance of type WithInner is available du
2017-06-27 13:15:17
307
原创 Java异常
异常:程序出现了没有足够信息能继续执行,或者不能按照正常逻辑执行 Java 异常机制,使得我们能在某个地方集中处理要解决的问题。异常种类:检查时异常,运行时异常 检查时异常,我们必须catch或者抛出,运行时异常不用显示捕捉。 常见运行时异常有:ClassCastException, DateTimeParseException, IllegalArgumentException, Ar
2017-06-27 13:14:47
161
原创 Java(1.8)集合类中的HashMap
Java(1.8)集合类中的HashMap Java(1.8) 集合中的LinkedList Java(1.8) 集合中的ArrayList Map接口没有继承任何其他接口,它存储的是Key-Value对,并且Key不能重复。 下面就是Map的所有接口: 在HashMap 内部每个Key-Value对都用一个Node对象存储。在Node中保持了key的hash值,Key,Value
2017-06-27 13:13:27
266
原创 Java(1.8)集合中的HashSet
Java(1.8) 集合中的LinkedList Java(1.8) 集合中的ArrayList Java(1.8)集合类中的HashMapSet 接口也实现了Collection接口,Set中可以存储不重复的元素。 下面看看其中一个实现类HashSet的底层实现原理: HashSet底层用HashMap来实现的,Set的元素存储到Map的key, Value 则存储一个相同的对
2017-06-27 13:12:51
236
原创 Java(1.8) 集合中的LinkedList
java(1.8)集合中的HashSet Java(1.8) 集合中的ArrayList Java(1.8)集合类中的HashMapLinkedList是通过链表形式来存储的,因此插入,删除元素比较快,查找速度没有ArrayList快。 内部用一个Node对象来保持元素的值和上下的Node的引用 private static class Node<E> { E
2017-06-27 13:12:17
230
原创 Java(1.8)集合中的ArrayList
java(1.8)集合中的HashSet Java(1.8)集合类中的HashMap Java(1.8) 集合中的LinkedListList 接口继承于Collection 接口,Collection接口又继承与Iterable接口。 List的所有接口如下: 查看源码,分析ArrayList实现最常用的add 和get, remove方法. ArrayList 的底层实现是用
2017-06-27 13:11:32
360
原创 Java内部类
前面写过java内部类 查看java内部类应该是为了隐藏和组织的模式。内部类(非静态)有个对外部类的隐藏引用,可以直接访问外部类的属性和方法。 当内部类可以向上转型为接口的时候,可以定义一个private的内部类来完全隐藏实现细节。interface Printer { void print();}class Office { String printerIP = "127.0
2017-06-27 13:10:36
204
原创 Java 接口
接口就是一组没有方法体的方法定义的组合接口定义方式:public interface IInterface{ public void method1(); public void method2();}接口是对事物的抽象,接口和实现类是is like a关系,接口和实现类可以本质的概念上不完全一致,可以把接口看成一个契约。比如有个Sleep interface:publi
2017-06-13 14:02:55
181
原创 Java 构造方法中的多态
类的实例化顺序是先实例化父类在实例化子类,也就是先调用父类的构造方法,再调用子类的构造方法,如果在构造方法中调用其他多态方法,可能导致不正确的结果。下面的例子,在父类中调用study()方法的时候,会有点问题class Person { public void study() { System.out.println("I am studing!"); }
2017-06-13 14:02:52
760
原创 Java 多态的例子
多态就是通过继承和动态绑定来决定程序使用哪个实现.一个简单的例子。interface Animal { public void eat();}class Whale extends SeaAnimal { int age = 20; @Override public void eat() { System.out.println("Wha
2017-06-13 14:02:49
394
原创 Java 继承
Java中继承,就是子类拥有父类的,非private的变量和方法。注意点不能重写final 方法单继承,但可以实现多个接口初始化顺序,先父类再子类一个例子,可以看到实例化的顺序class Bird { public Bird() { super(); } public Bird(int i) { System.out.pr
2017-06-13 14:02:46
125
原创 Java变量的初始化
Java变量默认值Java变量的初始化,如果不赋值,将会有个默认值,对于基本类型,比如int,long是0, boolean 是false等,引用类型如果不设置,将会是null.package variable.initialize;public class Test { int intAge; short shortAge; long longAge; fl
2017-06-13 14:02:43
351
原创 HTTPS加密传输过程
HTTPS(Hyper Text Transfer Protocol Secure)安全的超文本传输协议HTTPS其实是在HTTP基础上加上SSL/TLS协议,SSL/TLS是建立在TCP之上,他们使用一种非对称的加密算法。以SSL为例,说明SSL怎么建立的:Client 和Server建立了TCP连接后,Client向服务器发送包含最大支持SSL的版本,加密算法族等信息,Server收到消
2017-06-13 14:02:40
764
原创 Log4j中为什么设计isDebugEnabled()方法
先看下面的代码,在真正执行logger.debug()之前,进行了logger.isDebugEnabled()的判断,既然log4j.properties已经配置了log level为debug, 为什么还需要这个判断?if (logger.isDebugEnabled()) { logger.debug("Entry number: " + i + " is " + entry[i]
2017-06-13 14:02:36
994
原创 面试后学习 -- Java内部类
面试问到的一个Java内部类的问题,今天总结下。如果我理解有误,请指正,谢谢。一个简单的内部类:package innerclazz;public class OuterClazz { class InnerClazz{//inner class }}Java为什么用内部类提供一种方法把只在一个地方用的类逻辑分组增强封装(可以理解一种类似“多重继承”)容易维
2017-06-13 14:02:33
249
原创 Restful中的get, put 和post
1, getget是获取资源,get是安全并且是幂等的,意思是用相同的url和参数,获取的结果是一样的。如果正确获得资源,应该返回200 OK 状态码2, putput 可以创建和更新资源,如果在客户端知道资源ID,可以用put创建资源,put是不安全的,但是是幂等的,多次创建或者更新一个资源的最终结果应该一样。如果是创建资源成功应该返回201 Created状态码。如果是更新应该返回200
2017-06-13 14:02:30
966
原创 面试后学习 -- Java GC机制
1. jvm怎么决定一个对象可以回收①. 计数法每个对象实例化的时候count 就加一, 删除对象引用的时候减一,这个方法的有点就是速度很快,但是这个方法有个问题。比如:class A{B b;}class B{A a;}A clazzA = new A();B clazzB = new B();clazzA.b=clazzB;clazzB.a=clazzA;//即使把cl
2017-06-13 14:02:27
1509
原创 自己写的简单HttpClient
前几天写了个多线程通过HTTP下载文件的小程序,其中简单写了个HttpClient. 源码:GitHub1 定义一个抽象BaseHttpMethod类public abstract class BaseHttpMethod { protected static String HEAD = "HEAD"; protected static String GET = "GET";
2017-06-13 14:02:24
416
原创 JAVA多线程下载,断点续传(HTTP)
HTTP的断点续传其实很简单,就是通过设置Header (RANGE: bytes=XXXXXXXX- )1, 通常的HTTP请求public static void main(String[] args) { try { URL url = new URL("http://mirrors.cnnic.cn/apache/abdera/1.1.3/ap
2017-06-13 14:02:21
397
原创 我的第一个开源App(彩票开奖查询)
源码:https://github.com/feimengwang/lottery这个App其实2年前就写好了,那时候是抓取的网页里面的内容,也没有用第三方开源框架,写的也比较乱,最近没事的时候发现360有接口,返回JSON数据,所以重写了一次,这次也有很多不足,正在修正中。。。。用到的第三方库 compile 'com.google.code.gson:gson:2.6.2' c
2017-06-13 14:02:17
4474
1
原创 Toolbar 设置OverFlow 图片
一种方法设置Toolbar 的Theme参照:http://www.jianshu.com/p/79604c3ddcae另一种就是直接在代码中设置toolbar.setOverflowIcon( ContextCompat.getDrawable(this,R.mipmap.ic_menu_more_overflow));
2017-06-13 14:02:14
567
原创 Java参数传递方式
Everything in Java are passed-by value.基本类型的传递方式基本类型是值传递,传递的是值得copy, 对于方法内的任何改变,都不会反映到原始的变量中。对象的传递方式对象传递的是对象的内存地址 一个小例子,仔细体会下,就明白了:public class Test { class Dog { private int age;
2017-06-12 16:35:01
199
原创 PHP使用出现 Fatal error: Class 'SQLite3' not found
<?php//phpinfo();/** * Simple example of extending the SQLite3 class and changing the __construct * parameters, then using the open method to initialize the DB. */class MyDB extends SQLite3
2016-05-06 14:10:32
5209
1
原创 Android旋转屏幕不销毁Activity
要在AndroidManifest.xml配置Activityandroid:configChanges="keyboardHidden|orientation|screenSize"可以在Activity 中监听屏幕的旋转 @Override public void onConfigurationChanged(Configuration newConfig) {
2016-05-04 14:44:58
2601
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人