新聞中心
java代碼解析
一樓的說的夠全面了,不過稍有誤解.
成都創(chuàng)新互聯(lián)公司專注于企業(yè)成都全網(wǎng)營銷、網(wǎng)站重做改版、丘北網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、html5、商城網(wǎng)站建設(shè)、集團公司官網(wǎng)建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為丘北等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
再來表示抱歉,我對編程語言中的中文名詞非常不了解,所以如果以下的回復(fù)對你的閱讀或者理解造成困難,請見諒.
1.首先,要明白這個問題的答案,需要了解call?(pass)?by?value?和?call?(pass)?by?reference?的區(qū)別.簡單來說:
call?by?value通常是復(fù)制這個parameter的值去另外一塊內(nèi)存里,然后傳給function,?所以在method/function里邊對這個變量的所有變更,實際上都是對復(fù)制過來的鏡像進行操作,不會對原本的variable有任何影響.
call?by?reference是將parameter的reference傳給function,簡單點理解就是直接把variable傳給function.所以說這個variable的值是可以被function改變的.這個用法在c/c++中非常常見,用法是variable_name.
2.再來,在Java里邊,你可以很簡單的理解為:?Java中只有call?by?value,?也就是說,所以所有傳給function的parameter本身都不會被改變.?(這是最簡單直白的理解,當然也有另一種常從sun的人那邊聽到的說法:Java是call?by?value?+?call?by?reference?by?value)
3.那么現(xiàn)在的問題就是為什么第二個結(jié)果是2了.?首先說一下sun官方的解釋:?對于reference?type在作為parameter/argument的時候,也是call?by?value,?但是在你擁有足夠權(quán)限時(比方說那個變量是public的,?不是final的等等各種符合的情況),可以修改這個object中fields的值(也就是屬于這個object(嚴謹點講是an?instance?of?the?object)?內(nèi)部的變量,?在你的例子中,?ko?里邊的?a?就是一個field,?所以update(ko)會使ko.a變成2).
4.如果你是一個有過c/c++學習經(jīng)驗的人或者你以上的解釋很難理解,以下這種說法或許更適合你?(當然了,這只是大多包括我在內(nèi)有c經(jīng)驗的人的一種理解方式)
這里可以引入一個新的概念,pointer.?這是一種比較特殊的變量,它內(nèi)部所儲存的東西,其實只是另外一個變量的內(nèi)存地址.?如果對內(nèi)存沒有概念,你可以把它簡單理解為是風箏的線軸,雖然看它本身看不出什么端倪,但是順著摸過去總會找到風箏,看到它是什么樣子.?以pointer方式理解Java的人,通常會說:?Type?variable?=?new?Type();?這個過程中,最后生成的這個variable其實就是一個pointer,而不是instance本身.
在Java中,?有c/c++經(jīng)驗的人通常認為Java是call?by?value.同時,當一個變量用在儲存reference?type的時候,實際上儲存的是它的pointer,這也一樣可以解釋為什么ko.a會有2這個結(jié)果,因為雖然pointer被傳到function里邊時,本身是call?by?value,無法被改變.但這并不影響function本身對這個pointer指向的object的內(nèi)容做任何改變.?當然,再次聲明,這只是一種幫助有c/c++經(jīng)驗的人理解的方法.?Sun本身嚴正聲明Java里邊沒有pointer這個東西的存在.
5.?再來解釋一下為什么說樓上所說的(或者說樓上引用的)理解略有偏差.
引用"我們上面剛學習了JAVA的數(shù)據(jù)類型,則有:值類型就是按值傳遞的,而引用類型是按引用傳遞的"?這句話很明顯的有兩點錯誤.?第一點,如果我上面所說的,Java是沒有call?by?reference的.
第二點,暫且假設(shè)Java里邊是有call?by?reference的,?這句話依然不成立.
Java中的變量有兩種類型:?primitive?types?和?reference?type.
primitive?type包括byte,?short,?int,?long,?char,?boolean,?float和double.
而這8種之外的所有的,都是reference?type.
下面是一段對你的貼上來的code的一點延伸,希望可以幫助你更好的理解Java中的argument?/?parameter到底是如何運作的.
public?class?Test?{
public?static?void?main(String[]?args)?{
int?a?=?1;
Koo?koo?=?new?Koo();
Object?o?=?new?Integer(1);
Koo?newKoo?=?new?Koo();
update(a);
update(koo);
update(o);
update(newKoo);
newUpdate(newKoo);
System.out.println(a);
System.out.println(koo.a);
System.out.println(o);
System.out.println(newKoo.a);
}
static?void?update(int?a)?{
a++;
}
static?void?update(Koo?koo)?{
koo.a++;
}
static?void?update(Object?o)?{
o?=?(int)?(Integer.parseInt(o.toString())?+?1);
}
static?void?newUpdate(Koo?koo)?{
koo?=?new?Koo();
}
}
class?Koo?{
int?a?=?1;
}
/*
o?=?(int)?(Integer.parseInt(o.toString())?+?1);?這一行中的(int)純粹是多余的,是否有這個casting對code本身沒有任何影響.?如果你高興也可以用
o?=?new?Integer(Integer.parseInt(o.toString())?+?1);
或者干脆
o?=?Integer.parseInt(o.toString())?+?1;
*/
以上這些code運行之后會得到1?2?1?2的結(jié)果.?后面兩個結(jié)果可以很好的說明,?即使對objects?(reference?type?variables)?來看,?Java所應(yīng)用的也并不是call?by?reference.?否則的話,以上code運行結(jié)果應(yīng)該是1?2?2?1
希望你可以真正理解這個新的例子中,產(chǎn)生1212這個結(jié)果的原因,從而對Java中的arguments有一個系統(tǒng)全面的認識.
圖片是相關(guān)資料的鏈接,知道里貌似不能加網(wǎng)址
求JAVA告白代碼
哥們,你也太懶了吧?不過你這個初衷很棒呀。妹子也在泡,專業(yè)也在學。所以,既然有此想法,何不努力做出來。
代碼就免了。就如同我們做項目一樣,首先,你得把需求一條條的明確出來。你的需求是什么樣的?是需要怎樣的一個表白方式,如:請輸入密碼(刻意的記住女孩的生日),然后跳轉(zhuǎn)到拼圖游戲,這個圖就是女孩的照片,贏了過后打印你要表白的話等。又比如:設(shè)置一系列問答式的話語,最終篩選出來的夢中女神就是表白對象女生的類型。諸如此類等等。你都可以自己構(gòu)思如何去表白。每一個對于愛的表達方式不一樣。你要選擇給美眉一次驚喜還是一次深刻?都取決于你。
你要求代碼,估計肯定不會有人給你寫。太麻煩了。不過你加上你的構(gòu)思,在oschina、csdn、cnblogs、iteye等網(wǎng)站去找一些源碼應(yīng)該還是有的。
Java實驗,代碼怎么寫?
Shape.java接口代碼
public interface Shape {
public static final double PI = 3.14d;
public double area();
}
Circle.java圓類代碼
public class Circle implements Shape {
private double radius;
public Circle(double radius) {
? this.radius = radius;
}
@Override
public double area() {
? return PI * this.radius * this.radius;
}
public double perimeter() {
? return 2 * PI * this.radius;
}
}
Cylinder.java圓柱體類代碼
public class Cylinder extends Circle {
private double height;
public Cylinder(double radius, double height) {
? super(radius);
? this.height = height;
}
public double area() {
? return 2 * super.area() + super.perimeter() * this.height;
}
public double volume() {
? return super.area() * this.height;
}
}
X5_3_6.java主類代碼
public class X5_3_6 {
public static void main(String[] args) {
? Circle cir1 = new Circle(5);
? System.out.println("圓的面積為:" + cir1.area());
? System.out.println("圓的周長為:" + cir1.perimeter());
? Cylinder cy1 = new Cylinder(10, 15);
? System.out.println("圓柱體的表面積為:" + cy1.area());
? System.out.println("圓柱體的體積為:" + cy1.volume());
}
}
上面是我寫的代碼,下圖是執(zhí)行結(jié)果,麻煩看一下,是否可以。
寫一段java的代碼,可以輸出新郎和新娘的名字,并祝他們幸福。,。
public?static?void?main(String[]?args){
String?新郎="新郎名字";
String?新娘="新娘名字";
System.out.println("祝新郎"+新郎+"和新娘"+新娘+"新婚幸福");
}
如何用Java代碼表白
import i.love.you.*;
public Class Love{
public static void main(String args[]){
You you = new You();
Me me = new Me();
if(Me.sayLoveTo(you)==true You.sayYesTo(me)==true){
Me.loveForever(you);
}
}
}
文章標題:java浪漫代碼,java的浪漫
分享URL:http://ef60e0e.cn/article/phssih.html