黑马程序员技术交流社区

标题: 新手上路,求解几个小问题 [打印本页]

作者: 刘 佳    时间: 2012-9-5 09:25
标题: 新手上路,求解几个小问题
本帖最后由 kikifirst1 于 2012-9-5 11:36 编辑

看视频第二天,有几个问题想请教一下

1.环境变量设置
  set classpath=路径 这个设置是否只是针对.class文件的?编译.java文件仍然需要在当前目录下进行?
2.类型强制转换
  把int型转换为char型。
  我是这么写的:   int b = 98;
                          b = (char)(b+1);
                          System.out.println(b);
    为什么输出的是99?而不是字符c?

初学有很多地方不理解,盼望有童鞋能指点一二,感激不尽~
作者: 全海波    时间: 2012-9-5 09:39
首先回答第一个问题:你想在那里编译就在那里编译
第二个问题:因为你定义是int类型,当然会输出99啦!

作者: 王晓明    时间: 2012-9-5 09:47
本帖最后由 王晓明 于 2012-9-5 10:02 编辑

1.classpath环境变量只是定义需要运行的class文件所在的目录路径,只对于运行class有所提升,所以对于是没有变化的,还需在其目录进行编译!

2.  int b = 98;
     b = (char)(b+1);
     System.out.println(b);

这里(char)(b+1)的确是将b+1的结果强制转换成了c,但是赋值给力b之后,又自动提升了,成为int型了,自然输出的是99;
应该是:
int b = 98;
  b = (char)(b+1);
  System.out.println((char)b);//输出的时候又再次将c强制转化成99

这是我也才学会的,希望能够帮到你!
作者: 刘 佳    时间: 2012-9-5 09:48
全海波 发表于 2012-9-5 09:39
首先回答第一个问题:你想在那里编译就在那里编译
第二个问题:因为你定义是int类型,当然会输出99啦!
...

第一个问题我试过设置classpath,javac **.java的时候是这样显示的

C:\Users\Administrator>set classpath=F:\java练习代码\day02

C:\Users\Administrator>javac 练习.java
javac: 找不到文件: 练习.java
用法: javac <options> <source files>
-help 用于列出可能的选项

但是当java **的时候在其他目录下就能进行。所以我以为编译时候就得在当前目录下了。不知道我能描述明白不,而且这问题出在哪呢?

还有第二个问题,b不是已经做强制转换了么,为什么还得定义一个char类型呢?

有点刨根问底,O(∩_∩)O~

作者: 刘 佳    时间: 2012-9-5 09:52
吕书凯 发表于 2012-9-5 09:45
第一个问题:
path 路径,是java编译时需要调用的程序(如java,javac等)所在的地方
classpath 类的路径, ...

十分感谢,思路很清晰,理解了:hug:
作者: 刘 佳    时间: 2012-9-5 09:52
王晓明 发表于 2012-9-5 09:47
1.classpath环境变量只是定义需要运行的class文件所在的目录路径,只对于运行class有所提升,所以对于是没 ...

谢谢谢谢,很感谢,明白了~:hug:
作者: 王晓明    时间: 2012-9-5 09:54
kikifirst1 发表于 2012-9-5 09:48
第一个问题我试过设置classpath,javac **.java的时候是这样显示的

C:\Users\Administrator>set classpa ...

你出错的原因是因为classpath只定义的是class文件所在的文件路径,不是.java文件所见的路径,假设你的.java和.class文件都在同一个文件夹,那就不会出错,但是若.class在另外的文件夹,而你的classpath没有定义到该文件夹,jvm在.java所在的文件夹找不到.class文件就会出错!

作者: 杨千里    时间: 2012-9-5 10:05
第一个问题关于环境变量的设置:
PATH变量用于列出可执行文件的搜索路径.

因为要通过命令行的命令启JAVA,JAVAC等编译工具和解释工具,系统必须要知道他们所在位置,而PATH则指明了其位置.

CLASSPATH变量用于JAVA加载类的路径.只有在classpath设置的路径中的类才能被加载.

第二个问题
                          int b = 98;//  定义一个变量b为int类型,把98赋值给b
//                         b = (char)(b+1);//     把(char)(b+1)赋值给b,等于把(char)(b+1)对应的“阿师壳码”值99赋给b
因为这个b是int类型的,不是char类型的。把b前加上char 就ok了 但是已经声明b为int类型了,所以可以在定义一个变量为char类型
即:
                          char b1= (char)(b+1)
                                                           //      这时b1的值就是99
                          System.out.println(b1);   
输出的就是99了
作者: 王德升    时间: 2012-9-5 10:36
去上面通道把名字改了要不然不能给你加分的,
作者: 刘 佳    时间: 2012-9-5 11:34
王德升 发表于 2012-9-5 10:36
去上面通道把名字改了要不然不能给你加分的,

请问设置了我的真实姓名,还需要申请改名字吗?
作者: 王德升    时间: 2012-9-5 12:43
kikifirst1 发表于 2012-9-5 11:34
请问设置了我的真实姓名,还需要申请改名字吗?

上面有改名字的渠道阿,
你看最上面置顶的帖子,
作者: 王晓明    时间: 2012-9-5 17:20
王德升 发表于 2012-9-5 12:43
上面有改名字的渠道阿,
你看最上面置顶的帖子,

现在改名字好像要扣技术分的?我记得淘哥好像公告过!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2