189 8069 5689

关于java中的大佛代码的信息

java代码解析

一楼的说的够全面了,不过稍有误解.

成都创新互联公司长期为上千客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为昌平企业提供专业的成都网站制作、成都网站建设,昌平网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。

再来表示抱歉,我对编程语言中的中文名词非常不了解,所以如果以下的回复对你的阅读或者理解造成困难,请见谅.

1.首先,要明白这个问题的答案,需要了解call (pass) by value 和 call (pass) by reference 的区别.简单来说:

call by value通常是复制这个parameter的值去另外一块内存里,然后传给function, 所以在method/function里边对这个变量的所有变更,实际上都是对复制过来的镜像进行操作,不会对原本的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.那么现在的问题就是为什么第二个结果是2了. 首先说一下sun官方的解释: 对于reference type在作为parameter/argument的时候,也是call by value, 但是在你拥有足够权限时(比方说那个变量是public的, 不是final的等等各种符合的情况),可以修改这个object中fields的值(也就是属于这个object(严谨点讲是an instance of the object) 内部的变量, 在你的例子中, ko 里边的 a 就是一个field, 所以update(ko)会使ko.a变成2).

4.如果你是一个有过c/c++学习经验的人或者你以上的解释很难理解,以下这种说法或许更适合你 (当然了,这只是大多包括我在内有c经验的人的一种理解方式)

这里可以引入一个新的概念,pointer. 这是一种比较特殊的变量,它内部所储存的东西,其实只是另外一个变量的内存地址. 如果对内存没有概念,你可以把它简单理解为是风筝的线轴,虽然看它本身看不出什么端倪,但是顺着摸过去总会找到风筝,看到它是什么样子. 以pointer方式理解Java的人,通常会说: Type variable = new Type(); 这个过程中,最后生成的这个variable其实就是一个pointer,而不是instance本身.

在Java中, 有c/c++经验的人通常认为Java是call by value.同时,当一个变量用在储存reference type的时候,实际上储存的是它的pointer,这也一样可以解释为什么ko.a会有2这个结果,因为虽然pointer被传到function里边时,本身是call by value,无法被改变.但这并不影响function本身对这个pointer指向的object的内容做任何改变. 当然,再次声明,这只是一种帮助有c/c++经验的人理解的方法. Sun本身严正声明Java里边没有pointer这个东西的存在.

5. 再来解释一下为什么说楼上所说的(或者说楼上引用的)理解略有偏差.

引用"我们上面刚学习了JAVA的数据类型,则有:值类型就是按值传递的,而引用类型是按引用传递的" 这句话很明显的有两点错误. 第一点,如果我上面所说的,Java是没有call by reference的.

第二点,暂且假设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的结果. 后面两个结果可以很好的说明, 即使对objects (reference type variables) 来看, Java所应用的也并不是call by reference. 否则的话,以上code运行结果应该是1 2 2 1

希望你可以真正理解这个新的例子中,产生1212这个结果的原因,从而对Java中的arguments有一个系统全面的认识.

图片是相关资料的链接,知道里貌似不能加网址

各位大佛们,JAVA问题

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.GridLayout;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JTextField;

public class JiSuanQi{ 

String s="",s1=null,s2=null; 

JFrame f=new JFrame("计算器"); 

JTextField tf=new JTextField(30); 

JPanel p1=new JPanel(); 

JPanel p2=new JPanel(); 

JPanel p3=new JPanel(); 

JButton bt1=new JButton("="); 

JButton bt2=new JButton("删除");

JButton[] bt=new JButton[16]; 

int id=0; 

public static void main(String[] args) { 

new JiSuanQi().init();

public void init() { 

f.setBackground(new Color(85,247,253)); 

f.setLayout(new BorderLayout(4,4)); 

p2.setLayout(new GridLayout(4,4,4,4)); 

p3.setLayout(new BorderLayout(4,4));

f.setResizable(false); 

f.add(p1,BorderLayout.NORTH); 

f.add(p2);

p3.add(bt2,BorderLayout.NORTH);

p3.add(bt1); 

p1.add(tf); 

f.add(p3,BorderLayout.EAST); 

String[] b={"1","2","3","+","4","5","6","-","7","8","9","*","0",".","复位","/"};

for(int i=0;i16;i++) { 

bt[i]=new JButton(b[i]); 

p2.add(bt[i]); 

bt[0].setForeground(Color.blue);

bt[1].setForeground(Color.blue); 

bt[2].setForeground(Color.blue);

bt[4].setForeground(Color.blue); 

bt[5].setForeground(Color.blue); 

bt[6].setForeground(Color.blue); 

bt[8].setForeground(Color.blue);

bt[9].setForeground(Color.blue); 

bt[10].setForeground(Color.blue); 

bt[12].setForeground(Color.blue); 

bt[13].setForeground(Color.blue); 

bt[3].setForeground(Color.red); 

bt[7].setForeground(Color.red); 

bt[11].setForeground(Color.red); 

f.pack();

f.setVisible(true);

f.setDefaultCloseOperation(3);

}

}

java中要求用户输入的代码

你的程序的问题,一个是数组arr1还没有输入完全就比较是否有重复字符串,是比较不出来的,二是字符串比较内容是否相同要用equals函数而不是用双等号==.

你的Java程序我帮你改好了,你看看吧.

package 找重复;

public class string {

public static void main(String[] args) {

System.out.println("请输入5个字符串:");

String[] arr1=new String[5];

java.util.Scanner sc=new java.util.Scanner(System.in);

for(int i=0;iarr1.length;i++){

arr1[i]=sc.nextLine();

}

for(int i=0;iarr1.length;i++){

for(int j=i+1;jarr1.length;j++){

if(arr1[i].equals(arr1[j])){

System.out.println(arr1[i]);

}

}

}

}

}

运行结果

请输入5个字符串:

we

are

the

world

the

the

在Java中,有如下代码,

我真不知道楼上是怎么测试的!!!!!考虑东西一点都不全面,太过短视了啊!!!!

答案是: A 、C

是复选的答案!经过测试得出的结果!!!

B和D答案编译都通过不了!

现在说一下why!

子类对象如果想正确初始化,需要先初始化父类对象,这个是规则,可以死记!

这道题改一下你就能更好的理解,请看:

public class Animal {

private String yanjing;

private String erdou;

public Animal(String yanjing,String erdou){

this.yanjing = yanjing;

this.erdou =erdou;

System.out.println("奥名");

}

}

public class Dog extends Animal {

private String yachi;

public class Dog extends Animal {

private String yachi;

public Dog(String yanjing,String erdou,String yachi){

super(yanjing,erdou);

this.yachi = yachi;

}

public static void main(String[] args) {

// TODO Auto-generated method stub

Dog dog = new Dog("眼睛","耳朵","牙齿");

}

}

父类中多了两个属性,眼睛和耳朵,子类中多了一个属性,也是自己特有的牙齿属性。

按照先前的规则,子类要初始化需先初始化父类。看代码:

public Dog(String yanjing,String erdou,String yachi){

super(yanjing,erdou);

this.yachi = yachi;

}

这段是子类的构造方法,其中super关键字有两种用法,用来显式的调用父类中的方法和在构造方法中的用法,这里就是super使用在构造方法中的例子,super在构造方法中可以调用父类的构造方法。


网站标题:关于java中的大佛代码的信息
URL地址:http://jkwzsj.com/article/hoiojh.html

其他资讯