
java
zhangchaochao
拔掉脚上的刺,向新的方向起航
展开
-
Java程序员应该了解的10个面向对象设计原则
面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton、Decorator、Observer这样的设计模式,而不重视面向对象的分析和设计。甚至还有经验丰富的Java程序员没有听说过OOPS和SOLID设计原则,他们根本不知道设计原则的好处,也不知道如何依照这些原则来进行编程转载 2014-02-09 19:07:56 · 595 阅读 · 0 评论 -
同步代码块,同步函数,静态同步函数的锁对象
同步代码块:可以自己任意指定同步锁对象同步函数:同步函数的锁对象是固定的this对象静态同步函数:静态同步函数的锁对象是该函数所属的类的字节码文件对象以上可以自己通过代码验证。原创 2014-01-28 10:27:04 · 1250 阅读 · 0 评论 -
多线程安全问题的解决方法一
用同步代码块来解决线程的同步问题1. 同步代码块的格式synchronized(Object obj) {需要被同步的代码}2. 同步代码块的好处可以解决线程的安全问题3. 同步代码块的弊端相对降低了效率,因为同步外线程都要判断同步锁4. 同步的前提必须有多线程,同时多个线程使用的是同一把锁5. 代码示例class T原创 2014-01-27 23:53:58 · 728 阅读 · 0 评论 -
创建线程的方法二
创建线程方法二1. 实现Runnable接口,并实现接口中的run方法;2. 用Thread的带Thread(Runnable r)构造方法创建线程;/*实现runnable接口*/class MyRunnable implements Runnable{ public void run() { System.out.println(Thread.currentThre原创 2014-01-27 22:47:03 · 511 阅读 · 0 评论 -
线程的状态
线程的状态:1. 创建2. 运行3. 冻结4. 临时阻塞状态5.消亡线程的状态转移:原创 2014-01-27 22:33:31 · 453 阅读 · 0 评论 -
jdk中Condition示例代码
/*需求:作为一个示例,假定有一个绑定的缓冲区,它支持 put 和 take 方法。如果试图在空的缓冲区上执行 take 操作,则在某一个项变得可用之前,线程将一直阻塞;如果试图在满的缓冲区上执行 put 操作,则在有空间变得可用之前,线程将一直阻塞。我们喜欢在单独的等待 set 中保存 put 线程和 take 线程,这样就可以在缓冲区中的项或空间变得可用时利用最佳规划,一次只通知原创 2014-01-28 19:52:44 · 651 阅读 · 0 评论 -
死锁
多线程的死锁示例/*需求: 写一个死锁程序思路: 同步锁的嵌套容易产生死锁 假设有两把锁A,B,死锁的产生是这样的,A锁的代码块中有B锁,B锁的代码块中有A锁步骤: 1. 创建任务 2. 创建线程 3. 开启线程*//*锁对象封装*/class LockObject{ public static final Object locka = new Object(原创 2014-01-28 10:59:43 · 475 阅读 · 0 评论 -
多线程的安全问题
多线程安全问题产生的原因1. 产生的前提1> 多个线程操作共享的数据;2> 操作共享数据的代码超过1条;2. 产生的原因当一个线程在执行操作共享数据的多条代码的过程中,其它线程也参与了运算,就会导致线程安全问题产生。class TicketRunnable implements Runnable{ private int num = 100; public void原创 2014-01-27 23:41:43 · 611 阅读 · 0 评论 -
线程的创建方式一
线程的创建方式一:1. 继承Thread类;2.覆写run方法。/*继承Thread类*/class MyThread extends Thread{ //覆写run方法 public void run() { System.out.println(Thread.currentThread().getName() + ".....run"); }}clas原创 2014-01-27 21:53:56 · 645 阅读 · 0 评论 -
css与html的结合
1. style属性结合方式<!-- 结合方式一: 利用标签中的style属性来改变每个标签的显示样式; 优点:方式比较灵活. 缺点:对多个相同标签的同一样式定义比较麻烦. 适合局部修改.-->style="background-color:#0F5; font-size:24px; color:#FFA">----结合方式一------2.styl原创 2014-01-19 20:04:59 · 627 阅读 · 0 评论 -
线程中的小知识点
wait和sleep的区别:1. wait可以指定时间也可以不指定时间 sleep必须指定时间2.同步中对cpu的执行权和锁的处理不同 wait:释放执行权,释放锁; sleep:释放执行权,不释放锁;线程的停止通过结束线程的run方法来实现线程的停止1. 通过标记结束run方法2. 使用interrupt方法将线程从冻结状态恢复到运行状态,让线程具原创 2014-01-28 19:49:10 · 493 阅读 · 0 评论 -
2.8.16与10进制间的关系
1. 10进制123,456,789:123,456,789 =1 * 10^8 + 2 * 10^7 + 3 * 10^6 + 4 * 10^5 + 5 * 10^4 + 6 * 10^3 + 7 * 10^2 + 8 * 10^1 + 9 * 10^0;2. 2进制0011-1101:61 = 0 * 2^7 + 0 * 2^6 + 1 *原创 2014-01-20 20:01:09 · 888 阅读 · 0 评论 -
Java 内存分配全面浅析
原文链接:http://blog.youkuaiyun.com/shimiso/article/details/8595564本文将由浅入深详细介绍Java内存分配的原理,以帮助新手更轻松的学习Java。这类文章网上有很多,但大多比较零碎。本文从认知过程角度出发,将带给读者一个系统的介绍。进入正题前首先要知道的是Java程序运行在JVM(Java Virtual Machine,Java虚拟机)上转载 2014-02-04 23:37:19 · 512 阅读 · 0 评论 -
java反射笔记五
利用反射调用main方法package com.zhangchao;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class ReflectionArray { public static void main(String[] args) {原创 2014-02-03 13:00:05 · 425 阅读 · 0 评论 -
java反射笔记四
类:java.lang.reflect.Array利用数组的反射实现数组的可变长度/** *按10%的速度增长 * @param array * @return */ public static Object arrayGrow(Object array) { Class clazz = array.getClass(); if(!clazz.isArray()原创 2014-02-03 12:53:20 · 628 阅读 · 0 评论 -
深入理解Java HelloWorld
原文链接: programcreek 翻译: ImportNew.com - 黄飞飞译文链接: http://www.importnew.com/8943.htmlHelloWorld是每个Java程序员都知道的程序。它很简单,但是简单的开始可以引导你去深入了解更复杂的东西。这篇文章将探究从这个HelloWorld这个简单程序中可以学到的东西。如果你对HelloWorld有独到的理转载 2014-02-03 13:04:27 · 489 阅读 · 0 评论 -
java反射笔记三
在运行时使用反射分析对象package com.zhangchao.bean;public class Person { private String name; private int age; public Person(String name, int age) { super(); this.name = name; this.age = age; } p原创 2014-02-02 20:17:24 · 606 阅读 · 0 评论 -
java中的基本数据类型
整形类型:1. byte (1字节)盛1两饭的碗2. short (2字节)盛2两饭的碗3. int (4字节)盛4两饭的碗4. long (8字节)盛8两饭的碗简单记忆:byte是盛1两饭的碗,short是2两的碗,int是4两的碗,long是8两的碗,从这简单记忆中就能明白这几个类型间转换的关系。例如,将1两碗里的饭倒入2两的碗中是没有问题的,而将2两碗原创 2014-01-20 21:24:05 · 583 阅读 · 0 评论 -
java中的变量
什么是变量?1 变量是内存中的一个存储区域;2 变量的三要素:1> 类型 2> 名称3> 数据为什么要定义变量?用来不断的存放同一类型的常量,并可以重复使用。什么时候使用变量?当数据不确定的时候使用变量。变量的作用范围:{}原创 2014-01-20 20:13:46 · 521 阅读 · 0 评论 -
java反射笔记二
三个重要的类:1. Constructor提供关于类的单个构造方法的信息及对它访问权限。2. Field提供有关类或接口的单个字段信息及对它的访问权限,反射的字段可能是一个类(静态)字段或者是一个实例对象字段。3. Method提供有关类或接口的单个方法信息及如何访问该方法,所反映的方法是一个类方法或实例方法(包括抽象方法)。原创 2014-02-02 16:08:12 · 574 阅读 · 0 评论 -
Java反射笔记一
java的反射: 具有分析类的能力,并且可以动态获取类中的所有信息;Class类:在程序运行期间,java运行时系统始终为所有的对象维护一个被称为运行时的类型标识。这个信息保存着每个对象所属的类路径,java虚拟机利用运行时信息执行相应的方法。Class类对象的示例化:package com.zhangchao;import com.zhangcha原创 2014-02-02 13:50:49 · 517 阅读 · 0 评论 -
生产者消费者示例三
是用jdk1.5新特性,Lock接口处理线程间通信问题/*需求: 多生产,多消费在jdk1.5以后的处理方法思路:步骤: */import java.util.concurrent.locks.*;class Resource{ private String name; private int num = 1; private boolean flag = fals原创 2014-01-28 18:54:00 · 557 阅读 · 0 评论 -
生产者消费者示例二
/*需求: 多生产,多消费思路:步骤:*/class Resource{ private String name; private int num = 1; private boolean flag; public synchronized void set(String name) { //对于多生产者,此处需要用while来判断,如果不用while的话,当线程被原创 2014-01-28 18:52:09 · 546 阅读 · 0 评论 -
Java Thread 多线程同步、锁、通信
本文转自: http://www.cnblogs.com/hoojo/archive/2011/05/05/2038101.html Java Thread 多线程同步、锁、通信线程同步、同步锁、死锁线程通信线程组和未处理异常Callable和Future12、线程同步 当多个线程访问同一个数据时,非常容易出现线程安全问题。这时候就需要转载 2014-01-28 13:15:07 · 584 阅读 · 0 评论 -
对象的实例化过程
对象的实例化过程:1. JVM先找到指定的类的字节码文件,并加载进内存;2. 在内存中开辟一段空间,分配内存地址;3. 在对象的内存空间中对对象的属性进行默认初始化;4. 如果属性有显示初始化时,开始对属性显示初始化;5. 调用对应的构造函数进行初始化;6. 初始化完毕后,该对象实例化完成;class ClassA{ int num = 9; String cla原创 2014-01-26 12:40:29 · 872 阅读 · 0 评论 -
static关键字
static的特点:1. static是一个修饰符,用来修饰成员(成员变量,成员方法);2. static修饰的成员被所有对象共享;3. static修饰的成员优先于对象的存在,因为static成员随着类的加载而加载;4. 增加了一种调用方式,类名.成员;5. static修饰的是共享数据,而对象中存储的是对象特有的数据。成员变量与static成员变量的区别1. 变量的原创 2014-01-26 00:29:14 · 504 阅读 · 0 评论 -
子类对象的实例化过程
子类对象的实例化过程:1.JVM先找指定的类字节码并加载进内存,并会先加载父类的字节码进内存;2.在堆内开辟内存空间,分配内存地址;3.在对象的内存空间中对对象的属性进行默认初始化;4.调用对应的构造方法初始化;5.在构造方法中第一行先调用父类的构造方法对父类进行初始化;(如果不显示指定父类构造方法,默认为super());6. 父类初始化完毕后,再对子类属性进行显式初始化原创 2014-01-26 13:39:03 · 4392 阅读 · 0 评论 -
单例设计模式
/*单例设计模式: 保证内存中只有一个类对象的存在。场景: 多个应用程序使用同一配置信息对象时,就需要保证对象在内存中的唯一性如何保证对象的唯一性?思路: 1. 不允许其他程序用new来创建对象; 2. 在该类中创建一个本类对象; 3. 对外提供一个方法,让其它程序通过该方法来获取创建好的对象;步骤: 1. 将构造函数私有化 2. 通过new创建一个本类对象 3. 定义一原创 2014-01-25 23:01:17 · 466 阅读 · 0 评论 -
java中面向对象的思想
面向过程:这里强调的是过程,从角色上来说的话,面向过程是执行者;面向对象;这里强调的是对象,对象其实就是数据实体,从角色上来说面向对象是指挥者;例如:你要买一部手机面向过程:你要查看手机的品牌,参数,os,价格等;面向对象:你只需要找一专业懂的人告诉他你要买多钱价位的手机,就ok了,至于品牌,参数,os,价格等都由该专业人士完成。面向对象思想的特点:1. 一种常见的原创 2014-01-25 00:56:45 · 522 阅读 · 0 评论 -
java中一维数组学习笔记
数组的定义:同一种类型数据的集合,其实数组本身就是一个容器。1. 一维数组定义格式:1> 数据类型[] 数组名 = new [元素个数或者数组的长度];int[] array = new int[1,2,3];int[] array = new int[3];※JVM内存的划分1> 寄存器2> 本地方法区3> 方法区4> 栈内存: 存储的都是局部变量,当变原创 2014-01-23 23:26:35 · 700 阅读 · 0 评论 -
java中数组的常见操作
数组的常见操作:1.遍历int[] array = {1,23,5,2323,43,56};for(iint x = 0; x < array.length; x++){ System.out.println("array["+x+"] =" + "["+ array[x] + "]");}2.最值 /* max和min分别用了记录索引和值的不同方式,具体使用哪原创 2014-01-24 02:05:56 · 719 阅读 · 0 评论 -
java中的函数
什么是函数?定义在类中的一段可以独立运行的小程序。为什么要使用函数?对代码的封装,提高代码的复用性。如何定义函数?定义函数时需要明确2点:1. 明确该函数的运算结果是什么;//明确函数的返回值2. 明确该函数实现过程是否需要未知内容参与运算。//明确函数的参数列表函数的重载函数重载的特征:1. 同一个类中;2. 同名;3. 参数个数不同或者类型不同;原创 2014-01-21 22:06:58 · 501 阅读 · 0 评论 -
java小知识点
局部代码块局部代码块可以用来优化代码,原因是变量的作用域,对于一些只在局部使用的变量可以将其定义在局部代码块中。变量使用需要注意的两点:1. 变量的初始化;2. 变量的作用域。for循环的嵌套以2中嵌套为例:1. 外循环控制的是行;2. 内循环控制的是列;原创 2014-01-21 22:15:57 · 467 阅读 · 0 评论 -
封装
什么是封装?隐藏对象的属性及实现的具体细节,仅对外提供公共的访问方法。封装的优点:1.提高安全性;(直接对外暴露属性,存在安全问题,因为使用者不知道属性的限定条件)2.提高代码的复用性;(封装好以便再次使用)3.隔离变化。(对于使用者来说不必关心内部实现有何变化)封装的原则:1. 将不需要对外提供的内容都隐藏;2. 通常都将属性隐藏起来,对外提供公共的访问方法。原创 2014-01-26 10:14:43 · 593 阅读 · 0 评论 -
java中的二维数组
二维数组的定义格式原创 2014-01-24 22:13:53 · 445 阅读 · 0 评论 -
多线程安全问题解决方法二
多线程安全解决方法二同步函数/*线程安全解决方法一:同步代码块*//*class TicketRunnable implements Runnable{ private int num = 400; public void run() { while(true) { //加入同步代码块,解决线程安全问题 synchronized(this) {原创 2014-01-28 09:36:52 · 689 阅读 · 0 评论 -
Java反射教程
原文链接: Programcreek 翻译: ImportNew.com - 薄荷脑译文链接: http://www.importnew.com/9078.html本文由 ImportNew - 薄荷脑 翻译自 Programcreek。如需转载本文,请先参见文章末尾处的转载要求。ImportNew注:如果你也对Java技术翻译分享感兴趣,欢迎加入我们的 Java开发 小组。参转载 2014-01-28 22:39:51 · 453 阅读 · 0 评论 -
生产者消费者示例一
/*需求: 单生产单消费思路: 一个线程用来生产,一个线程用来消费步骤: 1. 创建资源对象 2. 创建线程任务 3. 创建一个生产线程,一个消费线程 4. 开启线程*//*描述资源*/class Resource{ private String name; private int num = 1; private boolean flag = false;原创 2014-01-28 18:51:16 · 652 阅读 · 0 评论 -
“上帝”-Object中常用的方法
Object中通常需要被子类覆盖的方法:1. equals默认实现是判断两个对象的引用是否相同,如果默认处理不能满足子类需求可以对其覆写,加入子类中特有的属性判断;注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。2. hashCode hashCode 的常规协定是:原创 2014-01-27 13:40:10 · 611 阅读 · 0 评论 -
多继承
java是单继承,多实现,但是接口是可以多继承的interface A{}interface B{}/*这是可以的*/interface C extends A,B{}原创 2014-01-27 09:25:43 · 408 阅读 · 0 评论