當前位置:首頁 » 編程語言 » java解惑

java解惑

發布時間: 2022-04-26 05:42:12

java解惑怎麼樣

由於工作的需要,去了書店無意間發現這本書,剛翻了幾頁就被迷住了,索性買回來看看。很少有介紹技術的書香這本書一樣讓人著迷的。書中通過一個個小疑惑激發您去......

② 在學習JAVA過程遇到的一些基礎性疑惑,求解惑!

final修飾的類,不可以被繼承,沒有子類。
fianl修飾的方法,不可以被重寫。
fianl修飾的屬性,值不可以修改。

<?extends Object> 是泛型中的特別寫法, 這個的意思是 object的子類。 ?繼承與object,只要是object的子類都可以。

你說的+號,java中沒有符號的重載,這個和c/c++不一樣。 +號用於字元串,是連接字元串用的。基本類型+「」 結果就是字元串。 system。out。println()或print()輸出的是字元串

③ 求java高手答疑解惑

char類型其實就是數字類型,你可賦值char ch = 65,你列印出來其實就是A,它在內存中占兩個位元組

④ Java解惑之String的"+"一定差於StringBuilder的append嗎

不一定。
JAVA編譯器對與+號的字元串會進行編譯優化,優化後也是用StringBuilder的append方法。
但是編譯優化是有局限的比如
String str = "";
for(int i =0; i < 1000; i++){
str = str + i;

}

這種它優化後的結果是
String str = "";
for(int i =0; i < 1000; i++){
StringBuilder sb = new StringBuilder ();
sb.append(str).append(i);
}

而我們期望的是

String str = "";
StringBuilder sb = new StringBuilder ();
for(int i =0; i < 1000; i++){
sb.append(i);
}

⑤ JAVA面試題解惑系列(五)——傳了值還是傳了引用

從上面這個直觀的結果中我們很容易得出如下結論: 對於基本類型,在方法體內對方法參數進行重新賦值,並不會改變原有變數的值。 對於引用類型,在方法體內對方法參數進行重新賦予引用,並不會改變原有變數所持有的引用。 方法體內對參數進行運算,不影響原有變數的值。 方法體內對參數所指向對象的屬性進行運算,將改變原有變數所指向對象的屬性值。 上面總結出來的不過是我們所看到的表面現象。那麼,為什麼會出現這樣的現象呢?這就要說到值傳遞和引用傳遞的概念了。這個問題向來是頗有爭議的。 大家都知道,在JAVA中變數有以下兩種: 基本類型變數,包括char、byte、short、int、long、float、double、boolean。 引用類型變數,包括類、介面、數組(基本類型數組和對象數組)。 當基本類型的變數被當作參數傳遞給方法時,JAVA虛擬機所做的工作是把這個值拷貝了一份,然後把拷貝後的值傳遞到了方法的內部。因此在上面的例子中,在調用 Java代碼 // 為方法參數重新賦值 public void change(int i) { i = 5; } 方法的情況下,變數i和ParamTest型對象t的屬性num具有相同的值,卻是兩個不同變數。變數i是由JAVA虛擬機創建的作用域在change(int i)方法內的局部變數,在這個方法執行完畢後,它的生命周期就結束了。在JAVA虛擬機中,它們是以類似如下的方式存儲的: 很明顯,在基本類型被作為參數傳遞給方式時,是值傳遞,在整個過程中根本沒有牽扯到引用這個概念。這也是大家所公認的。對於布爾型變數當然也是如此,請看下面的例子: Java代碼 public final class BooleanTest { // 布爾型值 boolean bool = true; // 為布爾型參數重新賦值 public void change(boolean b) { b = false; } // 對布爾型參數進行運算 public void calculate(boolean b) { b &= false;

⑥ 關於JAVA解惑奇數判斷

1. 奇偶判斷
不要使用 i % 2 == 1 來判斷是否是奇數,因為i為負奇數時不成立,請使用 i % 2 != 0 來判斷是否是奇數,或
使用
高效式 (i & 1) != 0來判斷。

JAVA解惑中這樣說道。
所以應該改為:
public static boolean isOdd(int i){
return i % 2!=0;//如果一個數是偶數,就算是負數整除2餘數也為0
}

⑦ Java程序解惑,希望大家幫幫忙,打磚塊游戲不能用鍵盤控制。開始和移動都不能。運行是用application嗎

