Puock主题已经正式发售,一款颜值在线的多功能WordPress主题,赶快戳我来看看吧

Java笔记整理第二文之161013期

1,809次阅读
6条评论

前言

Java笔记整理上一次已经是三周之前了,在这三周内(除去国庆实际只有两周)又学习了很多的新知识,今天来整理一下笔记,顺带梳理思路 Java笔记整理第二文之161013期

正文

异常

抛出处理(throw,throws):

  • throw:用于方法内部,作用是在方法内部抛出一个异常对象且只能跟一个异常对象。
  • throws:用于方法声明上,作用是在方法声明上声明抛出异常类型并可以跟多个异常对象。

异常处理:

try{
  //可能发生异常的代码
}catch(捕获的异常类型 变量名){
  //处理异常的代码
}finall{
  //一定会执行的代码(除JVM停止),多用于释放资源
}

异常分类:

  • 运行时异常: RuntimeException以及RuntimeException的子类都是属于运行时异常。
  • 除了运行时异常就是编译异常。

异常分类:

  • 运行时异常: RuntimeException以及RuntimeException的子类都是属于运行时异常。
  • 除了运行时异常就是编译异常。

Package

  • 被访问的包中的类权限必须是public的。
  • 类中的成员权限:public或者protected
  • protected是为其他包中的子类提供的一种权限

包的4种权限图解:

Java笔记整理第二文之161013期

javac -d . PackageDemo.java //编译 d:创建目录 .:在当前目录创建
java cn.java.demo1.PackageDemo //运行

多线程

创建方式一:继承Thread类

  1. 子类覆盖父类中的run方法,将线程运行 的代码存放在run中。
  2. 建立子类对象的同时线程也被创建。
  3. 通过调用start方法开启线程。

注意:多次调用start()会报异常。

创建方式二:实现Runnable接口

  1. 实现类覆盖接口中的run方法。
  2. 通过Thread类创建线程,并将实现了 Runnable接口的子类对象作为参数传递给 Thread类的构造函数。
  3. Thread类对象调用start方法开启线程。

Thread和Runnable的关系

  1. Thread是Runnable 的子类。
  2. 实际上Thread和Runable的关系和代理设计模式很像,这里的Thread就是代理类。我们自己所实现的类才是真正的。

Thread和Runnable的区别

  • Runnable可以共享数据

同步:synchronized

synchronized(对象)
{
  //需要同步的代码
}

同步的前提:

  • 同步需要两个或者两个以上的线程。
  • 多个线程使用的是同一个锁。

同步的弊端:

  • 当线程相当多时,因为每个线程都会去判断同步上的锁,这是很耗费资源的,无形中会降低程序的运行效率。

常用方法:

  • wait():使当前线程进入堵塞状态等待(特点:释放cpu执行权,释放锁)。
  • notify():唤醒一个标识所属的同步的锁的线程
  • notifyAll():唤醒所有标识所属的同步的锁的线程

同步函数

  • 在函数上加上synchronized修饰符即可。
  • 同步函数的锁是this,而同步代码块的锁可以是任意对象。
  • 静态同步函数的锁是本类的字节码对象。
public synchronized void fun(){
	//同步的代码
}

注意:同步应用过多就有可能会出现死锁,导致线程出现无限期地僵持下去的局面。

锁:Lock

在多线程编程里面一个重要的概念是锁定,如果一个资源是多个线程共享的,为了保证数据的完整性, 在进行事务性操作时需要将共享资源锁定,这样可以保证在做事务性操作时只有一个线程能对资源进行操作, 从而保证数据的完整性。

  • lock.lock():取得锁
  • lock.unlock():释放锁

Condition

Condition:监视器,常与Lock一起使用,可以让不同的共享线程有不同的监视器,从而实现线程之间的相互配合。

Condition c = lock.newCondition();
  • await():造成当前线程在接到信号或被中断之前一直处于等待状态。
  • signal():唤醒一个等待线程。
  • signalAll():唤醒所有等待线程。

SimpleDateFormat

SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。

