欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

java常范的幾種錯(cuò)誤

這篇文章將為大家詳細(xì)講解有關(guān)java常范的幾種錯(cuò)誤,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

專注于為中小企業(yè)提供網(wǎng)站設(shè)計(jì)、做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)三都免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了超過千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

1、空指針錯(cuò)誤

在java數(shù)組的使用中,有時(shí)候需要對(duì)字符串?dāng)?shù)組中的元素進(jìn)行對(duì)比。那么當(dāng)元素不為null時(shí),程序會(huì)正常運(yùn)行;然而,一旦對(duì)比的元素為null,那么程序就會(huì)出現(xiàn)空指針錯(cuò)誤。

解決方法:加入保護(hù),當(dāng)元素不為null時(shí)在進(jìn)行判斷。

public static void main(Sring[] args){
  String [] sums = "adfafA";
  for(int i=0;i<sums.length;i++){
    if(sums[]!=null && sums[i].equals(sr)){
      System.out.println("找到元素"+sums[i]);
      break;
    }
  }
}

2、數(shù)據(jù)的精度范圍與類型轉(zhuǎn)換

在Java中有4種基礎(chǔ)類型數(shù)據(jù):

整型:  -1 2 3 4 ……

浮點(diǎn)型:float 1.3f ;  double 3.2   3.5d (未標(biāo)明類型,默認(rèn)最高精度)

字符型:采用Unicode編碼,2字節(jié)

布爾型:true、false

四種基礎(chǔ)類型數(shù)據(jù)的精度范圍各不相同,逐級(jí)提升。

如果在使用數(shù)據(jù)類型時(shí),不注意精度范圍,就會(huì)出現(xiàn)數(shù)據(jù)溢出,從而發(fā)生計(jì)算錯(cuò)誤。

四種基礎(chǔ)類型中,整型,浮點(diǎn)型和字符型數(shù)據(jù)是可以相互轉(zhuǎn)化的。

轉(zhuǎn)換規(guī)則如下:

①隱形轉(zhuǎn)換:精度小的數(shù)據(jù)值,賦值給精度大的值,可以自動(dòng)轉(zhuǎn)換。(低級(jí)向高級(jí))

②強(qiáng)制轉(zhuǎn)換:范圍大的數(shù)據(jù)值,(高級(jí)到低級(jí))

③運(yùn)算自動(dòng)提升規(guī)則:運(yùn)算中,自動(dòng)轉(zhuǎn)換為精度高的數(shù)據(jù)類型。

3、三種循環(huán)的使用

①for 循環(huán):是一種有限次數(shù)的循環(huán),在循環(huán)前,規(guī)定好循環(huán)次數(shù)。

for(表達(dá)式;表達(dá)式;表達(dá)式){
        循環(huán)體
 }

break語句:執(zhí)行后,立即跳出循環(huán),不在執(zhí)行后面的語句,且結(jié)束所有循環(huán)。

continue 語句:執(zhí)行后,立即跳出當(dāng)前單詞循環(huán),重新判斷條件是否繼續(xù)循。

②While循環(huán)語句:適合未知次數(shù)的循環(huán)。

while(條件表達(dá)式){
  語句
 };

③do-While循環(huán):也是未知次數(shù)的循環(huán)。單至少要先執(zhí)行一次do,在判斷。如果while成立,繼續(xù)循環(huán),反之,結(jié)束循環(huán)。

do {
 語句
 }while(條件表達(dá)式);

4、多次拷貝字符串

測試所不能發(fā)現(xiàn)的一個(gè)錯(cuò)誤是生成不可變(immutable)對(duì)象的多份拷貝。不可變對(duì)象是不可改變的,因此不需要拷貝它。最常用的不可變對(duì)象是String。

如果你必須改變一個(gè)String對(duì)象的內(nèi)容,你應(yīng)該使用StringBuffer。下面的代碼會(huì)正常工作:

String s = new String ("Text here");

但是,這段代碼性能差,而且沒有必要這么復(fù)雜。你還可以用以下的方式來重寫上面的代碼:

String temp = "Text here";
String s = new String (temp);

但是這段代碼包含額外的String,并非完全必要。更好的代碼為:

String s = "Text here";

5、沒有克隆(clone)返回的對(duì)象

封裝(encapsulation)是面向?qū)ο缶幊痰闹匾拍睢2恍业氖?,Java為不小心打破封裝提供了方便——Java允許返回私有數(shù)據(jù)的引用(reference)。下面的代碼揭示了這一點(diǎn):

import java.awt.Dimension;
  /***Example class.The x and y values should never*be negative.*/
  public class Example{
  private Dimension d = new Dimension (0, 0);
  public Example (){ }
  /*** Set height and width. Both height and width must be nonnegative * or an exception is thrown.*/
  public synchronized void setValues (int height,int width) throws IllegalArgumentException{
  if (height <0 || width <0)
  throw new IllegalArgumentException();
  d.height = height;
  d.width = width;
  }
  public synchronized Dimension getValues(){
  // Ooops! Breaks encapsulation
  return d;
  }
  }

Example類保證了它所存儲(chǔ)的height和width值永遠(yuǎn)非負(fù)數(shù),試圖使用setValues()方法來設(shè)置負(fù)值會(huì)觸發(fā)異常。不幸的是,由于getValues()返回d的引用,而不是d的拷貝,你可以編寫如下的破壞性代碼:

  Example ex = new Example();
  Dimension d = ex.getValues();
  d.height = -5;
  d.width = -10;