import java.applet.Applet;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Event;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class ballApplet extends Applet implements Runnable {
Dimension d;
Font bFont = new Font("Helvetica", Font.BOLD, 24);
Font sFont = new Font("Helvetica", Font.BOLD, 14);
FontMetrics fmSmall, fmBig;
Graphics goff;
Image img;
Thread mThread;
boolean ingame = false;
int ballx, bally, batpos;
int batdpos = 0;
int balldx = 0, balldy = 0, dxval;
int iScroe, ballNum;
boolean[] showbrick;
int brickNumOfLine;
final int bWidth = 5;
final int batW = 20;
final int ballsize = 5;
final int batH = 5;
final int scoreH = 25;
final int brickW = 15;
final int brickH = 8;
final int space = 1;
final int backcol = 0x102040;
final int line = 4;
final int startline = 32;

public void init() {
Graphics g;
d=size();
setBackground(new Color(backcol));
brickNumOfLine = (d.width-2*bWidth)/(brickW +space);
d.width = brickNumOfLine*(brickW+space)+(2*bWidth);
g = getGraphics();
g.setFont(sFont);
fmSmall= g.getFontMetrics();
g.setFont(bFont);
fmBig = g.getFontMetrics();
showbrick = new boolean[brickNumOfLine*line];
this.addKeyListener(new BallGameKeyListener());
GameInit();

}

public void GameInit() {
batpos = (d.width - batW) / 2;
ballx = (d.width - ballsize) / 2;
bally = (d.height - ballsize - scoreH - 2 * bWidth);
iScroe = 0;
ballNum = 3;
dxval = 2;
if (Math.random() < 0.5)
balldx = dxval;
else
balldx = -dxval;
balldy = -dxval;
batdpos = 0;
InitBricks();
}

public void InitBricks() {
int i;
for (i = 0; i < line * brickNumOfLine; i++)
showbrick[i] = true;
}

// public boolean keyDown(Event e, int key) {
// if (ingame) {
// if (key == Event.LEFT)
// batdpos = -4;
// if (key == Event.RIGHT)
// batdpos = 4;
// if (key == Event.ESCAPE)
// ingame = false;
// } else {
// if (key == 's' || key == 'S') {
// ingame = true;
// GameInit();
// }
// }
// return true;
// }
//
// public boolean keyUp(Event e, int key) {
// if (key == Event.LEFT || key == Event.RIGHT)
// batdpos = 0;
// return true;
// }

public void paint(Graphics g) {
if (goff == null && d.width > 0 && d.height > 0) {
img = createImage(d.width, d.height);
goff = img.getGraphics();
}
if (goff == null || img == null)
return;
goff.setColor(new Color(backcol));
goff.fillRect(0, 0, d.width, d.height);
if (ingame)
PlayGame();
else
ShowIntroScreen();
g.drawImage(img, 0, 0, this);
}

public void PlayGame() {
MoveBall();
CheckBat();
CheckBricks();
DrawPlayField();
DrawBricks();
ShowScore();
}

public void ShowIntroScreen() {
MoveBall();
CheckBat();
CheckBricks();
BatDummyMove();
DrawPlayField();
DrawBricks();
ShowScore();
goff.setFont(bFont);
goff.setColor(new Color(96, 128, 255));
String s = "彈球游戲";
goff.drawString(s, (d.width - fmBig.stringWidth(s)) / 2, (d.height
- scoreH - bWidth) / 2 - 20);
goff.setFont(sFont);
goff.setColor(new Color(128, 255, 32));
s = "請按下'S'鍵開始游戲";
goff.drawString(s, (d.width - fmSmall.stringWidth(s)) / 2, (d.height
- scoreH - bWidth) / 2 + 30);
goff.setColor(new Color(255, 160, 64));
s = "使用方向鍵控制球拍移動";
goff.drawString(s, (d.width - fmSmall.stringWidth(s)) / 2, (d.height
- scoreH - bWidth) / 2 + 50);
}

public void DrawBricks() {
int i, j;
boolean nobricks = true;
int colorDelta = 255 / (line - 1);
for (j = 0; j < line; j++) {
for (i = 0; i < brickNumOfLine; i++) {
if (showbrick[j * brickNumOfLine + i]) {
nobricks = false;
goff.setColor(new Color(255, j * colorDelta, 255 - j
* colorDelta));
goff.fillRect(bWidth + i * (brickW + space), startline + j
* (brickH + space), brickW, brickH);
}
}
}
if (nobricks) {
InitBricks();
if (ingame)
iScroe += 100;
}
}

public void DrawPlayField() {
goff.setColor(Color.white);
goff.fillRect(0, 0, d.width, bWidth);
goff.fillRect(0, 0, bWidth, d.height);
goff.fillRect(d.width - bWidth, 0, bWidth, d.height);
goff.fillRect(0, d.height - bWidth, d.width, bWidth);
goff.fillRect(batpos, d.height - 2 * bWidth - scoreH, batW, batH);
goff.fillRect(ballx, bally, ballsize, ballsize);
}

public void ShowScore() {
goff.setFont(sFont);
goff.setColor(Color.white);
goff.drawString("得分:" + iScroe, 40, d.height - 10);
String s = "生命:" + ballNum;
goff
.drawString(s, d.width - 40 - fmSmall.stringWidth(s),
d.height - 10);
}

public void MoveBall() {
ballx += balldx;
bally += balldy;
if (bally <= bWidth) {
balldy = -balldy;
bally = bWidth;
}
if (bally >= (d.height - ballsize - scoreH)) {
if (ingame) {
ballNum--;
if (ballNum <= 0)
ingame = false;
}
ballx = batpos + (batW - ballsize) / 2;
bally = startline + line * (brickH + space);
balldy = dxval;
balldx = 0;
}
if (ballx >= (d.width - bWidth - ballsize)) {
balldx = -balldx;
ballx = d.width - bWidth - ballsize;
}
if (ballx <= bWidth) {
balldx = -balldx;
ballx = bWidth;
}
}

public void BatDummyMove() {
if (ballx < (batpos + 2))
batpos -= 3;
else if (ballx > (batpos + batW - 3))
batpos += 3;
}

public void CheckBat() {
batpos += batpos;
if (batpos < bWidth)
batpos = bWidth;
else if (batpos > (d.width - bWidth - batW))
batpos = (d.width - bWidth - batW);
if (bally >= (d.height - scoreH - 2 * bWidth - ballsize)
&& bally < (d.height - scoreH - 2 * bWidth)
&& (ballx + ballsize) >= batpos && ballx <= (batpos + batW)) {
bally = d.height - scoreH - ballsize - bWidth * 2;
balldy = -dxval;
balldx = CheckBatBounce(balldx, ballx - batpos);
}
}

public int CheckBatBounce(int dy, int delta) {
int sign;
int stepsize, i = -ballsize, j = 0;
stepsize = (ballsize + batW) / 8;
if (dy > 0)
sign = 1;
else
sign = -1;
while (i < batW && delta > i) {
i += stepsize;
j++;
}
switch (j) {
case 0:
case 1:
return -4;
case 2:
return -3;
case 7:
return 3;
case 3:
case 6:
return sign * 2;
case 4:
case 5:
return sign * 1;
default:
return 4;
}
}

public void CheckBricks() {
int i, j, x, y;
int xspeed = balldx;
if (xspeed < 0)
xspeed = -xspeed;
int ydir = balldy;
if (bally < (startline - ballsize)
|| bally > (startline + line * (space + brickH)))
return;
for (j = 0; j < line; j++) {
for (i = 0; i < brickNumOfLine; i++) {
if (showbrick[j * brickNumOfLine + i]) {
y = startline + j * (space + brickH);
x = bWidth + i * (space + brickW);
if (bally >= (y - ballsize) && bally < (y + brickH)
&& ballx >= (x - ballsize) && ballx < (x + brickW)) {
showbrick[j * brickNumOfLine + i] = false;
if (ingame)
iScroe += (line - j);
if (ballx >= (x - ballsize)
&& ballx <= (x - ballsize + 3)) {
balldx = -xspeed;
} else if (ballx <= (x + brickW - 1)
&& ballx >= (x + brickW - 4)) {
balldx = xspeed;
}
balldy = -ydir;
}
}
}
}
}

public void run() {
long starttime;
Graphics g = getGraphics();
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
while (true) {
starttime = System.currentTimeMillis();
try {
paint(g);
starttime += 20;
Thread.sleep(Math
.max(0, starttime - System.currentTimeMillis()));
} catch (InterruptedException e) {
break;
}
}
}

public void start() {
if (mThread == null) {
mThread = new Thread(this);
mThread.start();
}
}

public void stop() {
if (mThread != null) {
mThread.stop();
mThread = null;
}
}

public static void main(String[] args) {
Frame frame = new Frame("彈球游戲");
ballApplet app = new ballApplet();
frame.add("Center", app);
frame.setSize(270, 350);
frame.validate();
frame.setVisible(true);
frame.addWindowListener(new WindowControl(app));
app.init();
app.start();
}

class BallGameKeyListener implements KeyListener{

@Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
// TODO Auto-generated method stub
if (ingame) {

switch(key){
case KeyEvent.VK_ESCAPE:
ingame = false;
break;
case KeyEvent.VK_RIGHT:
batdpos = 4;
break;
case KeyEvent.VK_LEFT:
batdpos = -4;
break;
}

} else {
if (key == KeyEvent.VK_S) {
ingame = true;
GameInit();
}
}
}

@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
int key = e.getKeyCode();
if (key == KeyEvent.VK_LEFT || key == KeyEvent.VK_RIGHT)
batdpos = 0;
}