public class DateDemo {
	public static void main(String[] args) {
			Date date = new Date();
			SimpleDateFormat simpDate = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒SSS毫秒");
			String d = simpDate.format(date);
			Date p = null;
			try {
				p = simpDate.parse("2016年02月06日05时59分53秒222毫秒");
			} catch (ParseException e1) {
				e1.printStackTrace();
			}
			System.out.println(d);
			System.out.println(p);
	}
}
/*
	Run result:
		2016年10月13日14时59分07秒605毫秒
		Sat Feb 06 05:59:53 CST 2016
*/

Runtime

每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime 方法获取当前运行时。

public class RunTimeDemo {
	public static void main(String[] args) throws IOException, InterruptedException {
		Runtime runt = Runtime.getRuntime();	//获取runtime的instance
		Process p = runt.exec("C:\\Windows\\notepad.exe");	//启动记事本
		Thread.sleep(3000);	//睡眠3秒
		p.destroy();	//杀死当前的进程
	}
}

DecimalFormat

DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。该类设计有各种功能,使其能够解析和格式化任意语言环境中的数,包括对西方语言、阿拉伯语和印度语数字的支持。它还支持不同类型的数,包括整数 (123)、定点数 (123.4)、科学记数法表示的数 (1.23E4)、百分数 (12%) 和金额 ($123)。所有这些内容都可以本地化。

public class DecimalFormatDemo {
	public static void main(String[] args) {
		MyDecimalFormat.format("###,###,###$", 10252155.33);
		MyDecimalFormat.format("###,###%",25542);//百分之
		MyDecimalFormat.format("###,###\u2030",56200);//千分之
	}
}

class MyDecimalFormat{
	public static void format(String format,double values){
		DecimalFormat df = new DecimalFormat(format);
		String str = df.format(values);
		System.out.println("原数值:["+values+"]格式化后为:["+str+"]");
	}
}

BigInteger

不可变的任意精度的整数。所有操作中,都以二进制补码形式表示 BigInteger(如 Java 的基本整数类型)。BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。另外,BigInteger 还提供以下运算:模算术、GCD 计算、质数测试、素数生成、位操作以及一些其他操作。

import java.math.BigInteger;
public class BigIntegerDemo {
	public static void main(String[] args) {
		BigInteger b1 = new BigInteger("1212114646545646545646546");
		BigInteger b2 = new BigInteger("448486164564646546");
		BigInteger[] resultArr = b1.divideAndRemainder(b2);
		System.out.println("整数部位:"+resultArr[0]+"\n小数部位:"+resultArr[1]);
		System.out.println("加法:"+b1.add(b2));
	}
}

clone()

创建并返回此对象的一个副本。

public class Democlone {

	public static void main(String[] args) {
		CloneDemo s = new CloneDemo("张三");
		CloneDemo d = null;
		try {
			d = (CloneDemo)s.clone();
		} catch (CloneNotSupportedException e) {
			e.printStackTrace();
		}
		d.print();
	}
}

class CloneDemo implements Cloneable{
	private String name;

	public CloneDemo(String name) {
		this.name = name;
	}
	
	public Object clone() throws CloneNotSupportedException{
		return super.clone();
	}
	
	public void print(){
		System.out.println("Name为:"+this.name);
	}
	
}

Timer

一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class TimerTaskDemo {
	public static void main(String[] args) {
		Timer t = new Timer();	//建立Timer实例
		TimerTasks ts = new TimerTasks(); //建立任务实例
		t.schedule(ts, 1000,1000);
	}
}

class TimerTasks extends TimerTask{
	public void run(){
		SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date nowDate = new Date();
		System.out.println(sd.format(nowDate));
	}
}

6
憧憬Licoy
版权声明:本站原创文章,由憧憬Licoy于2016年10月13日发表,共计7138字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(6条评论)
Loading...
232 评论达人LV.1
2016-10-14 18:31:05 回复

签到成功!签到时间:2016-10-14 18:05:00,每日打卡,生活更精彩哦~

免费SSL 评论达人LV.1
2016-10-14 09:33:27 回复

朋友,交换链接吗?

李光春 评论达人LV.1
2016-10-13 20:19:56 回复

最近我也在学这个