java基础学习笔记一

阅读更多

咱是初哥,贴段自己的学习笔记,方便以后查看。

package com.icss.demo2;

import java.awt.EventQueue;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Properties;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 用于小测试的一个类,大杂烩,不放辣椒的,我不喜欢辣椒。
 * 

* 测试的内容有:
* 1、位运算符&在整数奇偶的判断上的应用
* 2、位运算<<和>>
* 3、Scanner就用于控制台读取字符串
* 4、大数值BingDecimal对浮点数精度的处理
* 5、数组的拷贝与引用及其与基本类型数据的区别
* 6、打印当前系统的属性
* 7、类对象的浅克隆和深克隆
* 8、程序的配置
* 9、正则表达式的使用
* 10、打印字符数组时需要注意的一些问题
*

* * @author bing * @version 2011-01-08 * */ public class Test1 { public static void main(String[] args) throws CloneNotSupportedException{ Test1 test = new Test1(); ///////测试位运算符&在整数奇偶的判断上的应用////// /*int[] num = new int[10]; for(int i=0;i>//////// ////输出,最后一个结果为负数是由于整数溢出 536870908 1073741816 2147483632 -32 /*int i; int num = 0xFFFFFFE; for (i = 0; i < 4; i++) { num = num << 1; System.out.println(num); }*/ ////////测试Scanner就用于控制台读取字符串///// // test.testScanner(); /*for(int i=0;i<3;i++){ test.testScanner(); }*/ ///////测试大数值BingDecimal对浮点数精度的处理//////// // test.testBigDecimal(); ///////测试数组的拷贝与引用及其与基本类型数据的区别///// // test.testArraysCopy(); //////打印当前系统的属性 // test.printProperties(); /////测试类对象的浅克隆和深克隆 // test.testFleetDeepClone(); ////////程序的配置////// // test.testProgramConfig(); ///////正则表达式///// // test.testRegex(); ///////打印字符数组时需要注意的一些问题////// test.testCharArrayPrint(); } /** * 判断一个数(正或负整数)是否为奇数 * [2011-01-08 14:33] * @param num * @return */ public boolean isOdd(int num){ return (num & 1) == 1; } /** * 使用Scanner读取字符串 */ public void testScanner(){ Scanner scan = new Scanner(System.in); System.out.print("Input a String:"); String str = scan.nextLine(); System.out.println("The String you input is \"" + str + "\"."); // 循环读取时关闭会抛出java.util.NoSuchElementException: No line found // 异常,无论是不是在每次循环中重新new一个Scanner对象。 // 相关的描述见http://lifeising.javaeye.com/blog/633505 // scan.close(); } /** * 测试大数值BigDecimal * 先看测试结果。 * java中的简单浮点数类型float和double不能进行数值精度的计算。使用float或double类型直接计算有时会出现精度丢失的问题, * 而大数值BigDecimal类提供无限大小的数值计算,但是BigDecimal不重载+、*等的运算符,需要调用其提供的方法。 * 有人提出这样一个原则:float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用 java.math.BigDecimal。 * 没做过实际的项目不发表意见,但是从这个测试中可以看出精度丢失带来的问题,特别是在金融业方面,这个数值计算带来的精度 * 的丢失最好是不要存在,否则..... * 这就不说了,我又不开银行,哪天被别人利用bug刷了点钱或是抗了别人的钱,老板被人伏击,也不干我事... * 不过要是我写出这种代码就不好了,咱做事都是兜着良心的... * [2011-01-08 14:33] */ public void testBigDecimal(){ float f1 = 0.05f; float f2 = 0.01f; double d1 = 0.05; double d2 = 0.01; System.out.println(f1+f2); // 由于BigDecimal的构造方法和静态方法valueOf中都没有处理float类型参数的,所以需要将float类型转换为String类型再构造BigDecimal System.out.println((new BigDecimal(String.valueOf(f1))).add((new BigDecimal(String.valueOf(f2))))); // 可使用构造函数,也可以使用静态方法valueOf(Double d) System.out.println(d1+d2); System.out.println(BigDecimal.valueOf(d1).add(BigDecimal.valueOf(d2))); } /** * 测试数组的拷贝与引用及其与基本类型数据的区别,测试int或String时把相应的变量增删注释即可。 * 拷贝与引用的区别,简单来说,如果A拷贝了B,则A不会因为B的改变而改变,如果A引用了B,则A会随着B的改变而改变,相当于是 * 一个物体的两个别名。 * 从测试中可以看出用一个数组直接通过“=”运算符赋值,是把两个数组变量指向同一块内存,相当于类的引用。拷贝一个数组到 * 另一个数组可以用void java.lang.System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length) * 或者T[] java.util.Arrays.copyOf(T[] original, int newLength),Arrays.copyOf方法常用于重建不同长度的数组。 * 而基本数据类型用直接通过“=”运算符赋值,是拷贝一个数据到另一个数据中。 * * ps:数组的拷贝与引用类似于类对象的拷贝与引用,只是拷贝的方法有所不同,类对象的拷贝也叫克隆,使用clone方法实现,并且 * 需要该类实现Cloneable接口。不同的是,对象的克隆是对单个对象进行操作,数组的拷贝是对一组数据(包括对象)的拷贝。 * [2011-01-08 14:33] */ public void testArraysCopy(){ /////////测试数组的拷贝//////// // int[] array = new int[10]; // int[] copyArray = new int[10]; String[] array = new String[10]; String[] copyArray = new String[10]; for(int i=0;i

 

ChildForTestClone 源代码

package com.icss.demo2;

public class ChildForTestClone implements Cloneable{
	private String name;
	private String info;
	public ChildForTestClone(){
		
	}
	public ChildForTestClone(String name,String info){
		this.name = name;
		this.info = info;
	}
		
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getInfo() {
		return info;
	}
	public void setInfo(String info) {
		this.info = info;
	}
	/**
	 * @retruns 子对象的名(子对象的描述)
	 */
	public String toString() {
		return this.name + "(" + this.info + ")";
	}
	/**
	 * 默认克隆(浅克隆)
	 * @return
	 * @throws CloneNotSupportedException
	 */
	public ChildForTestClone clone() throws CloneNotSupportedException{
		return (ChildForTestClone)super.clone();
	}
	
}

  

ParentForTestClone 源代码

package com.icss.demo2;

public class ParentForTestClone implements Cloneable{
	private String name;
	private String info;
	private ChildForTestClone child;
	
	public ParentForTestClone(){
		
	}
	public ParentForTestClone(String name,String info){
		this.name = name;
		this.info = info;
	}
	public ParentForTestClone(String name,String info,ChildForTestClone child){
		this.name = name;
		this.info = info;
		this.child = child;
	}
				
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getInfo() {
		return info;
	}
	public void setInfo(String info) {
		this.info = info;
	}
	public ChildForTestClone getChild() {
		return child;
	}
	public void setChild(ChildForTestClone child) {
		this.child = child;
	}
	/**
	 * @retrun 父对象的名(父对象的描述)[父对象中包含的子对象的名]
	 */
	public String toString() {
		return this.name + "(" + this.info + ")[" + this.child.getName() + "]";
	}
	/**
	 * 深克隆(深拷贝)
	 * @return 返回一个克隆对象,深克隆克隆类中包含的子类属性
	 */
	protected ParentForTestClone deepClone() throws CloneNotSupportedException {
		ParentForTestClone cloneObject = (ParentForTestClone)super.clone(); // 克隆对象
		cloneObject.setName(this.name);
		cloneObject.setInfo(this.info);
		cloneObject.setChild(this.child.clone());// 克隆子类属性
		return cloneObject;
	}
	/**
	 * 浅克隆(浅拷贝),默认的克隆时浅克隆,浅克隆不会克隆类中包含的子类属性,而是做引用处理
	 * @return
	 * @throws CloneNotSupportedException
	 */
	protected ParentForTestClone fleetClone() throws CloneNotSupportedException {
		return (ParentForTestClone)super.clone(); // 默认的拷贝
	}
	
}

 

你可能感兴趣的:(Java,正则表达式,Bing,金融,Blog)