编程思想
_iLeGeND
生命不息 奋斗不止
展开
-
枚举实现单例原理
单例的枚举实现在《Effective Java》中有提到,因为其功能完整、使用简洁、无偿地提供了序列化机制、在面对复杂的序列化或者反射攻击时仍然可以绝对防止多次实例化等优点,单元素的枚举类型被作者认为是实现Singleton的最佳方法。其实现非常简单,如下:public enum Singleton { INSTANCE; private Singleton() {}}下面我们用一个枚...转载 2018-07-03 18:58:11 · 762 阅读 · 0 评论 -
面向接口编程与面向实现编程
最近拜读了四人组的经典名作《设计模式 可复用面向对象软件的基础》一书,打算以博客的形式进行笔记与思考书中提到了可复用面向对象设计的原则,其中的第一个原则是:针对接口编程,而不是针对实现编程其实在使用面向对象语言进行编程的时候,经常不经意间就会涉及书中提到的知识,但是一旦用专门的词汇进行描述时,第一反应就是“诶?这是什么意思?看不懂啊”,只有经过反复的阅读与思考,转载 2016-10-18 16:12:04 · 412 阅读 · 0 评论 -
面向接口编程与面向实现编程
目录(?)[+]面向接口编程与面向实现编程最近拜读了四人组的经典名作《设计模式 可复用面向对象软件的基础》一书,打算以博客的形式进行笔记与思考书中提到了可复用面向对象设计的原则,其中的第一个原则是:针对接口编程,而不是针对实现编程其实在使用面向对象语言进行编程的时候,经常不经意间就会涉及书中提到的知识,但是一旦用专门的词汇进行描述时,转载 2016-10-18 16:07:37 · 368 阅读 · 0 评论 -
java中面向接口编程的好处
一、像J2EE中的API规范基本上都是接口,由各应用服务器来实现,比如:WebSphere按照这个接口实现自己的,WebLogic也按照这个接口实现自己的,作为开发者来说我们根本就不用去管谁是怎样实现的,只要按照J2EE的API来写就可以了,根本用不着导入它们的实现包,实际上具体的是由它们自身完成了。接口说白了,也就是定死了一个框,具体的是糊红纸还是糊黑纸我们都用不着去管的,我们只要知转载 2016-10-18 15:20:31 · 337 阅读 · 0 评论 -
总结一下java获取路径几种途径
在写java程序时不可避免要获取文件的路径...总结一下,遗漏的随时补上 1.可以在servlet的init方法里String path = getServletContext().getRealPath("/");这将获取web项目的全路径例如 :E:/eclipseM9/workspace/tree/tree是我web项目的根目录 2.你也可以随时在任意的cla转载 2016-09-25 12:01:31 · 8119 阅读 · 1 评论 -
Java类加载器总结
1.类的加载过程 JVM将类加载过程分为三个步骤:装载(Load),链接(Link)和初始化(Initialize)链接又分为三个步骤,如下图所示:1) 装载:查找并加载类的二进制数据;2)链接:验证:确保被加载类的正确性;准备:为类的静态变量分配内存,并将其初始化为默认值;解析:把类中的符号引用转换为直接引用;3)初始转载 2016-09-21 00:11:41 · 216 阅读 · 0 评论 -
java 适配器
今天看了下Java中的适配器模式,以下就来小做下总结和谈谈感想,以便日后使用。 首先,先来先讲讲适配器。适配就是由“源”到“目标”的适配,而当中链接两者的关系就是适配器。它负责把“源”过度到“目标”。举个简单的例子,比如有一个“源”是一个对象人,他拥有2种技能分别是说日语和说英语,而某个岗位(目标)需要你同时回说日语、英语、和法语,好了,现在我们的任务就是要将人这个“源”适配的这个转载 2016-09-17 23:46:24 · 285 阅读 · 0 评论 -
java包含继承的类中 给各项成员的加载顺序
package startClass;class D {public D() {System.out.println("子类静态 成员 \t 3");}}class DD {public DD() {System.out.println("父类静态 成员\t 2");}}class CC {public CC() {Sys原创 2016-09-03 20:58:23 · 380 阅读 · 0 评论 -
java里字节和字符分别是什么概念,怎么区别
2014-10-27 20:23最佳答案这不光是 Java 的概念,我们知道机器只知道字节,而字符却是语义上的单位,它是有编码的,一个字符可能编码成1个2个甚至3个4个字节。这跟字符集编码有关系,英文字母和数字是单字节,但汉字这些自然语言中的字符是多字节的。一个字节只能表示255个字符,不可能用于全球那么多种自然语言的处理,因此肯定需要多字节的存储方式。当我们在处理转载 2016-09-03 19:37:43 · 663 阅读 · 0 评论 -
Java中native关键字
今日在hibernate源代码中遇到了native关键词,甚是陌生,就查了点资料,对native是什么东西有了那么一点了解,并做一小记。native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中。Java语言本身不能对操作系统底层进行访问和操作,但是可以通过JNI接口调用其他语言来实现对底层的访问。JNI是Java转载 2016-08-24 13:32:23 · 242 阅读 · 0 评论 -
一篇非常经典的文章(面向接口编程)
面向对象设计里有一点大家已基本形成共识,就是面向接口编程,我想大多数人对这个是没有什么觉得需要怀疑的。 问题是在实际的项目开发中我们是怎么体现的呢? 难道就是每一个实现都提供一个接口就了事了?反过来说,你有时候有没有觉得接口是多余的事? 又或者,你仅仅是觉得现在类似spring这样的框架已习惯用接口这种方式而心存当然。 设计模式解析里提到了面向对象设计考虑的几个视转载 2016-10-18 17:16:15 · 279 阅读 · 0 评论 -
java 静态代码块 静态方法区别
(一)Java 静态代码块 静态方法区别一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用比如main方法就必须是静态的 这是程序入口两者的区别就是:静态代码块是自动执转载 2016-10-28 21:54:04 · 322 阅读 · 0 评论 -
关于字符编码,你所需要知道的(ASCII,Unicode,Utf-8,GB2312…)
关于字符编码,你所需要知道的(ASCII,Unicode,Utf-8,GB2312…)其他随笔 UTF-8, 字符集字符编码的问题看似很小,经常被技术人员忽视,但是很容易导致一些莫名其妙的问题。这里总结了一下字符编码的一些普及性的知识,希望对大家有所帮助。还是得从ASCII码说起说到字符编码,不得不说ASCII码的简史。计算机一开始发明的时候是用来解决数字计算的问题,后来人们发现,计算机还可以做更...转载 2018-06-05 09:20:11 · 327 阅读 · 0 评论 -
java 强 软 弱 虚 引用
强引用:只要引用存在,垃圾回收器永远不会回收Object obj = new Object();//可直接通过obj取得对应的对象 如obj.equels(new Object());而这样 obj对象对后面new Object的一个强引用,只有当obj这个引用被释放之后,对象才会被释放掉,这也是我们经常所用到的编码形式。软引用:非必须引用,内存溢出之前进行回收,可以通过以下代码实现Object转载 2018-01-24 11:30:54 · 285 阅读 · 0 评论 -
如何理解SOA
Web服务(Web Services)在很多人眼里还是个十分神秘的概念,究其根源,我想主要是由于Web服务被宣传得很多,但实际应用却鲜见,给人一种很复杂和难以理解的感觉。另外,Web服务是基于XML的,不少人对XML本身也缺乏理解,虽然他们可能每天都在写XML格式的配置文件。提到Web服务的起源就一定要先说一说SOA(面向服务的体系结构),和很多具有划时代意义的软件技术一样,SOA的出现根本上转载 2017-02-17 21:12:09 · 324 阅读 · 0 评论 -
java中的“宏定义”
宏定义经常出现在在C/C++代码中,以“#define **” 的形式出现。Java中也有“宏变量”,不过是另一种形式。final是java中的一个关键字,用来修饰类、成员变量、局部变量、方法,表示不可变。当final修饰一个变量时,已经为该变量指定了初始值,那么这个变量在编译时就可以确定下来,那么这个final变量实质上就是一个“宏变量”,编译器会把程序中所有用到该变量的地方替换成该转载 2016-11-16 16:29:45 · 11869 阅读 · 5 评论 -
Java动态编程初探——Javassist
最近需要通过配置生成代码,减少重复编码和维护成本。用到了一些动态的特性,和大家分享下心得。我们常用到的动态特性主要是反射,在运行时查找对象属性、方法,修改作用域,通过方法名称调用方法等。在线的应用不会频繁使用反射,因为反射的性能开销较大。其实还有一种和反射一样强大的特性,但是开销却很低,它就是Javassit。Javassit其实就是一个二方包,提供了运行时操作Java字节码的方法。大家都转载 2016-10-29 22:51:26 · 250 阅读 · 0 评论 -
cglib动态代理介绍(二)
1.CGLIB包的介绍代理为控制要访问的目标对象提供了一种途径。当访问对象时,它引入了一个间接的层。JDK自从1.3版本开始,就引入了动态代理,并且经常被用来动态地创 建代理。JDK的动态代理用起来非常简单,当它有一个限制,就是使用动态代理的对象必须实现一个或多个接口。如果想代理没有实现接口的继承的类,该怎么 办?现在我们可以使用CGLIB包CGLIB是一个强大的高性能的代码生成包。它广泛转载 2016-11-10 00:17:54 · 267 阅读 · 0 评论 -
cglib动态代理介绍(一)
一、原理 代理为控制要访问的目标对象提供了一种途径。当访问对象时,它引入了一个间接的层。JDK自从1.3版本开始,就引入了动态代理,并且经常被用来动态地创建代理。JDK的动态代理用起来非常简单,当它有一个限制,就是使用动态代理的对象必须实现一个或多个接口。如果想代理没有实现接口的继承的类,该怎么办?现在我们可以使用CGLIB包。二、什么是cglib CGL转载 2016-11-10 00:16:14 · 271 阅读 · 0 评论 -
java日志系统详解
Java日志系统确实比较丰富,常用的有log4j、JUL、logback等等,同时伴随着日志系统的发展,出现了日志框架commons-logging和slf4j。简短地描述下日志发展,最先出现的是apache开源社区的log4j,这个日志确实是应用最广泛的日志工具,成为了java日志的事实上的标准。然而,当时Sun公司在jdk1.4中增加了JUL日志实现,企图对抗log4j,但是却造成了混转载 2016-10-28 22:51:50 · 393 阅读 · 0 评论 -
Java初始化顺序总结 - 静态变量、静态代码块、成员变量、构造函数
分类: JavaJava初始化顺序(转来的)1在new B一个实例时首先要进行类的装载。(类只有在使用New调用创建的时候才会被java类装载器装入)2,在装载类时,先装载父类A,再装载子类B3,装载父类A后,完成静态动作(包括静态代码和变量,它们的级别是相同的,安装代码中出现的顺序初始化)4,装载子类B后,完成静态动作类装载完成,开始进行实例化1,在实例化子类转载 2016-10-28 22:06:45 · 266 阅读 · 0 评论 -
java反射机制的作用与优点
java的反射机制就是增加程序的灵活性,避免将程序写死到代码里,例如: 实例化一个 person()对象, 不使用反射, new person(); 如果想变成 实例化 其他类, 那么必须修改源代码,并重新编译。 使用反射: class.forName("person").newInstance(); 而且这个类描述可以写到配置文件中,如 **.xml, 这样如果想实例化其他类,只要转载 2016-08-10 20:22:53 · 429 阅读 · 0 评论 -
Java中成员变量和属性之间的关系
有人可能遇到这样的错误,明明在类中定义了某个成员变量,但是系统在运行的时候提示错误:属性XX没有定义。这是什么原因呢?大家知道成员变量有多种访问控制符,通常都应该把成员变量定义成私有的,然后为该成员变量提供set方法和get方法,外界通过set方法和get方法对成员变量进行操作。这样对外界来说,只有能够访问到的成员变量才算是属性,例如下面的代码:private String userNam转载 2016-08-30 14:42:58 · 531 阅读 · 0 评论 -
java静态方法能否被重写
java静态方法能否被重写 JAVA静态方法形式上可以重写,但从本质上来说不是JAVA的重写。因为静态方法只与类相关,不与具体实现相关,声明的是什么类,则引用相应类的静态方法(本来静态无需声明,可以直接引用),看下例子: Java代码 class Base{ static void a( ){Sys转载 2016-07-08 13:41:05 · 416 阅读 · 0 评论 -
请问在java中定义字符串时要加上final修饰吗?
提问者采纳亲,final 加到属性上面就是常量了,也就是说他不能变了。String这个类他本身就是final的,所以你定义字符串不须要加,除非你要把这个String变量弄成常量。正常的来说,final修饰就是一个不再改变的量,这样,他的修饰的字符串就要大写,比如:private static final String PRICE=15;这这个PRICE就是个常量了。不明白可再问转载 2016-07-18 21:38:13 · 3124 阅读 · 1 评论 -
多态以及其优缺点
多态:可以理解为事物存在的多种体现形态,比如说人:男人、女人;动物:猫,狗。多态:多种形态。这里要重点讲的就是对象的多态性。狗 x = new 狗();动物 y = new 狗();//对象的多态性,狗对象即是狗类型,又是动物形态。必须要明确一点:狗是动物中的一种。意味着狗是需要继承动物的才可以这样指向。多态性:在程序中的体现。 就是:父类或者接口的引用指向自己转载 2016-07-15 21:57:37 · 5296 阅读 · 0 评论 -
多态
多态1.多态是java中封装和继承之外的第三个基本特征,我觉得也是java最核心的东西,也叫动态绑定,或者后期绑定,或者运行时绑定。在执行期间(而非编译期间)判断所引用对象的实际类型,根据其实际的类型调用相应的方法。2. 多态理解起来比较抽象一些,举个例子,宝马是车,台灯是灯,拿铁是咖啡,吉他是乐器。多态的存在有3个条件,1)要有继承 2)要有重写3转载 2016-07-15 21:52:47 · 274 阅读 · 0 评论 -
父类引用指向子类对象的说明
public class Person {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public void work() {System.out.println("p原创 2016-07-14 22:56:46 · 431 阅读 · 0 评论 -
Java中的继承和多态
Java中的继承和多态 1、 什么是继承,继承的特点?子类继承父类的特征和行为,使得子类具有父类的各种属性和方法。或子类从父类继承方法,使得子类具有父类相同的行为。特点:在继承关系中,父类更通用、子类更具体。父类具有更一般的特征和行为,而子类除了具有父类的特征和行为,还具有一些自己特殊的特征和行为。在继承关系中。父类和子类需要满足is-a的关系。子类是父类。表示父转载 2016-07-14 22:54:25 · 234 阅读 · 0 评论 -
谈谈Java中的继承与组合
谈谈Java中的继承与组合 1.继承和组合的概念 在新类里简单地创建原有类的对象。我们把这种方法叫作“组合”,因为新类由现有类的对象合并而成。我们只是简单地重复利用代码的功能,而不是采用它的形式。 第二种方法是创建一个新类,将其作为现有类的一个“类型”。我们可以原样采取现有类的形式,并在其中加入新代码,同时不会对现有的类产生影响。这种魔术般的行为叫作“继承”(In转载 2016-07-13 19:45:34 · 275 阅读 · 0 评论 -
Java中的继承与组合
Java中的继承与组合本文主要说明Java中继承与组合的概念,以及它们之间的联系与区别。首先文章会给出一小段代码示例,用于展示到底什么是继承。然后演示如何通过“组合”来改进这种继承的设计机制。最后总结这两者的应用场景,即到底应该选择继承还是组合。1、继承假设我们有一个名为Insect(昆虫)的类,这个类包含两个方法:1)移动move(); 2)攻转载 2016-07-13 19:41:50 · 503 阅读 · 0 评论 -
Java的string类为什么是不可变的
答案一:最流行的Java面试题之一就是:什么是不可变对象(immutable object),不可变对象有什么好处,在什么情况下应该用,或者更具体一些,Java的String类为什么要设成immutable类型?不可变对象,顾名思义就是创建后不可以改变的对象,典型的例子就是Java中的String类。复制代码代码如下:String s = "ABC";转载 2016-07-12 11:05:17 · 280 阅读 · 0 评论 -
java中子类继承父类时是否继承构造函数呢?
java中子类继承父类时是否继承构造函数呢?java继承中对构造函数是不继承的。以下是例子: public class FatherClass { public FatherClass() { System.out.println(100); } public FatherClass(int age) { System.out.转载 2016-07-08 13:49:37 · 811 阅读 · 0 评论 -
java常量池概念
java常量池概念在class文件中,“常量池”是最复杂也最值得关注的内容。 Java是一种动态连接的语言,常量池的作用非常重要,常量池中除了包含代码中所定义的各种基本类型(如int、long等等)和对象型(如String及数组)的常量值还,还包含一些以文本形式出现的符号引用,比如: 类和接口的全限定名; 字段的名称和描述符; 方法和转载 2016-07-20 21:46:31 · 206 阅读 · 0 评论 -
Java内省机制
Java内省机制1).内省(Introspector)是Java 语言对Bean类属性、事件的一种缺省处理方法。例如类 A 中有属性 name, 那我们可以通过 getName,setName 来得到其值或者设置新的值。通过 getName/setName 来访问 name 属性,这就是默认的规则。 Java 中提供了一套 API 用来访问某个属性的 gett转载 2016-08-30 13:25:55 · 216 阅读 · 0 评论 -
深入理解Java:内省(Introspector)
一些概念: 内省(Introspector) 是Java 语言对 JavaBean 类属性、事件的一种缺省处理方法。 JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为“值对象”(Value Object),或“VO”。方法比较少转载 2016-08-30 12:38:46 · 315 阅读 · 0 评论 -
java的reflection和introspector
很多朋友在深入的接触JAVA语言后就会发现这样两个词:反射(Reflection)和内省(Introspector),经常搞不清楚这到底是怎么回事,在什么场合下应用以及如何使用?今天把这二者放在一起介绍,因为它们二者是相辅相成的。反射 相对而言,反射比内省更容易理解一点。用一句比较白的话来概括,反射就是让你可以通过名称来得到对象(类,属性,方法)的技术。例如我们可以通过类名来生成一个类转载 2016-08-30 11:56:50 · 229 阅读 · 0 评论 -
Java 多线程实现接口Runnable和继承Thread区别 (2
Java 多线程实现接口Runnable和继承Thread区别 (2014-07-15 21:42:35)目前Java中实现多线程可通过实现Runnable接口或者继承Thread,他们之间存在不少区别,建议使用Runnable; 首先建立多线程,extend Thread类:多线程实现接口Runnable和继承Thread区别" title=转载 2016-08-29 23:26:07 · 862 阅读 · 0 评论 -
JAVA多线程实现Runnable方式
(一)步骤: 1.定义实现Runnable接口 2.覆盖Runnable接口中的run方法,将线程要运行的代码存放在run方法中。3.通过Thread类建立线程对象。4.将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。 为什么要讲Runnable接口的子类对象传递给Thread的构造方法。因为自定义的方法的所属的对象是Runnable接口的子类转载 2016-08-29 23:09:51 · 720 阅读 · 0 评论 -
main方法的String[] args参数
敲例子的时候无意中把主方法的参数给落下了,当时没有发现,保存之后就去编译,运行了,通常情况下编译没有错误那胜利就在掌握之中了,没想到这次我竟然在"不一般"的行列中,编译无误,运行出错,错误信息如下: "找不到主方法?记得我写了main()方法了啊?回到代码处看了一下,也是stat转载 2016-08-07 23:54:38 · 402 阅读 · 4 评论