锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
棣栧厛鎴戜滑鏋勫緩涓や釜綾?/span>People鍜?/span>Person錛屽畠浠殑瀹炰緥鍛嗕細浼氱敤鏉ョ浉浜掑鍒躲?/span>
People.java錛?/span>
package com.mangocity.test;
/**
*@authorCMTobby
*/
publicclass People {
public People() {
// TODO Auto-generated constructor stub
}
private String name;//濮撳悕
privateintage;//騫撮緞
private String email;
public String getEmail() {
returnemail;
}
publicvoid setEmail(String email) {
this.email = email;
}
publicint getAge() {
returnage;
}
publicvoid setAge(int age) {
this.age = age;
}
public String getName() {
returnname;
}
publicvoid setName(String name) {
this.name = name;
}
}
Person.java錛?/span>
package com.mangocity.test;
/**
*@authorCMTobby
*/
publicclass Person {
private String name;
privateintage;
private String address;
public String getAddress() {
returnaddress;
}
publicvoid setAddress(String address) {
this.address = address;
}
publicint getAge() {
returnage;
}
publicvoid setAge(int age) {
this.age = age;
}
public String getName() {
returnname;
}
publicvoid setName(String name) {
this.name = name;
}
}
鎺ョ潃鏋勫緩鎴戜滑鐨勬祴璇曠被
import org.apache.commons.beanutils.*;
publicclass TestBeanUtils {
/**
*@paramargs
*/
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
People tobby=new People();
Person cindy=new Person();
tobby.setAge(23);
tobby.setName("CMTobby");
tobby.setEmail("xiaozhu87487705@163.com");
cindy.setName("Cindyelf");
cindy.setAge(24);
try {
BeanUtils.copyProperties(cindy, tobby);
System.out.println(cindy.getName()+":"+cindy.getAge());
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
榪愯璇ョ▼搴忚緭鍑烘槸錛?/span>CMTobby:23銆傝繖璇存槑緇忚繃BeanUtils.copyProperties涔嬪悗cindy涓?/span>name鍜?/span>age灞炴х殑鍊煎凡緇忚tobby涓殑鍚屽悕灞炴х粰“瑕嗙洊”浜嗭紝鑷充簬tobby涓湁鑰?/span>cindy涓病鏈夌殑email灞炴ф湁娌℃湁澶嶅埗鍒?/span>cindy涓氨涓嶅緱鑰岀煡浜嗭紝鎹垜鐨勭寽嫻嬪簲璇ユ槸娌℃湁鐨勶紝鍥犱負鍦?/span>cindy涓病鏈夊湴鏂規斁榪欎釜灞炴у晩錛岃屼笖灝辯畻澶嶅埗榪囧幓浜嗭紝鎴戜滑濡備綍寰楀埌榪欎釜鍊煎憿錛熼毦閬撶敤cindy.getEmail()鍚楋紝鍙槸cindy鏍規湰娌℃湁榪欎釜鏂規硶鍟婏紵褰撶劧榪欏彧鏄垜鐨勭寽嫻嬶紝涓嶇煡鍝綅杈句漢鏈夊噯紜殑絳旀錛屾榪庢寚姝o紝^_^銆?/span>
閭d箞榪欎釜澶嶅埗榪囩▼鏄浣曠殑鍛紵鏄洿鎺ュ睘鎬у灞炴х殑鍊兼嫹璐濆悧錛屼緥濡?/span>cindy.name=tobby.name錛熻繕鏄佸姙娉曪紝灝嗘祴璇曡繘琛屽埌搴曘?/span>
1.鎴戝皢Person涓殑name灞炴ф敼鍚嶄負name11錛?/span>age灞炴ф敼涓?/span>age11錛?/span>get鍜?/span>set鏂規硶閮藉仛鐩稿簲鐨勪慨鏀癸紝姝ゆ椂榪愯紼嬪簭錛岃緭鍑虹粨鏋滀負錛?/span>CMTobby:23錛屽拰鍓嶉潰鐨勪竴鏍鳳紝鐢辨鍙互鎺掗櫎鍊兼嫹璐濊繖涓亣璁句簡錛屽洜涓烘鏃?/span>cindy涓病鏈変簡name灞炴ц屾槸name11灞炴с?/span>
2.鎴戝皢Person涓殑setName鍜?/span>setAge鏂規硶鍒嗗埆鏀逛負setName11鍜?/span>setAge11.OK錛屽啀嬈¤繍琛屾垜浠殑紼嬪簭錛岃繖鏃剁殑杈撳嚭鏄細Cindyelf:24錛屾垜浠彂鐜?/span>cindy鐨?/span>name灞炴у拰age灞炴х殑鍊奸兘娌℃湁琚鐩栨帀錛屼篃灝辨槸璇?/span>tobby涓殑鍊奸兘娌℃湁鎷瘋礉榪囨潵錛屼負浠涔堝憿錛?/span>
3.灝嗘垜浠▼搴忔仮澶嶅埌鍒氬紑濮嬬殑鏍峰瓙錛屽嵆涓婇潰鎵璐寸殑浠g爜閭f牱錛岀劧鍚庡皢Person涓殑setAge鏂規硶娉ㄩ噴鎺夛紝騫舵敞閲婃帀TestBeanUtils涓殑cindy.setAge(24)榪欒浠g爜銆傝繍琛岀▼搴忥紝杈撳嚭緇撴灉鏄細CMTobby:0銆?/span>tobby涓?/span>age灞炴х殑鍊兼病鏈夋嫹璐濊繃鏉ワ紝涓轟粈涔堝憿錛?/span>
鍩轟簬涓婅堪涓や釜嫻嬭瘯錛屾垜鐚滄祴BeanUtils.copyProperties鐨勮涓鴻繃紼嬫槸榪欐牱鐨勶細棣栧厛閫氳繃java鐨勫弽灝勫緱鍒?/span>tobby涓殑鎵鏈夊煙錛岀劧鍚庢牴鎹煙鐨勫悕瀛楄皟鐢?/span>cindy涓浉搴旂殑set鏂規硶銆備婦涓緥瀛愶紝BeanUtils鍙戠幇tobby涓湁涓?/span>name灞炴э紝閭d箞瀹冧細灝濊瘯鎵цcindy.setName()榪欎釜鏂規硶銆傝繖灝卞緢瀹規槗瑙i噴嫻嬭瘯2鍜屾祴璇?/span>3鐨勭粨鏋滀簡錛氬洜涓?/span>cindy涓病鏈変簡setName鎴栬?/span>setAge(琚敼鎴愪簡setName11鍜?/span>setAge11鎴栬呰娉ㄩ噴鎺変簡)錛屾墍鏈?/span>cindy鐨?/span>name灞炴т笉浼氬彉錛屼粛鐒舵槸浠ュ墠鐨勫箋傝屽湪嫻嬭瘯1涓紝鍥犱負cindy瀵硅薄鏈?/span>setName鏂規硶錛屾墍浠?/span>name11灞炴х殑鍊間細琚鐩栨帀銆?/span>
鍋氬畬涓婅堪嫻嬭瘯涔嬪悗錛屾垜闂茬潃鏃犺亰鍙堝仛浜嗗涓嬩袱涓祴璇曪細
4.灝?/span>Person涓殑setName鍜?/span>setAge鏀逛負setname鍜?/span>setage錛岀▼搴忚緭鍑虹粨鏋滄槸錛?/span>CMTobby:23錛?/span>cindy涓殑name灞炴у拰age灞炴х殑鍊奸兘鍙戠敓浜嗗彉鍖栵紱
5.灝?/span>Person涓殑setName鍜?/span>setAge鏀逛負setNAme鍜?/span>setAGe,紼嬪簭杈撳嚭緇撴灉鏄細Cindyelf:24錛?/span>tobby涓殑灞炴х殑鍊奸兘娌℃湁鎷瘋礉榪囨潵銆?/span>
鍩轟簬榪欎袱涓祴璇曪紝鎴戞兂榪囩▼浼氫笉浼氭槸榪欐牱鐨勶細濡傛灉BeanUtils鍙戠幇tobby涓湁涓?/span>name灞炴э紝閭d箞瀹冨氨浼氬皾璇曟墽琛?/span>cindy.setName()鎴栬?/span>cindy.setname()銆傚綋鐒惰繖浜涢兘鍙槸鎴戠殑鎺ㄨ錛屼粎渚涘弬鑰冿紝鎵鏈夌殑絳旀閮戒細鍦?/span>BeanUtils鐨勬簮鐮佷腑鎵懼埌錛?/span>^_^錛岃繕鏈涘摢浣嶈揪浜轟笉鍚濆憡鐭ャ?br />
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1703702
Class Loaders鏄姩鎬佸姞杞?/span>Java綾諱笌Resource鐨勪竴縐嶆満鍒躲傚畠鏀寔Laziness錛?/span>type-safe linkage錛?/span>user-defined extensibility鍜?/span>multiple communicating namespaces榪?/span>4縐嶇壒鎬с?/span>
l Lazy loading錛?/span>Class鍙湁鍦ㄩ渶瑕佺殑鏃跺欐墠鍔犺澆銆傝繖鏍峰噺灝戜簡鍐呭瓨浣跨敤閲忥紝鑳芥彁楂樼郴緇熷弽鏄犻熷害錛?/span>
l Type-safe linkage錛氬姩鎬佺被鍔犺澆涓嶄細鐮村潖JVM鐨勭被鍨嬪畨鍏紱
l User-definable class loading policy錛氬紑鍙戣呭彲浠ヨ嚜瀹氫箟鐨勭被鍔犺澆鍣紝鎺у埗鍔ㄦ佺被鍔犺澆榪囩▼錛?/span>
l Multiple namespaces錛?/span>JVM鍏佽浣跨敤涓嶅悓鐨勭被鍔犺澆鍣ㄥ姞杞界浉鍚岀殑Class鍚嶇О錛屼絾涓嶅悓鍐呭鐨勭被銆?/span>
Class Loaders鏃╁湪JDK1.0鏃跺氨宸插瓨鍦紝鏈寮濮嬬殑鐩殑鏄嬌HotJava嫻忚鍣ㄨ兘鍔犺澆Applet銆備粠閭d互鍚庯紝鍔ㄦ佺被鍔犺澆鏈哄埗琚箍娉涘簲鐢ㄥ埌鍏朵粬鏂歸潰錛屼緥濡?/span>web application server涓?/span>Servlets鐨勫姞杞姐?/span>class loader鍦?/span>JDK 1.0錛?/span>1.1鐗堟湰瀛樺湪鐨勭己闄鳳紝宸茬粡鍦?/span>JDK 1.2瑙e喅錛屽叾緙洪櫡涓昏鏄紪鍐欎笉姝g‘鐨?/span>Class Loader浼氶犳垚綾誨瀷瀹夊叏闂銆?/span>
2錛?/span>Class Loaders
Class Loader鐨勭洰鐨勬槸鍔ㄦ佸姞杞?/span>Java綾誨拰Resource銆?/span>Java綾繪槸騫沖彴鏃犲叧鐨勶紝鏍囧噯鐨勶紝鍏鋒湁瑙勮寖浜岃繘鍒舵枃浠舵牸寮忕殑銆?/span>class鏂囦歡鏈夌紪璇戝櫒鐢熸垚錛屽彲浠ヨ浠諱綍涓涓?/span>JVM鍔犺澆銆?/span>Java綾葷殑琛ㄧ幇褰㈠紡涓嶄粎鍙湁.class鏂囦歡錛岃繕鍙互涓哄唴瀛?/span>buffer錛屾垨鏄綉緇滄暟鎹祦銆?/span>
JVM鎵цclass鏂囦歡鍐呯殑Byte code銆備絾鏄?/span>Byte code涓嶆槸class鏂囦歡鐨勫叏閮ㄥ唴瀹癸紝class鏂囦歡鍐呰繕鍖呭惈絎﹀彿琛紝琛ㄧず綾伙紝灞炴у拰鏂規硶鍚嶏紝浠ュ強綾誨唴寮曠敤鍒板叾浠栫被錛屽睘鎬э紝鍜屾柟娉曞悕銆備緥濡備笅闈㈢殑綾?/span>
class C{
void f(){
D d=new D();
}
}
綾繪枃浠跺唴綾?/span>C寮曠敤D銆備負浜嗚兘璁?/span>JVM鐭ラ亾D綾繪槸浠涔堬紝JVM蹇呴』瑕佸厛load D鐨?/span>class file騫跺垱寤?/span>D class瀵硅薄銆?/span>
JVM浣跨敤綾誨姞杞藉櫒鍔犺澆綾繪枃浠訛紝騫跺垱寤?/span>Class瀵硅薄銆傜被鍔犺澆鍣ㄩ兘鏄?/span>ClassLoader鐨勫瓙綾誨疄渚嬨?/span>ClassLoader.loadClass鏂規硶閫氳繃鑾峰緱涓涓被鍚嶏紝榪斿洖涓涓?/span>Class瀵硅薄錛岃〃紺鴻綾葷殑綾誨瀷銆備笂闈㈢殑浠g爜閲岋紝鍋囪C琚被鍔犺澆鍣?/span>L鍔犺澆錛屽垯L鏄?/span>C鐨勫姞杞藉櫒銆?/span>JVM灝嗕嬌鐢?/span>L鍔犺澆鎵鏈夎C寮曠敤鍒扮殑鍏朵粬Java綾匯?/span>
濡傛灉D榪樻病鏈夎鍔犺澆錛?/span>L灝嗗姞杞?/span>D錛?/span>
L.loadClass(“D”)
褰?/span>D宸茬粡琚姞杞斤紝JVM灝卞彲浠ュ垱寤?/span>D鐨勪竴涓璞″疄渚嬨?/span>
涓涓?/span>Java搴旂敤紼嬪簭鍙互浣跨敤涓嶅悓綾誨瀷鐨勭被鍔犺澆鍣ㄣ備緥濡?/span>Web Application Server涓紝Servlet鐨勫姞杞戒嬌鐢ㄥ紑鍙戝晢鑷畾涔夌殑綾誨姞杞藉櫒錛?/span>java.lang.String鍦ㄤ嬌鐢?/span>JVM緋葷粺鍔犺澆鍣?/span>,Bootstrap Class Loader錛屽紑鍙戝晢瀹氫箟鐨勫叾浠栫被鍒欑敱AppClassLoader鍔犺澆銆傚湪JVM閲岀敱綾誨悕鍜岀被鍔犺澆鍣ㄥ尯鍒笉鍚岀殑Java綾誨瀷銆傚洜姝わ紝JVM鍏佽鎴戜滑浣跨敤涓嶅悓鐨勫姞杞藉櫒鍔犺澆鐩稿悓namespace鐨?/span>java綾伙紝鑰屽疄闄呬笂榪欎簺鐩稿悓namespace鐨?/span>java綾誨彲浠ユ槸瀹屽叏涓嶅悓鐨勭被銆傝繖縐嶆満鍒跺彲浠ヤ繚璇?/span>JDK鑷甫鐨?/span>java.lang.String鏄敮涓鐨勩?/span>
ClassLoader瀛愮被闇瑕侀噸杞?/span>loadClass鏂規硶浠ュ疄鐜扮敤鎴瘋嚜宸辯殑綾誨姞杞芥柟寮忥紝涓嬮潰鏄嚜瀹氫箟涓涓被鍔犺澆鍣ㄤ緥瀛愶細
package org.colimas.webapp;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.StringTokenizer;
/**
*綾誨姞杞藉櫒鍔犺澆Servlet錛?/span>URLClassLoader鏄?/span>ClassLoader鐨勪竴涓瓙綾伙紝鍙互閫氳繃URL鍔犺澆Java綾繪垨鍏跺畠璧勬簮銆?/span>
* @author 瓚欑
*
*/
public class WebAppClassLoader extends URLClassLoader {
private ClassLoader _parent;
public WebAppClassLoader(ClassLoader parent) {
super(new URL[0], parent);
_parent=parent;
if (parent==null)
throw new IllegalArgumentException("no parent classloader!");
}
//榪藉姞涓涓?/span>Class Path銆?/span>
public void addClassPath(String classPath) throws IOException{
if (classPath == null)
return;
StringTokenizer tokenizer= new StringTokenizer(classPath, ",;");
while (tokenizer.hasMoreTokens())
{
URL url=null;
File file=new File(tokenizer.nextToken()).getCanonicalFile();
url=file.toURI().toURL();
addURL(url);
}
}
//鍔犺澆綾?/span>
public synchronized Class loadClass(String name)
throws ClassNotFoundException {
return loadClass(name,false);
}
protected synchronized Class loadClass(String name, boolean resolve)
throws ClassNotFoundException {
Class c= findLoadedClass(name);
ClassNotFoundException ex= null;
if (c == null && _parent!=null ){
try{
c= _parent.loadClass(name);
}catch (ClassNotFoundException e){
ex= e;
}
}
if (c == null){
try{
c= this.findSystemClass(name);
}catch (ClassNotFoundException e){
ex= e;
}
}
if (c == null)
throw ex;
if (resolve)
resolveClass(c);
return c;
}
}
loadClass鏂規硶涓嬌鐢?/span>findLoadedClass鏂規硶媯鏌ョ被鏄惁宸茬粡琚姞杞姐傝鏂規硶鏄?/span>Native鏂規硶錛屽疄鐜板湪JVM鐨?/span>ClassLoader.c鏂囦歡鍐呯殑Java_java_lang_ClassLoader_findLoadedClass鍑芥暟銆傚鏋滆繑鍥炰負null錛屽垯琛ㄧず綾昏繕娌℃湁琚姞杞斤紝浜庢槸鍦ㄥ叾Parent綾誨姞杞藉櫒閲嶅鎵?/span>_parent.loadClass錛屽鏋滀粛鐒惰繑鍥?/span>null錛屽垯瑕佸湪緋葷粺涓煡鎵撅紝findSystemClass錛屽鏋滀粛鐒舵病鏈夛紝鍒欐姏鍑哄紓甯搞傛垜浠紜繚澶氱嚎紼嬪湪鍚屼竴鏃墮棿鍙兘鍔犺澆涓嬈★紝鍥犳闇瑕?/span>synchronized銆?/span>
閫氬父鎴戜滑闇瑕佸姩鎬佹洿鏂頒竴涓?/span>Class銆備緥濡備竴涓?/span>Servlet瀹炵幇鍙戠敓鍙樺寲鏃訛紝鎴戜滑甯屾湜涓嶆槸閲嶅惎鏈嶅姟鍣ㄨ屾槸Reload銆備笅闈㈢殑綾?/span>ServletWrapper鎻愪緵浜嗕竴涓?/span>Servlet Reload鐨勫疄鐜版柟娉曪細
package org.colimas.webapp;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
/**
* @author 瓚欑
*
*/
public class ServletWrapper {
private Servlet theServlet;
private Class servletClass;
private ServletConfig config;
private String _servletname;
public ServletWrapper(ServletConfig config){
this.config=config;
}
public Servlet getServlet() throws ServletException{
synchronized (this) {
destroy();
try {
WebAppClassLoader loader=new WebAppClassLoader(this.getClass().getClassLoader());
String name=getServletName();
servletClass = loader.loadClass(name);
theServlet = (Servlet) servletClass.newInstance();
} catch( ClassNotFoundException ex1 ) {
} catch( InstantiationException ex ) {
}catch(IllegalAccessException ex2){
}
theServlet.init(config);
}
return theServlet;
}
public void destroy() {
if (theServlet != null) {
theServlet.destroy();
}
}
protected String getServletName(){
return _servletname;
}
}
getServlet()鑾峰緱涓涓?/span>Servlet瀵硅薄銆傞鍏堝垱寤轟竴涓柊鐨?/span>Servlet綾誨姞杞藉櫒銆?/span>loader.loadClass鍔犺澆鏈鏂扮殑Servlet錛?/span>servletClass.newInstance()瀹炰緥鍖栨柊鐨?/span>Servlet瀵硅薄錛屽茍theServlet.init(config);璁╁畠榪愯璧鋒潵銆傝繖縐嶆柟娉曞彧鏈夊湪涓嶆敼鍙?/span>Servlet鐨勬帴鍙f椂鏈夋晥鐨勩傚鏋滀綘瑕佸姞杞界殑綾諱笉瀹炵幇浠諱綍鎺ュ彛錛岄偅涔堝氨涓嶈兘鍦?/span>ServletWrapper鐩存帴浣跨敤璇ョ被鍚嶃傝屾槸瀹氫箟涓?/span>Object theServlet錛屽茍涓?/span>theServlet = servletClass.newInstance();錛?/span>鑰?/span>theServlet.init(config);涔熶笉寰椾笉鏀瑰啓涓猴細
Method m= servletClass.getMethod(“init”,…);
m.invoke(theServlet,…);
3. Type-safe Linkage鍜?/span>Namespace涓鑷存?/span>
JVM浣跨敤loaded class cache淇濆瓨class鍚嶅拰鍔犺澆璇?/span>class鐨勭被鍔犺澆鍣ㄣ傚綋JVM閫氳繃loadClass鑾峰緱class涔嬪悗錛屽畠鎵ц浠ヤ笅鎿嶄綔錛?/span>
l 媯鏌ヤ紶緇?/span>loadClass鐨勭被鍚嶆槸鍚﹀拰鐪熷疄綾誨悕涓鑷達紱
l 濡傛灉涓鑷達紝鍒欎繚瀛樺埌loaded class cache閲屻?/span>
ClassLoader.findLoadedClass灝辨槸鍦?/span>loaded class cache鏌ユ壘class鏄惁瀛樺湪鐨勩?/span>
涓轟簡淇濊瘉Type-safe錛?/span>Sun鍏徃鍋氫簡寰堝宸ヤ綔錛岀洰鍓嶄篃鏈変笉姝竴涓В鍐蟲柟妗堛備緥濡傦紝澧炲姞綰︽潫瑙勫垯錛?/span>Contraint Rule錛夌瓑銆?/span>
importjava.math.BigDecimal;
publicclassArith
{
privatestaticfinalintDEF_DIV_SCALE=10;
privateArith()
{
}
/**
*鎻愪緵綺劇‘鐨勫姞娉曡繍綆椼?/p>
*@paramv1琚姞鏁?/p>
*@paramv2鍔犳暟
*@return涓や釜鍙傛暟鐨勫拰
*/
publicstaticdoubleadd(doublev1,doublev2)
{
BigDecimalb1=newBigDecimal(Double.toString(v1));
BigDecimalb2=newBigDecimal(Double.toString(v2));
returnb1.add(b2).doubleValue();
}
/**
*鎻愪緵綺劇‘鐨勫噺娉曡繍綆椼?/p>
*@paramv1琚噺鏁?/p>
*@paramv2鍑忔暟
*@return涓や釜鍙傛暟鐨勫樊
*/
publicstaticdoublesub(doublev1,doublev2)
{
BigDecimalb1=newBigDecimal(Double.toString(v1));
BigDecimalb2=newBigDecimal(Double.toString(v2));
returnb1.subtract(b2).doubleValue();
}
/**
*鎻愪緵綺劇‘鐨勪箻娉曡繍綆椼?/p>
*@paramv1琚箻鏁?/p>
*@paramv2涔樻暟
*@return涓や釜鍙傛暟鐨勭Н
*/
publicstaticdoublemul(doublev1,doublev2)
{
BigDecimalb1=newBigDecimal(Double.toString(v1));
BigDecimalb2=newBigDecimal(Double.toString(v2));
returnb1.multiply(b2).doubleValue();
}
/**
*鎻愪緵錛堢浉瀵癸級綺劇‘鐨勯櫎娉曡繍綆楋紝褰撳彂鐢熼櫎涓嶅敖鐨勬儏鍐墊椂錛岀簿紜埌
*灝忔暟鐐逛互鍚?0浣嶏紝浠ュ悗鐨勬暟瀛楀洓鑸嶄簲鍏ャ?/p>
*@paramv1琚櫎鏁?/p>
*@paramv2闄ゆ暟
*@return涓や釜鍙傛暟鐨勫晢
*/
publicstaticdoublediv(doublev1,doublev2)
{
returndiv(v1,v2,DEF_DIV_SCALE);
}
/**
*鎻愪緵錛堢浉瀵癸級綺劇‘鐨勯櫎娉曡繍綆椼傚綋鍙戠敓闄や笉灝界殑鎯呭喌鏃訛紝鐢眘cale鍙傛暟鎸?/p>
*瀹氱簿搴︼紝浠ュ悗鐨勬暟瀛楀洓鑸嶄簲鍏ャ?/p>
*@paramv1琚櫎鏁?/p>
*@paramv2闄ゆ暟
*@paramscale琛ㄧず琛ㄧず闇瑕佺簿紜埌灝忔暟鐐逛互鍚庡嚑浣嶃?/p>
*@return涓や釜鍙傛暟鐨勫晢
*/
publicstaticdoublediv(doublev1,doublev2,intscale)
{
if(scale<0)
{
thrownewIllegalArgumentException("Thescalemustbeapositiveintegerorzero");
}
BigDecimalb1=newBigDecimal(Double.toString(v1));
BigDecimalb2=newBigDecimal(Double.toString(v2));
returnb1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
*鎻愪緵綺劇‘鐨勫皬鏁頒綅鍥涜垗浜斿叆澶勭悊銆?/p>
*@paramv闇瑕佸洓鑸嶄簲鍏ョ殑鏁板瓧
*@paramscale灝忔暟鐐瑰悗淇濈暀鍑犱綅
*@return鍥涜垗浜斿叆鍚庣殑緇撴灉
*/
publicstaticdoubleround(doublev,intscale){
if(scale<0)
{
thrownewIllegalArgumentException("Thescalemustbeapositiveintegerorzero");
}
BigDecimalb=newBigDecimal(Double.toString(v));
BigDecimalone=newBigDecimal("1");
returnb.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
}