@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub

}

}
}

class WindowControl extends WindowAdapter {
Applet app;

public WindowControl(Applet app) {
this.app = app;
}

public void WindowClosing(WindowEvent e) {
app.stop();
app.destroy();
System.exit(0);
}

}

給你+了個keyListener 然後按你的理念給你加入了按鍵判定。按S按鍵可以開始游戲但方向鍵不能移動應該是你的方法錯誤了你自己修改去把懶得看了。。太長了 一般畫可以移動的物體是直接按坐標來畫然後移動的時候+= 好哦這-= 控制坐標 我發現你的錯誤是你用batdpos這個變數去控制移動。。但你根本沒用這個變數去畫圖。。所以不能移動。。你自己去改把。。

⑧ 《java解惑》這本書怎麼樣

讀完你能明白很多java的小細節。
比如
Integer a1 = 100;
Integer a2 = 100;
System.out.println(a1==a2);
Integer b1 = 200;
Integer b2 = 200;
System.out.println(b1==b2);
你猜猜分別輸出多少。

⑨ JAVA語法,解惑

差不多,意思是等價於這個的:
List<Integer> list = new ArrayList<Integer>();
list.add(new Integer(1));
list.add(new Integer(2));
int result = 0;
for(int i=0;i<list.size();i++)
{
result += (int)list.get(i)
}

