随笔分类 - Java
Java
摘要:.java里的clone分为:A:浅复制(浅克隆): 浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。b:深复制(深克隆):深复制把要复制的对象所引用的对象都复制了一遍。Java中对象的克隆,为了获取对象的一份拷贝,我们可以利用Object类的clone()方法。必须要遵循下面三点1.在派生类中覆盖基类的clone()方法,并声明为public【Object类中的clone()方法为protected的】。2.在派生类的clone()方法中,调用super.clone()。3.在派生类中实现Cloneable接口。浅复制(shallow clone):被复制对象的所有变量都含有与原来的对象
阅读全文
摘要:public class Main6 { public static void main(String[] args){ for (int i = 0; i < 10; i++) int id=i; }}上面程序的运行结果为:编译错误局部变量声明的作用在一个块内,也可以理解为在{}内,for循环可以不使用{},的,但局限与执行语句,期中不包括变量声明的语句,由于这段代码中Integer k的作用范围在整个main方法中,这样就造成了变量重复定义的错误,所以在编译时会出错,若要改正,只需要加上一对括号public clas...
阅读全文
摘要:1. 一个类如果要继承另一个类,如果另一个类有构造函数,那么当前类必须要实现一个调用父类的构造函数super(参数,,,)如果父类的构造函数是私有的那么就没有办法继承该父类2.静态方法不能被覆盖v静态方法在编译时根据调用该方法的类或对象所属的类决定v实例方法在运行时根据对象所属的类决定一个类中有多个同名的方法如:Math类中的min()方法条件(满足其一):l参数的个数不同l参数的类型不同如果两个方法仅返回值不同,不是重载,会报错super.方法名([参数表]); ——调用父类的方法super.成员变量名 ——访问父类的成员变量super([参数表]); ——调用父类的构造函数功能类似于thi
阅读全文
摘要:转载:http://blog.csdn.net/m13666368773/article/details/7513049static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。用public修饰的static成员变量和成员方法本质是全局变量和全局方
阅读全文
摘要:public class TestClass4 { public static void main(String[] args){ int i=012; int j=034; int l=077; int k=(int)056L; short s=1; s+=1; //s=s+1;错误 char x='x'; System.out.println(false?i:x); System.out.println(false?10:x); }}Jav...
阅读全文
摘要:这种不同是因为在c语言中,每个变量在它的生命周期内的每个时间点都只能有一个唯一的值。因此变量在每一次自增运算时,变量所对应内存区域的内容就被重写了。而在java中,执行sum1=(i++)+(i++);创建了2个临时的整型变量对象,对来存储每次自增运算的结果。java采用了这种中间缓存变量的机制#include #include using namespace std;int main(){ int i=0; int sum=(i++)+(i++); cout<<"i="<<i<<" sum="<<sum&
阅读全文
摘要:public class TestClass1 { static { int x=5; } int z; static int x,y; public static void main(String[] args){ x--; myMethod(); System.out.println(x + y++ + x); } private static void myMethod(){ y=x++ + ++x; System.out.println("y="+y+" x="+x); }}answer=...
阅读全文
摘要:类中声明的静态变量在递归调用中的值不会发生变化,但是对于非静态变量递归过程中会发生变化,初始化为0static声明的为类变量,而非static声明的为实例变量(byte,short,char)-int-long-float-double:低级到高级自动类型转换,高级到低级需要强制转换,包装类型过滤类型能够转换;对于java的变量,我们知道有成员变量和局部变量。关于他们的初始化,基本上所有书上都会写。成员变量,java会帮助你初始化,局部变量,则需要程序员自己初始化。对于类的成员变量。不管程序有没有显示的初始化,Java 虚拟机都会先自动给它初始化为默认值。规则为:1、整数类型(byte、sho
阅读全文
摘要:定义在一个类内部的类叫内部类,包含内部类的类称为外部类。内部类可以声明public、protected、private等访问限制,可以声明为abstract的供其他内部类或外部类继承与扩展,或者声明为static、final的,也可以实现特定的接口。static的内部类行为上象一个独立的类,非static在行为上类似类的属性或方法且禁止声明static的方法。内部类可以访问外部类的所有方法与属性,但static的内部类只能访问外部类的静态属性与方法。
阅读全文
摘要:基本概念:序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。1. 什么是Java对象序列化 Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长。但在现实应用中,就可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象。Java对象序列化就能够帮助我们实现该功能。 使用Java对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装成对象。必须注意
阅读全文
摘要:转载:http://www.cnblogs.com/aduck/archive/2013/02/17/2914709.html这几天看了下正则表达式,对非捕获组(non-capturing)进行下总结。主要总结 1个 + 2组 一共5个。(?:X) (?=X) (?<=X) (?!X) (?<!X)这四个非捕获组用于匹配表达式X,但是不包含表达式的文本。(?=X )零宽度正先行断言。仅当子表达式 X 在 此位置的右侧匹配时才继续匹配。例如,/w+(?=/d) 与后跟数字的单词匹配,而不与该数字匹配。此构造不会回溯。(?!X)零宽度负先行断言。仅当子表达式 X 不在 此位置的右侧匹配
阅读全文
摘要:一般创建实例的方法1. 构造方法2.静态工厂方法3.构建器当使用构造器或者静态工厂方法时,创建类的实例不能很好的用于大量的可选参数,类似于有的参数是必须的,有个往往要根据可选参数设置默认值,不同的构造方法。这是我们一般习惯使用的重叠构造器*telecoping constructor模式,通过使用JavaBean模式,可以改进这种类的构造方法,使用默认的构造方法,设置不同的参数,但是该模式有很大的缺点,因为构造器被分配到不同的构造过程,导致JavaBean可能处于不一致的状态,特别的不适合用于多线程操作,导致类变得可变。第三中方法通过构建器,Builder模式,不直接生成想要的对象,而是通过让
阅读全文
摘要:转载:http://oznyang.iteye.com/blog/30690HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类,也就是说建议使用HashMap,不要使用HashTable。可能你觉得HashTable很好用,为什么不用呢?这里简单分析他们的区别。1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。2.HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。3.HashTabl
阅读全文
摘要:允许所有外部类访问使用public允许子类和同包类访问使用protected只能自己访问使用private访问权限修饰符权限从高到低排列是public ,protected ,friendly, private。一个Java应用有很多类,但是有些类,并不希望被其他类使用。每个类中都有数据成员和方法成员,但是并不是每个数据和方法,都允许在其他类中调用。如何能做到访问控制呢?就需要使用访问权限修饰符。Java语言中的访问权限修饰符有4种,但是仅有3个关键字,因为不写访问权限,在Java中被称为默认权限,或同包权限,本文中以(default)代替。下面按照权限从小到大的顺序对4中访问权限分别介绍。1
阅读全文
摘要:1、transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。2、被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。3、一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。也可以认为在将持久化的对象反序列化后,被transient修饰的变量将按照普通类成员变量一样被初始化。如下面的例子package com.kkoolerter;import java.io.File;import java.io.FileInputStream;
阅读全文
摘要:当出现问题时,而有无法了解问题所在,看JDK源码和编译后的字节码;转载:http://blog.csdn.net/dreaming_my_dreams/article/details/8316085: 推荐博客在J2SE5.0后推出了自动装箱和拆箱的功能,以提高我们的开发效率,然而自动装箱和拆箱实际上是通过编译器来支持的(并非语言本身,或者说虚拟机),因而这种支持也隐藏了部分内部实质,再加上某些类的优化(比如Integer里面的缓存等,参看关于缓存节),就更加容易在特定的环境下产生问题,并且如果不知道原来还无法调试。以下先是简单的介绍了编译器对装箱和拆箱的实现,并根据实现简单介绍一下可能...
阅读全文
摘要:转载:http://www.blogjava.net/zhangyuan/archive/2010/07/24/327011.html昨天跟朋友一起吃饭,他说到两个Integer类型值比较是否相等的问题。经理也在这里把java的Integer值比较的问题拿出来说一说。因为在面试的时候这个是经常遇到的问题。首先给大家看一个例子:1publicclassTest{23/**4*关于Integer大小比较问题5*@author经理6*/7publicstaticvoidmain(String[]args){8Integera=10;9Integerb=10;10System.out.println(
阅读全文
摘要:转载:http://hi.baidu.com/630270730/item/a4d92e24007be1130875089ffloat与double的范围和精度1. 范围float和double的范围是由指数的位数来决定的。float的指数位有8位,而double的指数位有11位,分布如下:float:1bit(符号位) 8bits(指数位) 23bits(尾数位)double:1bit(符号位) 11bits(指数位) 52bits(尾数位)于是,float的指数范围为-127~+128,而double的指数范围为-1023~+1024,并且指数位是按补码的形式来划分的。其中负指数决定了浮点
阅读全文
摘要:守护线程(Daemon)Java有两种Thread:“守护线程Daemon”与“用户线程User”。我们之前看到的例子都是用户,守护线程是一种“在后台提供通用性支持”的线程,它并不属于程序本体。从字面上我们很容易将守护线程理解成是由虚拟机(virtual machine)在内部创建的,而用户线程则是自己所创建的。事实并不是这样,任何线程都可以是“守护线程Daemon”或“用户线程User”。他们在几乎每个方面都是相同的,唯一的区别是判断虚拟机何时离开:用户线程:Java虚拟机在它所有非守护线程已经离开后自动离开。守护线程:守护线程则是用来服务用户线程的,如果没有其他用户线程在运行,那么就没有.
阅读全文
摘要:第45条:将局部变量的作用域最小化 使用for循环与使用while循环相比还有另一个优势:更简介第46条:for-each循环优先与传统的for循环第47条:了解和使用类库第48条:如果精确的答案,避免使用float和double,BigDecimall, int ,long 9 18第49条:基本类型由于装箱基本类型第50条:如果其他类型更适合,避免使用字符串 String ,----StringBuilder第51条:当心字符串的连接性能第52条:通过接口引用对象第53条:接口优先与反射机制 允许一个类使用另一各类,在另一各类还没有编译的情况第54条:谨慎的使用本地方法第55条:谨慎...
阅读全文