SCJP认证复习~1

Java中有许多和C习惯不一样的地方:

1.局部变量使用前的初始化
        这一点不同于C/C++,java会出现Error,而后者只会有warning,即java中局部变量使用前必须做显示的初始化。
        static 变量会被自动初始化为类型默认值。
 
2.boolean类型。
        在必须用到判断式的场合,如while条件、if条件、for条件中,必须是一个boolean表达式,boolean类型是不可由int类型转换过来的,所以很多C中常用的如while(1)在java中是不对的,SCJP也常考这样的题。
 
3.switch表达式。
        switch表达式必须是与int值相容的表达式,如byte short char可自动提升,其他的均不可。
        Switch判断中,若case里没有break;default将执行。
       int i=1;
       switch(i){
       case 0:System.out.println("0");
       case 2:System.out.println("2");
       default:System.out.println("defalut");
       case 3:System.out.println("3");
       }
       这段代码的运行结果是:default 3说明default后的语句会被无条件执行.
 
4.类型的提升
       从小到大的提升自动,从大到小的要手动切割,做运算式,最小的单位是int。
 
5.逻辑运算符
       java中的逻辑运算符有短路运算符之分,~取反 !非 &与 |或 ^抑或这几个中与C中不同的是C中前几个进行的是单目为操作。java中与、或是双目的,他们是非短路的,而短路操作有:&&与 ||或
 
6.参数传递
        java中没有指针的概念,也就没有C++中引用的概念,那么java中就不会有显示的地址传递。当我们在用函数调用的方法想改变参数的值的时候,就需要清楚java中什么是能改变的,什么是不能改变的:对于内置类型作参数的函数调用,函数中是不能改变它的值的,改变的只有形参。对于引用类型(类类型)作参数的函数调用,函数中能改变的东西有限:可以改变引用指向的内容,而不能改变引用的指向
 
7.数组
数组的声明方式有以下4种:
       1) String names[];
             names = new String[3];
             names[0]={“abc”};names[1]={“def”};names[2]={“ghi”};
2) String names[] = {“abc”,”def”,”ghi”};
3) mydate date[];
     date = new mydate[3];
       date[0] = new mydate(22,7,1964);date[1]=….
4)mydate date[] = {
       New mydate(…);
       New mydate(…);
       …
}
       Java的数组貌似是变长动态的,但实际上数组的大小不是可变的,而是新分配内存,在把当前内容搬家,以达到动态效果。
       二维数组的声明时须注意:将数组的第一维注明。
       二维数组可以实现不等长情况,即它可以不是一个矩阵。
 
Java的一些细节:
1.       类型长度
char 0~65535;(unicode编码,不同于C语言的ASCII编码)
Byte -128~127;
Short -2(15)~2(15)-1;
Int -2(31)~2(31)-1;
Long -2(63)-2(63)-1
 
2.       float类型声明时需要注意的一点
        java中默认的浮点型是double类型,在声明初始化时会发生一些类型检查,所以需要特别注意在浮点型后加上类型说明后缀:f/F。
       这是类型检查的特点,相似的还有byte类型的运算情况:byte b;b = 3;b= b*3;这时会出错,由于运算最小单位是int类型,所以结果是int类型,在int类型赋值给byte就要有类型精度损失。所以要将类型转换成byte。b = (byte)(b*3);

3.       i=0 ;(i++ == 1) 这个布尔表达式的值是什么?false! 想来只能说把包含i++执行完后i才等于1。

4.       java的移位操作符
                一共有三种,分别是”>>”,”>>>”,”<<”,执行的操作分别是有符号右移,无符号右移,左移,有符号右移的意思是说移入的最高位和原最高符号位相同,无符号右移是移入位始终补零,左移时最低位始终补零,最高位被舍弃。移位操作符另一个非常值得注意的特点是其右操作数是取模运算的,意思是说对于一个int型数据而言,对它移位32位的结果是保持不变而非变成零,即:a>>32的结果是a而不是0,同理,对long型数是对右操作数取64的模,a>>64==a;还有一点需要注意的是移位操作符”>>>”只对int型和long型有效,对byte或者short的操作将导致自动类型转换,而且是带符号的。

