零碎记录

注意使用java.util.Arrays里面封装好的各种针对数组的排序,查找方法,java.util.Collections中针对list的排序查找方法。

java.lang.System类的静态方法arraycopy实现数组的拷贝,注意是浅拷贝

public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)

从src数组的srcPos开始向目标数组dest从destPos开始位置拷贝length个元素。

直接获得char字符的ascall码

		char c='陈';
		System.out.println((int)c);		//38472
		char d='d';
		System.out.println((int)d);		//100

删除list中的所有重复元素:

		List<String> list = new ArrayList<String>();
		list.add("s1");
		list.add("s2");
		list.add("s1");
		list.add("s2");
		System.out.println(list);	//[s1, s2, s1, s2]
		Set<String> set = new HashSet<String>(list);
		list = new ArrayList<String>(set);
		System.out.println(list);	//[s2, s1]顺便可能改变

一次读一行,读出整个文件内容,BufferedReader不会读出结尾的换行符。

			BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
			String str = "";
			while ((str = bufferedReader.readLine()) != null) {
				System.out.println(str);
			}
向目的地写入换行用BufferedWrite的newLine()方法。

每个对象都有一把锁,进去synchronized标识的临界区的时候会试图获得这个锁,若获得,则可以进入临界区,否则阻塞。

wait()方法是自我阻塞的方法,阻塞的时候放弃已经获得的对象锁,sleep()方法是睡眠一段时间,但是不会放弃已经获得的锁。

notify()方法通知一个等待该锁的线程,notifyAll()通知所有等待该锁的线程。

GUI设置frame的属性,bbl+vtr(桶+录像机)

bounds,background,layout,visible,title,resizable

数组和list之间相互转换

		String[] a = { "a1", "a2", "a3", "a4", "a5" };

		List<String> list2 = Arrays.asList(a);
		System.out.println(list2);
		Collections.shuffle(list2);
		System.out.println(list2);
		a = list2.toArray(new String[0]);	//new String[0]是一个泛型,转换后数组的类型
		
		for (int i = 0; i < a.length; i++) {
			System.out.print(a[i] + "  ");
		}
		System.out.println();

UDP通信时,DUPServer(接受数据)和UDPClient(发送数据)都是通过DatagramPacket进行数据交换的,而DatagramPacket都是一个byte[]的封装,client是直接通过ByteArrayOutputStream在内存中定义了一个缓冲区,然后baos.toByteArray()转换为byte[]在封装为dp,而服务端是先定义byte[]然后封装为dp。client在封装dp的时候需要指定这个dp发送目的地的ip地址和端口(每个数据包是独立路由的)。client和server交换数据都要建立一个DatagramSocket

每次写入到文件的结尾new FileOutputStream(file, true)

Class类型可以使用泛型,三种方式可以获得一个类的Class对象。

1.Class类的静态方法forName(String className)。

public static Class<?> forName(String className) throws ClassNotFoundException

2.每个类的静态class属性,通过它获得该类的Class对象

Class<Student> clazz = Student.class

3.Object类的的getClass()方法,通过类的实例调用该方法获得对应类的Class对象。

Student s = new Student();

Class<Student> clazz = s.getClass();

Constructor cons = clazz.getDeclaredConstructor(); //获得默认的构造函数--即使是private的

Constructor cons = clazz.getDeclaredConstructor(String.class, Integer.class); //获得有参数的构造函数--即使是private的

如果构造方法是private的,需要设置访问权限

cons.setAccessiable(true);

--------------------------------------

Field field = clazz.getDeclaredField("age");//即使是private的也能获得
field.setAccessiable(true);


Class clazz = Class.forName("cn.itcast.reflect.HelloWorld");//获得clazz对象
Method method = clazz.getDeclaredMethod("print", String.class, int.class); //获得method对象
Object object = clazz.newInstance(); //获得类对象
method.setAccessible(true); //设置访问权限
method.invoke(object, "abc", 1); //绑定

注意:clazz.getXxx()如getField,getMethod,只能获得public的。而getDeclaredXxx()都可以获得,但是在访问的时候,对非public的要设置访问权限。


二进制和十进制相互转换

//将十进制转成二进制

Integer.toBinaryString(1809)

//将二进制转成十进制

String s = "11100010001";

Integer.parseInt(s,2);

记录一段程序的运行时间方法:

long t1 = System.currentTimeMillis();

....