現(xiàn)在,Example對(duì)象擁有負(fù)值了!如果getValues() 的調(diào)用者永遠(yuǎn)也不設(shè)置返回的Dimension對(duì)象的width 和height值,那么僅憑測試是不可能檢測到這類的錯(cuò)誤。

不幸的是,隨著時(shí)間的推移,客戶代碼可能會(huì)改變返回的Dimension對(duì)象的值,這個(gè)時(shí)候,追尋錯(cuò)誤的根源是件枯燥且費(fèi)時(shí)的事情,尤其是在多線程環(huán)境中。

更好的方式是讓getValues()返回拷貝:

  public synchronized Dimension getValues(){
  return new Dimension (d.x, d.y);
  }

6、拷貝錯(cuò)誤的數(shù)據(jù)

有時(shí)候程序員知道必須返回一個(gè)拷貝,但是卻不小心拷貝了錯(cuò)誤的數(shù)據(jù)。由于僅僅做了部分的數(shù)據(jù)拷貝工作,下面的代碼與程序員的意圖有偏差:

import java.awt.Dimension;
  /*** Example class. The height and width values should never * be
  negative. */
  public class Example{
  static final public int TOTAL_VALUES = 10;
  private Dimension[] d = new Dimension[TOTAL_VALUES];
  public Example (){ }
  /*** Set height and width. Both height and width must be nonnegative * or an exception will be thrown. */
  public synchronized void setValues (int index, int height, int width) throws IllegalArgumentException{
  if (height <0 || width <0)
  throw new IllegalArgumentException();
  if (d[index] == null)
  d[index] = new Dimension();
  d[index].height = height;
  d[index].width = width;
  }
  public synchronized Dimension[] getValues()
  throws CloneNotSupportedException{
  return (Dimension[])d.clone();
  }
  }

這兒的問題在于getValues()方法僅僅克隆了數(shù)組,而沒有克隆數(shù)組中包含的Dimension對(duì)象,因此,雖然調(diào)用者無法改變內(nèi)部的數(shù)組使其元素指向不同的Dimension對(duì)象,但是調(diào)用者卻可以改變內(nèi)部的數(shù)組元素(也就是Dimension對(duì)象)的內(nèi)容。方法getValues()的更好版本為:

 public synchronized Dimension[] getValues() throws CloneNotSupportedException{
  Dimension[] copy = (Dimension[])d.clone();
  for (int i = 0; i
  // NOTE: Dimension isn’t cloneable.
  if (d != null)
  copy[i] = new Dimension (d[i].height, d[i].width);
  }
  return copy;
  }

在克隆原子類型數(shù)據(jù)的多維數(shù)組的時(shí)候,也會(huì)犯類似的錯(cuò)誤。原子類型包括int,float等。簡單的克隆int型的一維數(shù)組是正確的,如下所示:

 public void store (int[] data) throws CloneNotSupportedException{
  this.data = (int[])data.clone();
  // OK
  }

拷貝int型的二維數(shù)組更復(fù)雜些。Java沒有int型的二維數(shù)組,因此一個(gè)int型的二維數(shù)組實(shí)際上是一個(gè)這樣的一維數(shù)組:它的類型為int[]。簡單的克隆int[][]型的數(shù)組會(huì)犯與上面例子中g(shù)etValues()方法第一版本同樣的錯(cuò)誤,因此應(yīng)該避免這么做。下面的例子演示了在克隆int型二維數(shù)組時(shí)錯(cuò)誤的和正確的做法:

public void wrongStore (int[][] data) throws CloneNotSupportedException{
  this.data = (int[][])data.clone(); // Not OK!
  }
  public void rightStore (int[][] data){
  // OK!
  this.data = (int[][])data.clone();
  for (int i = 0; i
  if (data != null)
  this.data[i] = (int[])data[i].clone();
  }
  }

關(guān)于java常范的幾種錯(cuò)誤就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

標(biāo)題名稱:java常范的幾種錯(cuò)誤
網(wǎng)頁URL:http://aaarwkj.com/article34/pjcipe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)小程序開發(fā)、外貿(mào)建站、網(wǎng)站設(shè)計(jì)、云服務(wù)器、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)
亚洲国产日韩精品av| 亚洲福利一区福利三区| 精品一二三四五区亚洲乱码| 男同午夜视频在线观看| 中文字幕国产精品一二区| 久久青草视频在线观看| 久久碰国产一区二区三区| 欧美视频免费一级黄片| 日韩性视频激情在线一区| 国产欧美日韩国产精品| 国产又爽又乱的视频在线| 国产三级黄在线观看| 国产丝袜在线精品丝袜不卡| 日韩高清精品视频在线| 国产系列在线播放一区二区三区| 国产精品自拍小视频91| 亚洲视频一直看一直爽| 特色特色欧美黄色影院| 欧美日韩国产免费电影| 国产精品自产拍av在线| 在线观看日韩三级av| 国产亚洲精品久在线| 九七青青草视频在线观看| 日韩中文字幕一区二区不卡| 一区二区三区中文在线播放| 欧美日韩国产另类一区二区| 日本午夜诱惑在线观看| 我的极品小姨在线观看| 国产看片色网站亚洲av| 太爽了少妇高潮在线看片| 一本久道久久综合狠狠老| 邻居少妇扒开腿让我爽了一夜| 欧美黄片完整版在线观看| 国产午夜精品一区二区三区| 精品国产第一区二区三区| 日韩成人中文字幕在线视频| 欧美亚洲综合另类色妞| 亚洲天堂免费观看av| 日本av人妻在线观看| 婷婷色悠悠,色悠悠激情啪啪| 女优一区二区三区蜜桃|