什麼時候開始有這個,具體時間我也不知道啦。
但是我猜測應該是JDK1.5發布的時候,
因為這種枚舉和泛型我記得是從JDK1.5開始支持的.

⑩ java解惑的評價

Java已經成為越來越多的程序員首選的編程語言,很多程序員都是從C++轉到了Java。乍一看,Java與C++的理念和語法都很相似,於是很多程序員都認為Java很容易掌握,但是事實並非如此,像本書中所列舉的謎題就不是那麼容易解決的了。因此,如何真正掌握好Java,尤其是掌握好一些似是而非的知識點,就成為了一個重要的課題。
《Java謎題》這本書以輕松詼諧的語言,簡單明了的方式和趣味十足的實例向我們介紹了Java編程語言中許多不易被掌握的知識點,其覆蓋面幾乎涉及Java編程語言的各個角落。本書不僅指出了造成這些謎題的原因,而且深入探討了解決這些謎題的方案,有時解決方案甚至不止一種,進而進行總結,歸納出一般的規則和警告,這些規則和警告不僅包括給程序員的部分,還包括給Java語言設計者和API編寫者的部分。因而,本書是一本循序漸進,由淺入深,總結歸納的書籍,其閱讀價值非常高。

熱點內容
能耗資料庫 發布:2025-07-15 12:50:55 瀏覽:328
謎宮腳本 發布:2025-07-15 12:40:07 瀏覽:864
安卓手機語音操作在哪裡開啟 發布:2025-07-15 12:18:49 瀏覽:283
安卓導航儀上網卡插哪裡 發布:2025-07-15 12:01:58 瀏覽:453
把文件編譯成數據 發布:2025-07-15 11:53:16 瀏覽:542
mt4如何修改密碼 發布:2025-07-15 11:53:16 瀏覽:215
2021思域新款買哪個配置 發布:2025-07-15 11:33:24 瀏覽:772
路由搭建http伺服器 發布:2025-07-15 11:26:45 瀏覽:724
消遣解壓 發布:2025-07-15 11:26:43 瀏覽:393
ICL編譯 發布:2025-07-15 11:26:32 瀏覽:665