5.       boolean bool = true;
if(bool = false){}
这句可以运行,而且bool的值会变成false,此if中的表达式值也会是false的结果,不会执行{}里的语句。
 
6.       类的构造函数中,用到其它的构造函数时,要把this(…)写在当前构造函数的第一行。

7.       类继承体系中,super()调用父类构造函数时,要在构造函数的第一行,super和this不能同时出现在构造函数中(调用其它构造函数),当不写super时,系统会自动增加无参数的构造器,但是若父类没有无参构造器,系统会报错。

8.       类的空参数构造器可以是1)default构造器2)显示写出的空参数构造器。但不能在参数中写void。默认构造器与类的访问权限相同。

9.       构造器执行的步骤:
1)创造对象引用,分配内存
2)为实力变量作类型默认值0或null
3)为实力变量调用类定义时的值做赋值操作(类体中的“初始化”)
4)调用构造器内操作
5)建立内存与引用间的关联

10.   方法重写与多态性紧密相连
        方法重写的要求:方法名相同,返回类型相同,参数相同,访问性不低于原方法(重写时要注意default访问权限问题——不写访问权限是default),抛出的一场不能更多
       注意区分方法重写和方法重载。(重载要求参数不同,返回值可以不同,但是不能是重载时唯一的不同点)
       特别注意有一点与C++中的多态不同,C++中的多态中当返回类型是类本身时,可以在父类方法返回父类的类型,子类方法返回子类的类型。但是java不行,必须是父类的方法,这时子类型方法中会发生切割,而切割后虽然不能保留字类型的自有信息,但是会保留子类的类型信息,这样可以保证运行时识别出多态方法使调用正确。

11.   继承时private被继承,但不可见。而不是不继承。

12.   重写equals时,应同时重写hashcode。
如果没有重写新类的equals(),则该方法和 == 操作符一样在两个变量指向同一对象时返回真,但是java推荐的是使用equals()方法来判断两个对象的内容是否一样,就像String类的equals()方法所做的那样:判定两个String对象的内容是否相同,而==操作符返回true的唯一条件是两个变量指向同一对象。

13.   java中全局变量是以“单件模式”实现的。

14.   String类型。
       String s = new String(“new”);创建了两个对象:一个是“new”常量字符串,一个是String类型的s对象。string对象分为字面量和构造量.字面量放在缓冲池中,是常量,不会改变,如果两个字面量相同,那么也不会再生成.所以用==返回的是true.构造量有构造函数生成,与想象中相同.对于字面量来说,多个类共享的是同一个缓冲池。这意味着即使在另外一个类中创建一个先前类中已有的字面量字符串,则仍旧是同一对象。

       String类最重要的一点在于“不变性(immutable)”。它的意思是一旦String类产生了就不会再改变了,若试图改变它都会产生新的对象。这也正是调用String类型中许多函数,与想象的结果不同,不是改变了原值,而是新生成一个对象返回。如: concat(string str)   substring(int beginIdex)        replace(char oldchar,char newchar);等,但+=改变string量,是改变后重新赋值的过程.

               对于StringBuffer而言是可变的,对它的任何改变都是实时的。

15.   借口定义的是一种能力。借口定义的方法均无实现,而且这种函数一般是public default,借口定义数据类型的时候默认是public static final。
java是通过借口实现多继承的。

16.   final修饰引用类型时,表示其关联不可改变,而内容可变。
final修饰实例变量时,要求构造器显示初始化。
final修饰方法时,表示此函数不能重写。
final修饰类时,表示此类型不能继承。(vector、string等类型都是final)

17.   Math的函数都是静态的(可以通过私有其构造器,static其方法,来形成无实例类)。
math.sqrt(-1)返回nan。 
   ceil()方法。该方法返回类型为double,往单一的正坐标方向取最近的整数
   floor()方法。该方法返回类型类double,取最靠近其负向的整数。
   round()方法。它有两个重载版本:double和float,返回分别为long和int   long round(double a);int round(float)
   round()方法=Math.floor(a+0.5),这意味着正数5入,负数6入
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值