佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 952|回复: 23

JAVA ServerClient的问题,谢谢

[复制链接]
发表于 15-8-2006 12:20 AM | 显示全部楼层 |阅读模式
小弟我有几个JAVA的问题要问问各位大大


  1. 1 public class Course
  2. 2   private String courseName;
  3. 3
  4. 4   public Course(String name)
  5. 5   {
  6. 6      courseName = name;
  7. 7   }
  8. 8
  9. 9   public void setCourseName ( String name )
  10. 10  {
  11. 11     courseName = name;
  12. 12   }
  13. 13
  14. 14   public String getcourseName()
  15. 15  {
  16. 16      return courseName;
  17. 17   }
复制代码


想问一下第4行和第9行有什么different呢?
他们不是都可以把name set 去 Coursename的吗??

还是因为
* 这里是 public static void main (String args[])
Course Course1 = new Course();
的关系呢??

String theName = input.nextLine();
mygradeBook.setCourseName(theName)

为何不要一个就好了呢??


有void 和没有 void有什么不一样呢???

还有还有。
16      return courseName;
是不是return去到
2   private String courseName;
这里呢??



谢谢

[ 本帖最后由 红发 于 9-9-2006 12:05 PM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

发表于 15-8-2006 01:42 AM | 显示全部楼层
很简单第4行的意思是Constructor, 就是说每一次当你要call这个class它就会启动第4行. 而第9行是你要set或者assign一个variables给你的private courseName.他们不是都可以把name set 去 Coursename的吗??对他们都可以把name set 去 Coursename分别是在:一个是每一次当你要call这个class它就会启动第4行, 一个是当你要assign一个variables.有void 和没有 void有什么不一样呢???有void意思说不能return value没有void就是可以return value.16 return courseName 是不是return去到 2 private String courseName 这里呢??错return value是return你所要的东西.比如说在main你想return你刚才set的名字作为output.你就打

string myCourseName;
myCourseName = course1.getcourseName;
So myCourseName 就拥有你要的value了!
回复

使用道具 举报

 楼主| 发表于 15-8-2006 09:32 AM | 显示全部楼层

回复 #2 ekineng 的帖子

谢谢你的回复。

虽然我还是有点乱。。。。。。。

希望多做些会明白多一点。
回复

使用道具 举报

发表于 20-8-2006 04:34 PM | 显示全部楼层

回复 #1 红发 的帖子

想问一下第4行和第9行有什么different呢?
他们不是都可以把name set 去 Coursename的吗??

还是因为
* 这里是 public static void main (String args[])
Course Course1 = new Course(); <--这里会执行第4行
的关系呢??

String theName = input.nextLine();
mygradeBook.setCourseName(theName) <--这里会执行第9行

为何不要一个就好了呢??


有void 和没有 void有什么不一样呢???<---像ekineng说的

还有还有。
16      return courseName;
是不是return去到
2   private String courseName;
这里呢??
那里call "14   public String getcourseName()" 便return到那里去


像ekineng说的,
第四行是 Constructor,每次你 declare 一个相关 class 的 object 时, 便会执行第四行。
回复

使用道具 举报

 楼主| 发表于 21-8-2006 09:24 AM | 显示全部楼层
14   public String getcourseName()
15  {
16      return courseName;
17   }

虽然知道它return去到那里。

但是不明白为何?????
看了觉得怪怪的。。。。。。。
一直跳来跳去,
看不明真的要去跳楼了。。。。
回复

使用道具 举报

发表于 21-8-2006 07:39 PM | 显示全部楼层
原帖由 红发 于 21-8-2006 09:24 AM 发表
14   public String getcourseName()
15  {
16      return courseName;
17   }

虽然知道它return去到那里。

但是不明白为何?????
看了觉得怪怪的。。。。。。。
一直跳来跳去,
看不明真的要去 ...


它 return 这个 course name 回去给呼叫这个 method 的 "东西".

例如说...
你要把 course name 在 form load 的时候显示在一个 textbox 里.
那么你就要呼叫这个 getcourseName() 啦.

mytextbox.text = MyCourse.getcourseName();

这样, 系统把 getcourseName 呼叫出来, 然后 getcourseName 让系统知道 course name, 系统把 course name 放进 textbox 里显示出来.
回复

使用道具 举报

Follow Us
发表于 22-8-2006 01:56 AM | 显示全部楼层
String theName = input.nextLine();
mygradeBook.setCourseName(theName) <--这里会执行第9行


把上面那行改为
variables = mygradeBook.getcourseName() <--这样便会执行第14行到第17行,而16      return courseName; 便会 return 到这里。简单一点便好像 (variables = courseName)
回复

使用道具 举报

发表于 22-8-2006 04:49 PM | 显示全部楼层
原帖由 红发 于 15-8-2006 12:20 AM 发表
还是因为
* 这里是 public static void main (String args[])
Course Course1 = new Course();

的关系呢??


Course Course1 = new Course();
你这行应该不能compile对吗? 因为你已经Override了Course 的default constructor, 如果你要用这class, 你应该这样写 Course Course1 = new Course("MyCouseName");. 因为你已经把default constructor撤除了.

Tips; Default Constructor == Constructor takes no parameters.如果你没有define 自己的constructor, by default, Java 会给你一个default constructor. E.g

public class Course{
    //You automatic got one default constructor
}

public class Course{
   //Your default constructor is gone   
   public Course(String text)
   {
   }
}

public class Course{
   //keep default constructor   
   public Course(){
   }

   //this is overloaded constructor
   public Course(String text)
   {
   }
}

第4行和第9行有什么different呢?

如果从安全角度来看, 你这Course的写法是没有什么分别, 它的分别在于应用. 你这Course class 有了自己customized 的constructor, 而每当你要用的时候你都会被强制性的要求用回你自己constructor. 好处是方便, 但如果你要assign 的parameters太多,constructor 的code就会变成很乱.

如何方便? 请看例子(用回你的code).
Course course = new Course(input.nextLine());
Code 简单而且易明白, 当然如果你要做validation, 这写法就行不通啦!

说回安全问题, 如果你很肯定一但你set 了 courseName就不能被更改, 那你可以encapsulate courseName variable,请看以下例子:

public class Course {
        private String courseName;
       
        public Course(String courseName){
                this.courseName= courseName;
        }

        public String getCourseName() {
                return courseName;
        }
}

很明显,我把setCourseName撤除了, 这样我就无须担心不小心把原有的courseName Set去其它value.

希望以上的例子能帮你了解第4行和第9行的分别!

迟些你会发觉code除了会跳来跳去, 还会飞来飞去!
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 22-8-2006 07:21 PM | 显示全部楼层
为何会有this.courseName= courseName;
this. 的???

Java真的不简单。。。。。。
OOP的味道越来越重了。。
回复

使用道具 举报

发表于 22-8-2006 08:41 PM | 显示全部楼层
原帖由 红发 于 22-8-2006 07:21 PM 发表
为何会有this.courseName= courseName;
this. 的???

Java真的不简单。。。。。。
OOP的味道越来越重了。。

this 这keyword 是用来refer to class variable,因为我pass in the paramater与我的class variable同名. 如果我不用这this keyword,compiler 会给你warning, 而且代码带有potential problem...

Java 是OOP, 当然会有OOP的味道! 不慌, 习惯就好!
回复

使用道具 举报

 楼主| 发表于 28-8-2006 09:40 AM | 显示全部楼层
问一样东西。
JAVA有没有IDE可以做GUI的。
好像VB这样。
create text box也比较容易。
不用一个一个type.....
回复

使用道具 举报

发表于 28-8-2006 10:59 AM | 显示全部楼层
原帖由 红发 于 28-8-2006 09:40 AM 发表
问一样东西。
JAVA有没有IDE可以做GUI的。
好像VB这样。
create text box也比较容易。
不用一个一个type.....


JBuilder, Sun 自己也有免费的... 去找找看吧.
回复

使用道具 举报

发表于 28-8-2006 11:04 AM | 显示全部楼层
ECLIPT,NETBEAN等也可以用
回复

使用道具 举报

发表于 28-8-2006 11:22 AM | 显示全部楼层
this 这keyword 是用来refer to class variable,

不对,this是用来表示instance variable或method。
Class variable/method是以static来declare的variable/method。


因为我pass in the paramater与我的class variable同名. 如果我不用这this keyword,compiler 会给你warning,

我的习惯是将argument(即parameter)加上a前缀,变成:

  1. private String CourseName;
  2. public Course(String aCourseName){
  3.     this.CourseName= aCourseName;
  4. }
复制代码

如此一来就不会混乱了。
回复

使用道具 举报

发表于 28-8-2006 02:39 PM | 显示全部楼层
原帖由 fxam 于 28-8-2006 11:22 AM 发表

不对,this是用来表示instance variable或method。
Class variable/method是以static来declare的variable/method。

我的习惯是将argument(即parameter)加上a前缀,变成:

private String CourseName ...


fxam兄, 谢谢你的更正! 对! 这种variable是叫instance variable!

至于不加上a前缀, 是因为我是用Eclipse 的Generate Getters and Setters, 而我本身也没这样的习惯,每当我declare 一个variable 时, 我直接copy在method 的parameter name 就行了, 可能我比较懒惰吧!

红发,
我不喜欢用IDE 的GUI editor 来做GUI, 我比较习惯用JGoodies 的Form自己写, 因为我觉得IDE 的GUI editor 做出来的code 如果加上自己的customized 的Renderer 会很乱! 此外, 要用回自己做的component又不方便.

你不妨试试用JGoodies 的Form 来写GUI, 可能你也会和我一样会爱上它!

Resources:
http://www.jgoodies.com/
回复

使用道具 举报

 楼主| 发表于 28-8-2006 08:31 PM | 显示全部楼层
wah,一下这样多的IDE都不知道那里一个好
看来要一个一个来test了。

不知道有人用过Java Studio Creator 2吗?
http://developers.sun.com/prodte ... downloads/index.jsp

[ 本帖最后由 红发 于 28-8-2006 08:41 PM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 28-8-2006 08:33 PM | 显示全部楼层
原帖由 fxam 于 28-8-2006 11:22 AM 发表

不对,this是用来表示instance variable或method。
Class variable/method是以static来declare的variable/method。



我的习惯是将argument(即parameter)加上a前缀,变成:

private String CourseName ...



我越来越乱了
回复

使用道具 举报

 楼主| 发表于 31-8-2006 08:08 PM | 显示全部楼层
问一下,
我用NetBeans来create一个东西。

做好了之后,我copy那个file出来run。
但是run 不到。
有error但是在NetBeans里面run就没有问题的。


但是我run其他的就没有那种问题

[ 本帖最后由 红发 于 31-8-2006 08:09 PM 编辑 ]
回复

使用道具 举报

发表于 1-9-2006 07:34 AM | 显示全部楼层
原帖由 红发 于 28-8-2006 08:33 PM 发表



我越来越乱了


public class test
{
        int iNumber;

        public test(int iNumber)
        {
                this.iNumber=iNumber; //iNumber就是这个pass进这个constructor的iNumber, this.iNumber就是上面的,也就是这个class的iNumber。
        }
}
回复

使用道具 举报

 楼主| 发表于 1-9-2006 10:59 PM | 显示全部楼层
问一个问题。
例如我有3个java的file
content.java
Add.java

这两个file都可以分开来跑的。
如果我要content里面link with的add.java的话要如何呢??


  1. if (userChoice == 1) {
  2.      AddRecord;  <--这里
  3. }
  4. else if (userChoice == 2) {

  5. }
  6. else if (userChoice != 3) {

  7. System.out.println ("ERROR: Invalid Choice.");

  8. }

复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 23-9-2024 07:29 PM , Processed in 0.127903 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表