Java核心-基础
超超级钢铁侠
每天进步一点点
展开
-
双缓冲解决Java绘图严重闪烁
在编写一个Java小游戏时,需要画出一个坦克,于是在坦克这个类中创建了一个内部类实现Runnable接口来启动一个线程,在线程中调用repaint()方法不断重画,线程的睡眠时间设为50毫秒,代码如下:结果发现,运行时闪烁现象特别明显,更改睡眠时间为100秒,1000秒也不行,延迟非常严重,而且仍然闪烁。网上查到原来是因为repaint()不断调用paint()方法引起...原创 2015-12-27 00:20:56 · 2017 阅读 · 2 评论 -
用Java连接数据库MySQL
为了有效地学习数据库,我决定将MySQL和Java结合在一起学习,单独学习数据库挺无聊的。 如果您已经像我一样电脑上配置好了eclipse,操作就很简单了。首先下载驱动mysql-connector-java-5.1.40,解压后把mysql-connector-java-5.1.40-bin拷贝到目录……\Java\jdk1.8.0_111\jre\lib\ext下就可以了。首先在数据库中原创 2017-02-26 21:58:36 · 341 阅读 · 0 评论 -
JVM(1)-参数配置技巧
《实战Java虚拟机 JVM故障诊断与性能优化》1.新生代的大小一般设置为整个堆空间的1/3到1/4左右。2.尽可能将对象预留在新生代,减少老年代GC的次数。原创 2017-02-25 12:03:00 · 637 阅读 · 0 评论 -
Callable、Future、FutureTask接口初探
参考文章Java中的Runnable、Callable、Future、FutureTask的区别与示例转载 2017-02-25 21:12:39 · 580 阅读 · 0 评论 -
Java实现文件复制的两种方式
import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.nio.ByteBuffer;import java.nio.channel原创 2017-03-04 17:45:56 · 778 阅读 · 0 评论 -
Java程序员技能树
要加油了!原创 2017-02-19 19:57:49 · 13139 阅读 · 6 评论 -
JDK源码阅读-ArrayList
1.在使用Arraylist时,经常要对它进行初始化工作,在使用add()方法增加新的元素时,如果要增加的数据量很大,应该使用ensureCapacity()方法,该方法的作用是预先设置Arraylist的大小,这样可以大大提高初始化速度。JDK文档描述:An application can increase the capacity of an ArrayList instance before原创 2017-02-27 21:58:53 · 293 阅读 · 0 评论 -
JVM(2)-JVM原理
1.内存模型转载 2017-02-26 10:35:21 · 577 阅读 · 0 评论 -
Thinking in Java(10)-Java IO
1.一个目录列表器的实现package interfaces.classprocessor;import java.io.*;public class DirList { public static void main(String[] args) { // TODO Auto-generated method stub try{ F原创 2017-01-17 12:25:25 · 276 阅读 · 0 评论 -
源码面前,原形毕露之ArrayList源码阅读
1.类的定义:public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, java.io.Serializable可以看出,ArrayList可以序列化,使用clone()方法可进行浅层复制。2.数据成员的声明:private static final long seri原创 2017-04-07 00:25:14 · 291 阅读 · 0 评论 -
源码面前,原形毕露之String源码阅读
1.String位final类,不可继承,其声明为 public final class String implements java.io.Serializable, Comparable<String>, CharSequence2.方法public int codePointAt(int index) 直接返回索引下的char元素的Unicode code point,如Strin原创 2017-04-03 12:05:39 · 402 阅读 · 0 评论 -
一步一步理解Java NIO(上)
Java NIO简介Java NIO是从Java1.4版本开始引入的一个新的IO API,可以代替标准的Java IO API。NIO与原来的IO有同样的作用和目的,但是使用方式完全不同,NIO是面向缓冲区的、基于通道的IO操作,NIO对文件的读写更加高效。通道和缓冲区Java NIO的核心在于通道(Channel)和缓冲区(Buffer)。通道表示IO设备(如文件、套接字等)的连接,Buffer用原创 2017-07-06 23:40:14 · 442 阅读 · 0 评论 -
Java多线程-线程八锁
所有的非静态同步方法用的都是同一把锁,即实例对象本身,或者说this对象,如果一个实例对象的非静态同步方法获取锁后,该实例对象的其他非静态同步方法必须等待获取锁的方法释放锁后才能获取锁。如果别的对象的非静态同步方法与该实例对象的非静态同步方法获取不同的锁,则不需要等待。 所有的静态同步方法用的也是同一把锁,即类对象本身,所以静态同步方法与非静态同步方法之间是不会有竞态条件的,但是一个静态同步方法获原创 2017-07-06 20:30:55 · 3790 阅读 · 0 评论 -
Java多线程-线程按序交替
线程按序交替编写一个程序,开启三个线程,这三个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出的结果必须按顺序显示,如:ABCABCABC……依次递归。使用Condition进行线程间通信即可(也可以使用wait()和notify()):package JavaThread;import java.util.concurrent.locks.Condition;impo原创 2017-07-06 18:38:29 · 889 阅读 · 0 评论 -
聊聊并发-Java中的Copy-On-Write容器(转载)
Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。C转载 2017-05-28 16:59:22 · 452 阅读 · 0 评论 -
Java多线程--synchronized ,Condition,BlockingQueue应用实例
创建线程有两种方法。继承Thread类或者实现runnable接口。 下面用Thread简单创建两个线程:public class Thread1 extends Thread { public void run(){ System.out.println(this.getName()); } public static void main(String[]原创 2016-07-28 21:38:02 · 355 阅读 · 0 评论 -
使用读写锁设计缓存系统
如何用简短的代码设计一个Cache呢,简单的HashMap设计比较简单,考虑到并发性,如果使用synchronize关键字可能会降低系统性能,这时我们可以使用读写锁设计一个比synchronize方法更加优秀的Cache系统。package CatcheTest;import java.util.HashMap;import java.util.Map;import java.util.conc原创 2017-05-27 22:02:02 · 475 阅读 · 0 评论 -
Effective Java----1
1.Builder 模式 当类的构造函数有多个参数时,针对不同数量的构造函数,构造函数的编写显得很麻烦,可以选择使用Javabean模式编写,按照javabean的写法,私有化成员变量, 私有构造方法 ,通过setter和getter来设置和获取值 ,这种构造的缺点是传入的参数不好检测,例如有些非空的数据等,这时采用Builder模式来编写会比较方便,示例如下://Student .javapa原创 2017-03-17 16:56:32 · 362 阅读 · 0 评论 -
Effective Java----2
1.equals方法以及HashCode方法 重写equals方法满足如下的约定 (1) 自反性(feflexive) (2) 对称性(symmetric) (3) 传递性(transitive) (4) 一致性(consistent)这几个特性都比较容易理解,违反其中任何一条,都将导致重写的equals方法不能正常工作,具体实施起来,即要按如下步骤重写equals方法:(1) 使用==操原创 2017-03-20 21:51:08 · 332 阅读 · 0 评论 -
Thinking in Java(9)-closures and callbacks
对closures and callbacks不是很理解,先记下来慢慢理解QAQ:package interfaces.classprocessor;interface Incrementable{ void increment();}class Callee1 implements Incrementable { private int i = 0; public v原创 2016-12-19 17:49:53 · 445 阅读 · 1 评论 -
Thinking in Java(8)-inheritance and cleanup
大家都知道,在继承中,不共享变量时,Java类对象initialize的顺序和cleanup的顺序相反,但是共享变量时情况就比较复杂了,这时使用一个final变量跟踪引用是一个好方法,可以清楚地看到对象的initialize和cleanup情况:class Shared{ private int refcount = 0; private static long counter =原创 2016-12-14 16:50:20 · 384 阅读 · 0 评论 -
HashMap简单复习
在实验楼上敲了一个简单的例子复习一下HashMap:package com.shiyanlou.course;import java.util.*;public class PhoneBookByMap { private static HashMap<String,String> initPhoneBook(HashMap<String,String> phonebook) {原创 2016-10-11 21:31:53 · 282 阅读 · 0 评论 -
Thinking in Java(5)-finalize()和初始化
贴上书中一段代码:public class Book { boolean checkedOut = false; Book(boolean checkOut) { checkedOut = checkOut; } void checkIn() { checkedOut = false; } protec原创 2016-09-07 21:07:03 · 417 阅读 · 0 评论 -
Thinking in Java(4)-Calling constructor from constructors
书里有关在constructor里使用this指针的例子很有意思,记下来public class Flower { int petalCount = 0; String s = "initial value"; Flower(int petals) { petalCount = petals; System.out.println("原创 2016-09-04 20:51:15 · 275 阅读 · 0 评论 -
Thinking in Java(3)
看看Java中的casting会发生什么?把float和double强制转换成int:public class CastingNumbers { public static void main(String[] args) { double above = 0.7,below = 0.4; float fabove = 0.7f,fbelow = 0.4f;原创 2016-07-20 23:45:30 · 337 阅读 · 0 评论 -
Thinking in Java(2)
通过一个小程序看看String operators 的interesting behavior—If an expression begins with a String,then operands that follow must be String(the complier automatically turns a double-quoted sequence of characters in原创 2016-07-20 23:03:17 · 427 阅读 · 0 评论 -
Thinking in Java(1)
以后开始敲《Thinking in Java》,把敲过的代码和心的体会记录下来,作复习之用。 1.调用用一些系统函数。public class ShowProperties { public static void main(String[] args) { System.getProperties().list(System.out); System.out原创 2016-07-08 17:13:24 · 422 阅读 · 0 评论 -
用于学习的APP
iPhone和iPad上很多APP适合用来学习,正在使用的个人觉得好用的有: 百词斩 —-用来背单词(GRE和托福单词) MOJi N1 —-用来背日文N1单词学语法,有例句,例句也有发音,乱序 版会花费6块大洋 语法酷 —-N5~N1的主要语法,方便使用。 七月题库 —-用来刷题,基本都是面试真题,很喜欢July~ 猿圈 —-刷题用原创 2016-07-27 11:53:31 · 862 阅读 · 0 评论 -
Java抽象类和抽象方法简单演示
public class AbstractTest { public static void main(String[] args) { Shepherd shepherd = new Shepherd(); shepherd.eat(); shepherd.run(); Chihuahua chihuahua = new Chih原创 2016-07-23 18:34:46 · 500 阅读 · 0 评论 -
Thinking in Java(8)-final keyword
1.final data The following example shows the basic rules of final keyword:import java.util.*;class Value { int i; public Value(int i) { this.i = i; }}public class FinalData {原创 2016-11-06 20:47:15 · 298 阅读 · 0 评论 -
C/C++/Java 中static对比
术语“static”有段不寻常的历史。起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量在C中static实际通常有两种含义:一是在声明局部变量时,表示该局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量已有的值,就是上一次函数调用结束时的值;另一种含义是表示不能被其他文件访问的全局变量和函数。后来,C++重用了这个关键字,并转载 2016-10-06 10:21:50 · 765 阅读 · 0 评论 -
Thinking in Java(8)-Behavior of Polymorphic methods inside constructors
Look at the following example:class Glyph{ void draw(){ System.out.println("Glyph.draw()"); } Glyph() { System.out.println("Glyph() befor draw()"); draw();转载 2016-12-14 20:43:08 · 233 阅读 · 0 评论 -
牛客网Java笔记(一)
1.下面代码运行结果为:class B extends Object{ static { System.out.println("Load B"); } public B() { System.out.println("Create B"); }}class A extends B{ static原创 2016-12-14 19:32:27 · 470 阅读 · 0 评论 -
BufferedInputStream 和 BufferedOutputStream
类 BufferedInputStream 和 BufferedOutputStream 实现了带缓冲的过滤流,它提供了缓冲机制,把任意的 I/O 流“捆绑”到缓冲流上,可以提高 I/O 流的读取效率。 在初始化时,除了要指定所连接的 I/O 流之外,还可以指定缓冲区的大小。缺省时是用32字节大小的缓冲区;最优的缓冲区大小常依赖于主机操作系统、可使用的内存空间以及机器的配置等;一般缓冲区的大小为内原创 2016-11-14 22:47:44 · 351 阅读 · 0 评论 -
Thinking in Java(7)-Guaranteeing proper cleanup
You can’t know when the garbage collector will be called,or if it will be called. So if you want something cleaned up for the class,you must explicitly write a special method to do it,and make sure tha原创 2016-11-02 16:50:33 · 307 阅读 · 0 评论 -
Thinking in Java(6)-combinning composition and inheritance
一个结合composition 和inheritance的简单例子:class Plate { Plate(int i) { System.out.println("Plate constructor"); }}class DinnerPlate extends Plate { DinnerPlate(int i) { super(i原创 2016-11-02 15:45:39 · 337 阅读 · 0 评论 -
深入理解Java虚拟机-(1)引用计数算法
Java虚拟机原创 2016-10-21 16:20:32 · 1120 阅读 · 0 评论 -
hashmap,concurrenthashmap底层实现和区别
1.线程安全 百度百科:线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。 比如一个 ArrayList 类,在添加一个元素的时候,它可能会有两步来完成:1. 在 Items[原创 2016-11-13 11:19:02 · 2754 阅读 · 0 评论 -
Thinking in Java(6)-private constructors
If you don’t want anyone else to hava access to your class,you can make all the constructors private,thereby preventing anyone but you,inside a static member of the class,from creating an object of tha原创 2016-10-08 15:23:24 · 379 阅读 · 0 评论 -
一步一步理解Java NIO(下)
阻塞与非阻塞IO原创 2017-07-07 16:25:00 · 358 阅读 · 0 评论