新聞中心
Java代碼優(yōu)化的常用方法有什么
1)盡量指定類、方法的final修飾符。帶有final修飾符的類是不可派生的,Java編譯器會(huì)尋找機(jī)會(huì)內(nèi)聯(lián)所有的final方法,內(nèi)聯(lián)對(duì)于提升Java運(yùn)行效率作用重大,此舉能夠使性能平均提高50%。
我們擁有十年網(wǎng)頁設(shè)計(jì)和網(wǎng)站建設(shè)經(jīng)驗(yàn),從網(wǎng)站策劃到網(wǎng)站制作,我們的網(wǎng)頁設(shè)計(jì)師為您提供的解決方案。為企業(yè)提供成都網(wǎng)站制作、成都做網(wǎng)站、微信開發(fā)、微信小程序開發(fā)、成都做手機(jī)網(wǎng)站、H5開發(fā)、等業(yè)務(wù)。無論您有什么樣的網(wǎng)站設(shè)計(jì)或者設(shè)計(jì)方案要求,我們都將富于創(chuàng)造性的提供專業(yè)設(shè)計(jì)服務(wù)并滿足您的需求。
2)盡量重用對(duì)象。由于Java虛擬機(jī)不僅要花時(shí)間生成對(duì)象,以后可能還需要花時(shí)間對(duì)這些對(duì)象進(jìn)行垃圾回收和處理,因此生成過多的對(duì)象將會(huì)給程序的性能帶來很大的影響。
3)盡可能使用局部變量。調(diào)用方法時(shí)傳遞的參數(shù)以及在調(diào)用中創(chuàng)建的臨時(shí)變量都保存在棧中速度較快,其他變量,如靜態(tài)變量、實(shí)例變量等,都在堆中創(chuàng)建速度較慢。
4)慎用異常。異常對(duì)性能不利,只要有異常被拋出,Java虛擬機(jī)就必須調(diào)整調(diào)用堆棧,因?yàn)樵谔幚磉^程中創(chuàng)建了一個(gè)新的對(duì)象。異常只能用于錯(cuò)誤處理,不應(yīng)該用來控制程序流程。
5)乘法和除法使用移位操作。用移位操作可以極大地提高性能,因?yàn)樵谟?jì)算機(jī)底層,對(duì)位的操作是最方便、最快的,但是移位操作雖然快,可能會(huì)使代碼不太好理解,因此最好加上相應(yīng)的注釋。
6)盡量使用HashMap、ArrayList、StringBuilder,除非線程安全需要,否則不推薦使用 Hashtable、Vector、StringBuffer,后三者由于使用同步機(jī)制而導(dǎo)致了性能開銷。
盡量在合適的場(chǎng)合使用單例。使用單例可以減輕加載的負(fù)擔(dān)、縮短加載的時(shí)間、提高加載的效率,但并不是所有地方都適用于單例。
Java代碼,構(gòu)造方法?
/**
* @author geek
*/
public class Cylinder {
private double radius,
height;
public Cylinder() {
}
public Cylinder(double radius, double height) {
this.radius = radius;
this.height = height;
}
public double getVolume(){
return Math.PI*radius*radius*height;
}
public static void main(String[] args) {
Cylinder c=new Cylinder(3,7);
System.out.println("半徑"+c.radius);
System.out.println("高"+c.height);
System.out.printf("體積%.2f",c.getVolume());
}
}
Java代碼的優(yōu)化方法有哪些
說到代碼優(yōu)化,每個(gè)人或多或少都掌握一到兩種方法,但是這樣的方法對(duì)提升代碼運(yùn)行效率效果不大,最重要是對(duì)代碼的重視和了解,這樣才能提升代碼的運(yùn)行效率。在進(jìn)行代碼優(yōu)化的過程中,方法是非常重要的,多掌握幾種方法,根據(jù)代碼的不同情況選擇適合的方法進(jìn)行優(yōu)化。下面電腦培訓(xùn)為大家介紹Java代碼優(yōu)化的幾種方法。
1、使用指定類、方法的final修飾符
具有final修飾符的類不可派生。在Java核心API中,有許多最終應(yīng)用程序的例子,例如java.lang.String,整個(gè)類都是final。為類指定final修飾符允許繼承類,并且為方法指定final修飾符允許覆蓋該方法。如果將類指定為final,IT培訓(xùn)認(rèn)為該類的所有方法都是final。Java編譯器將尋找內(nèi)聯(lián)所有最終方法的機(jī)會(huì)。內(nèi)聯(lián)對(duì)于提高Java操作的效率非常重要。這可以將性能平均提高50%。
2、重用對(duì)象
String對(duì)象的使用是非常重要的,StringBuilder/StringBuffer并不是字符串連接。由于Java虛擬機(jī)需要時(shí)間來生成對(duì)象,所以將來垃圾收集和處理這些對(duì)象可能需要一些時(shí)間。因此,生成太多對(duì)象將對(duì)程序的性能產(chǎn)生很大影響。
3、使用局部變量
調(diào)用方法時(shí)傳遞的參數(shù)以及在調(diào)用中創(chuàng)建的臨時(shí)變量都保存在堆棧中,速度更快。其他變量(如靜態(tài)變量和實(shí)例變量)在堆中創(chuàng)建并且速度較慢。此外,昆明北大青鳥發(fā)現(xiàn)在堆棧中創(chuàng)建的變量,當(dāng)方法完成運(yùn)行時(shí),內(nèi)容消失,不需要進(jìn)行額外的垃圾收集。
4、及時(shí)關(guān)閉流
在Java編程過程中,在執(zhí)行數(shù)據(jù)庫連接和I/O流操作時(shí)要小心。使用后,北大青鳥云南嘉薈校區(qū)官網(wǎng)建議應(yīng)及時(shí)關(guān)閉以釋放資源。因?yàn)檫@些大型物體的操作會(huì)導(dǎo)致系統(tǒng)的大量開銷,稍微粗心會(huì)導(dǎo)致嚴(yán)重的后果。
java中的方法代碼存在了哪里
類的實(shí)例方法在內(nèi)存中是只有一份,不過肯定不會(huì)是第一個(gè)對(duì)象中,如果是第一個(gè)對(duì)象的話,那么當(dāng)?shù)谝粋€(gè)對(duì)象被銷毀的時(shí)候,那么后面的對(duì)象就永遠(yuǎn)無法調(diào)用了...
類的實(shí)例方法存在一個(gè)專門的區(qū)叫方法區(qū),事實(shí)上類剛裝載的時(shí)候就被裝載好了,不過它們?cè)?睡眠",只是這些方法必須當(dāng)有對(duì)象產(chǎn)生的時(shí)候才會(huì)"蘇醒".(比如,一個(gè)輸出類的成員變量的方法,如果連對(duì)象都沒有,何來的輸出成員變量).所以,方法在裝載的時(shí)候就有了,但是不可用,因?yàn)樗鼪]有指象任何一個(gè)對(duì)象。
而靜態(tài)的又不一樣了,靜態(tài)的東西存在靜態(tài)區(qū),他們和類是一個(gè)等級(jí)的,就是說只要類被裝載,它們就可以直接用.(用類名來調(diào)用).他們不依賴與任何對(duì)象,所以也不能輸出任何對(duì)象的成員屬性.(除非成員屬性也是靜態(tài)的).
而你最后的一句話也是錯(cuò)的,"類的所有數(shù)據(jù)在內(nèi)存中只有靜態(tài)的才又空間".
當(dāng)然不是,每個(gè)對(duì)象在new的時(shí)候都會(huì)在堆區(qū)中開辟內(nèi)存,用來保存對(duì)象的屬性和方法.(實(shí)際上方法保存的只是方法區(qū)的引用,如果保存的是方法本身,那么試想一下,有多少個(gè)對(duì)象就得有多少個(gè)方法,那么又和第一點(diǎn)中"實(shí)例方法在內(nèi)存中只有一份拷貝"相矛盾了)
好了,事實(shí)上內(nèi)存圖很復(fù)雜和麻煩,算比較深的東西了,很多用JAVA多年的人也不太了解其原理,因?yàn)殚_發(fā)也不要用..
更多的問題可以去遠(yuǎn)標(biāo)培訓(xùn)去問技術(shù)老師。
java 的代碼詳解
class Person{//Persion類
String name;//String類變量,未初始化,默認(rèn)null
int age;//int類變量,默認(rèn)0
public Person()//Person類的無參構(gòu)造方法,一般用來初始化變量,如之前的name。 比如有時(shí)候需要定義人這個(gè)類特有的屬性,會(huì)說話,那么一般會(huì)在無參構(gòu)造函數(shù)里面寫上canTalk=true;
{
}
public Person(String name,int age)//Person類的有參構(gòu)造方法,參數(shù)name和age,和類變量name、age無關(guān)
{
this.name=name;//this指Persion類,就是把于傳過來變量name賦值給之前的類變量name
this.age=age;//同上
}
public String talk(){//具有String返回值的方法,調(diào)用它的時(shí)候會(huì)得到String返回值
return "我是"+this.name+",今年"+this.age+"歲";//調(diào)用talk的時(shí)候用String a=talk();的形式,a的值就是"我是"+this.name+",今年"+this.age+"歲"
}
}
public class TestObjectArray{//TestObjectArray公共類,java文件的文件名需和公共類值相同,這段代碼必須出現(xiàn)在TestObjectArray.java文件中
public static void main(String[] args){//主方法,程序的入口
Person[] p={new Person("張三",25),new Person("李四",30),new Person("王五",35)};//實(shí)例化Persion類,用人這個(gè)類來舉例,每個(gè)人都有相同的一些特性,但每個(gè)人不同特性的屬性值不同,如年齡的大小不同,實(shí)例化就相當(dāng)于產(chǎn)生不同的人。這里是用數(shù)組的形式實(shí)例化
for(int i=0;ip.length;i++){//根據(jù)p的長(zhǎng)度循環(huán)
System.out.println(p[i].talk());//p[1]時(shí),會(huì)調(diào)用Persion類里面的talk()函數(shù),并且傳入的參數(shù)是 "張三",25 ,那么會(huì)顯示:"我是張三,今年25歲" 。System.out.println()換行顯示括號(hào)內(nèi)的內(nèi)容
}
}
}
標(biāo)題名稱:java的方法代碼 JAVA的方法
網(wǎng)站鏈接:http://fisionsoft.com.cn/article/hpioih.html