long t2 = System.currentTimeMillis();

System.out.println(t2-t1);


常用的正则表达式:

匹配邮箱:[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+

匹配汉字:[\u4e00-\u9fa5]

匹配空白行:^[\\s&&[^\\n]]*\\n$

读取properties配置文件的内容。

Properties props = new Properties();

props.load(Test.class.getClassLoader().getResourceAsStream(
"spring/beanfactory/spring.properties"));
String value = props.getProperty("vehicleType");

列出每个学生的平均成绩。

SELECT 学号,AVG(成绩) AS 平均成绩 FROM 选课 GROUP BY 学号

使用聚集函数,一般都要用group by,按照什么分组看前面“学号,AVG(成绩)”,聚集函数不能用在where子句中,where决定了哪些行可以进入聚集阶段,having子句用户聚集函数之后的过滤选择。

		String t = "hello";
		char[] c = { 'h', 'e', 'l', 'l', 'o' };
		System.out.println(t.equals(c));
		System.out.println(t.equals(new String("hello")));
		String t1 = new String("hello");
		String t2 = new String("hello");
		System.out.println(t1.equals(t2));

结果:false,true,true

public class Test1 {
	public static void main(String[] args) {
		new A();
	}
}

class B extends Object {
	static {
		System.out.println("load B");
	}

	public B() {
		System.out.println("create B");
	}
}

class A extends B {
	static {
		System.out.println("load A");
	}

	public A() {
		System.out.println("create A");
	}
}
运行结果:

load B
load A
create B
create A

java中守护进程(daemon)的设置必须在线程启动之前 xxx.setDaemon(true); 不管守护进程是否结束,只要非守护进程都结束了,jvm就会结束。

http://blog.csdn.net/zhouyong0/article/details/7864414

类中的普通方法可以和类同名。

抽象类中可以有static方法,抽象类可以继承非抽象类。抽象类中的抽象方法没有大括号。

char a = 65是合法的。

字符串"学java"占6个字节,而不是10个。

在生成动态代理的时候要用到Java提供的JavaCompiler类,也就是获得当前环境中的Java编译器,可以通过如下方式获得Java的编译器并编译一个文件。

		String src = "package com.chen.proxy;" +

		"public class TankTimeProxy implements Moveable {" + " Moveable m;" +

		"@Override" + "\r\n" + "public void move() {"
				+ "long start = before();" + "m.move();" + "after(start);"
				+ "}" +

				"private void after(long start) {" + "long end = before();"
				+ "System.out.println(\"move time: \" + (end - start));" + "}" +

				"private long before() {"
				+ "long start = System.currentTimeMillis();" + "return start;"
				+ "}" +

				"public TankTimeProxy(Moveable tank) {" + "this.m = tank;"
				+ "}" + "}";
		System.out.println(System.getProperty("user.dir"));
		String fileName = System.getProperty("user.dir")
				+ "/src/com/chen/proxy/TankTimeProxy.java";
		File file = new File(fileName);
		try {
			FileWriter fileWriter = new FileWriter(file);
			fileWriter.write(src);
			fileWriter.flush();
			fileWriter.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
		StandardJavaFileManager fileManager = compiler.getStandardFileManager(
				null, null, null);
		Iterable iterable = fileManager.getJavaFileObjects(fileName);
		CompilationTask task = compiler.getTask(null, fileManager, null, null,
				null, iterable);
		task.call();
		try {
			fileManager.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
注意:在获得JavaCompiler对象的时候,运行环境必须为java1.6或更高版本且必须为jdk,jre中是不包括编译器的。   
设置方式如下:Window-preferences-java-Installed JREs-右边add选择对应的jdk目录 ,然后在Installed  JREs右边选择加进来的jdk。然后在项目上替换原来的jre环境,方法为:
在项目上右键-Build path-configure build path-左边选择Java Build Path-选择Libraries标签-选中下面的JRE System Library-点击edit-Alternate JRE中选择JDK     


游长实参,有两种不同的调用方式。

	@Test
	public void testSum() {
		int[] a = { 1, 2, 3, 4, 5 };
		System.out.println(new UserAction().sum(a));
		System.out.println(new UserAction().sum(1, 2, 3));
	}

	public int sum(int... a) {
		int sum = 0;
		for (int i = 0; i < a.length; i++) {
			sum += a[i];
		}
		return sum;
	}

eclipse中ctrl+shift+o导入包

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值