初学JAVA的几个问题

来源:互联网 发布:英语雅思网络课程 编辑:程序博客网 时间:2024/04/29 22:03

1、  比较的问题

关于equals()昨天晚上的疑问搞明白了,这是搜索到的别人的问题:

 

看书上说 p1 == p2 比较的是两个引用是否指向同一个对象,而p1.equals(p2)却是用来比较p1p2的内容。
但今天老师却说equals()==是一个意思,必须重写Object类里的equals()方法,才能实现比较内容的功能。
到底书上说的对,还是老师说的对?

问题补充:我终于懂了。原来String类里重写了这个方法。所以equals()比较内容,只适用于字符串。

 

我也明白了,Integer 这个类是JAVA类库中的类,是对equals()方法进行过重载的,就像String类等等,大多数JAVA类库中的类都是进行过重载的,所以都会比较对象而非引用;而对于自己定义的类,则默认是比较引用的,必须重载后才能比较对象。

2、  JAVA中不可以将以个非boolean值当做boolean值来做比较,C/C++中可以。

3、  Ulcer Addicts Really Like C A lot肠疡患者是C程序员的写照

一元运算符 算数运算符 关系运算符 逻辑运算符 问号表达式 赋值运算符

Unary Arithmetic Relational Logical Conditional Assignment

4、  逗号表达式

逗号运算符可以在你想要完成的判断或运算之前,先为你作许多工作,比如初始化之类的,反正逗号运算符都是最后一个逗号后的内容说了算,前面有啥不要紧

 public class Comma

{

public static void main(String[] args)

{

        for(int i=1,j=i+10;i<5;i++,j=i*2)

        {

               System.out.println("i="+i+"j="+j);

        }

}

}

结果:i=1 j=11    //因为赋初值的原因,是这个结果

         i=2 j=4         //后面的都按照条件变化而得到的

         i=3 j=6

         i=4 j=8

5、  breakcontinue的问题,都是用来控制循环流程的

其中break用于强行退出循环,不执行后面的语句

continue则是退出本次迭代,继续执行下一次循环,同样不执行后面的语句

“Label1:”可以是任何名字,标签位置后跟“:”即可。

Label1配合breakcontinue用来做个类似GOTO的标签如:

break Label1;这样事实上是跳转到Label1标签的位置在终止循环的

continue Lable1 则是跳转到Label1标签的位置继续进行循环

break中断的for循环中的递增表达式不会执行,所以需要的话要人为补偿

continue Label1;跳出到外部循环时递增表达式不会执行。

6、  switch语句中的选择因子,似乎很少注意到这个问题,好像也不是什么问题

不过,选择因子必须是int或者char型之类的整数值,不能是字符串,或是浮点数之类的

7、  Math.random()随机产生一个0~1之间的数,这个数是double型的,根据需要,应该把它转化成你需要的类型,它的范围是[0,1)

8、  rand.nextInt(20)返回0到()中的数字的之间的一个值。

9、  this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。在方法内部调用同一个类的方法,不需要使用this直接调用即可

this可以在构造器中调用构造器,为this添加参数列表如:this(“hi”,47);必须将调用放在构造器的起始处,而且只能用这个方法调用一个构造器

10、              finalize()方法,在JAVA里的对象并非总是被“垃圾回收”。即:

     对象可能不被回收

     垃圾回收并不等于“析构”

     垃圾回收只与内存有关

垃圾回收前会调用finalize()函数,你必须自己写一些清除的代码,垃圾回收发生了,就执行;没发生,就不会执行。

Finalize()方法一般只发生在使用本地方法的程序中,本地方法目前只支持C/C++,如果你用非new的方式创建了对象,即用本地方法,如:malloc()等,就必须在finalize()中用free()来释放,这需要在finalize中的本地方法中来调用了,除此以外也别无他法了。

11、              垃圾回收:“自适应的、分代的、停止——复制、标记——清扫”式垃圾回收器。

12、              变量会在任何方法(包括构造器)调用之前初始化,变量的顺序决定初始化的顺序,与方法的位置无关。

基本类型获得标准初值,对象的引用值为null

 

JAVA中初始化顺序如下:

对静态变量,只有在需要初始化的时候才会初始化,先从main看,里面有static 对象、方法或变量时先初始化static类型,如果没有用到某静态变量,则始终不会初始化,在一个方法中:

静态的变量static最先初始化

普通的变量 第二

构造器 第三

其它按顺序从上到下,

 

记好:初始化顺序是先静态,后非静态

13、为了继承一般规则是,将所以数据成员都指定为private, 将所有方法都指定为public

14、关键字 super指代的是当前类所继承的基类

15、关键字finally表示无论发生什么,其子句中的代码都会执行。

   final表示这是无法改变的,数据方法或类

   对常量进行定义的时候必须对其赋初值。

对于原始类型final使原始类型不变;对于引用final使引用不变,即引用初始化指向一个对象,就无法对它进行改变使指向另一个对象。

16关于重启JBUILLDER2006又需要注册的问题: 如果想避免这个情况发生:一定要在安装完JBuilder2006后马上覆盖破解文件! 如果安装先启动JB,破解,就会发生上面各位描述的问题