开启JAVA之路--语法篇-1

学了几年的C/C++,今天开始正式转学JAVA,希望能在这条路上越走越深,越来越好~先从语法开始~撸一撸JAVA核心技术。

1、java种每个方法都是包含在类中的,包括main方法,main方法一般定义为public static void main,其为静态函数,说明main方法不会依赖于类的对象,不需要创建对象即可调用。main方法是自己的代码执行的入口。

2、java中所有的数据类型的长度都是固定的,不会随机器改变,这点区别于C++,也是其移植性好的一个体现。

3、java中所有的char类型都是Unicode编码格式。

4、java中定义常量采用final而非const,const属于java的保留字,但是目前还未使用。

5、>>运算符,表示将二进制位右移,并用符号位填充高位。在java中有>>>运算符,表示将二进制为右移,并用0填充高位。

     在进行移位运算时,需要对位移量对32/64取模(对int而言,1 << 35和1<<3的值是相同的)

6、java中string的substring函数和c++的substring函数的意义相同但是参数的意义不同,java中s.substring(a,b)表示截取s中从a到b-1的字符串,但是c++中表示截取s中a到a+b-1的字符串。

7、输入输出,

控制台:System.out.println() 带换行                        System.out.print()  不带换行            System.out.printf()   格式化输出

              创建Scanner对象scn并将其与System.in绑定,就可以使用scn.nextLine()   scn.next()   scn.nextDouble()等进行输入

文件:创建Scanner对象scn将其与File对象绑定,利用scn就可对文件进行读操作,当写入文件的时候创建PrintWriter对象pwt将其与文件名绑定就可以利用pwt对文件进行写操作。

8、java种的执行控制和c++基本相同,java中新增了break Label 功能, 可以直接break到Label块的后面执行。

      continue Label 是跳转到Label块中循环的首部继续执行。

9、java增加了对任意长度的大数的处理,对于整形大数,采用BigInteger类,对于浮点型大数,采用BigDecimal。

10、java相对于C++来说很大的一个方便之处在于不需要进行内存管理,这依赖于java的垃圾回收机制(GC),此机制依赖于许多垃圾回收的算法,参考:https://www.cnblogs.com/xiaoxi/p/6486852.htmlhttps://www.cnblogs.com/andy-zcx/p/5522836.html

11、正常情况下,java中栈上不会有对象,所有对象都位于堆上。java中不区分定义和声明,因此

               MyClass  mc;      //mc不是对象,可以理解为C++中指向对象的指针。

       这句话中相当于C++中的 MyClass *mc,实际上mc相当于一个指向MyClass对象的指针,当没有调用new的时候,该指针未指向任何对象,并且不会自动初始化为null,因此mc不能被使用。

注意以下问题:

Class   Employee

{

         private Date hirDay;

         ....

         public Date getHirDay()

         {

                  return hirDay;     //   这里返回的是hirDay的指针,并不是hirDay的对象,因此会出现浅拷贝问题。

                                             //因此通常会使用 return hirDay.clone() 函数来变成深拷贝。      

          }

}

12、java和c++一样,类的不同对象之间可以相互访问私有域。

13、在函数参数传递时,java只有按值调用,没有按引用调用。但是需要注意的是,如11所说,mc是指向对象的指针,因此在java中函数参数传递的是一个对象时,实际上是传递的指针的拷贝。(总之一定记住一个事,java中的对象变量实际上是指向对象的指针)

14、java中也支持函数重载。并且,对于一个类,如果没有构造函数,系统也会自动添加一个默认的无参构造函数,执行默认初始化。

15、java中支持在类中直接初始化实例域,而非一定在构造函数中,但是C++中必须在构造函数中执行初始化,不能直接在类中对实例域进行初始化。

16、java中可以在一个构造器内部调用另一个构造器,调用方法是在函数体内的第一行调用另一个构造函数,并用this替代另一个构造函数名。C++中不支持这种操作。

17、java中允许在类中出现初始化块,或者静态初始化块。当new一个对象时发生的事:

      1)所有数据域被初始化为默认值

      2)按照类中的声明出现次序,一次执行所有的域初始化语句和初始化块

      3)如果构造函数中第一行调用了第二个构造函数,则执行第二个构造函数

      4)执行当前构造函数

注:当类第一次加载的时候会执行静态域的初始化。由此可以写出没有main函数的简单程序。

18、java不支持析构函数,但是可以使用finalize方法,该方法是在对象被回收之前所调用的。但是具体什么时候调用是不确定的。与C++中的析构不相同,C++的析构是在delete的时候调用的,但是finalize方法的调用时机是不确定的。

19、java中的import和C++中的include不一样,而是和C++的命名空间相似,也就是using  namespace 和相似。

        java的包中,一个类可以使用包内的其他类,可以使用其他包内的公有类。

20、在文件最前面使用package xx.xxx.xxxx,形成包,java文件和class文件都在xx/xxx/xxxx/目录下。

猜你喜欢

转载自blog.csdn.net/Na2Co3_Ren/article/details/82699054
今日推荐