JAVA基础查漏补缺

  • 1.  变量的类型转换
  •           (1)小类型的值会自动转换为大类型的值,int a = 10 , double b = 12.5; a+b-->double类型
              (2)要把一个大类型的值存储到小类型中,需要进行强制类型转换,如果不转换,会编译出错。强制类型转换的方式:(int)12.5--->就把12.5这个double类型转换为int类型了
              (3) 当char、byte和short进行运算时会自动转换为int类型,byte b1 = 12; byte b2 = 32;byte b3=b1+b2--->编译出错,b1+b2为int类型

  • 2.  如何获取Unicode值
char c = '4';
System.out.println(c+1);//结果为53,会将字符c的值转换为对应的ASCII值--52,然后加1	
char c1 = '中';
char c2 = '国';
System.out.println(c1+c2);//42282

  • 3.  运算符优先级


  • 4.  &&、||与&、|的区别
&&、||表示短路与、短路或。
int a=10,b=11;
if((a++>10)&&(b-->10)){//当第一个条件能够确定这个表达式的值的时候,不会再去判断第二个表达式
}
System.out.println(a+","+b);//11,11
a=10,b=11;
if((a++>10)&(b-->10)){//当第一个条件能够确定这个表达式的值的时候,还会再去判断第二个表达式
}
System.out.println(a+","+b);//11,10
  • 5.  分支结构 switch case
int a = 10;
switch(a) {//switch(aa)值必须是整型(byte、short、int,long不能用于分支结构)或char,JDK7之后支持String类型,比较内存地址(内存地址空间是用16进制的数据表示, 如0x8049324)
	case 10://case后面直接就是值,不能是逻辑表达式 case a<10
		System.out.println("a=10");
		break;//每一个case之后需要加上break
	case 20:
		System.out.println("a==20");
		break;
	default:
		System.out.println("a!=10Anda!=20");
		break;
	}


  • 6.  break与continue
  • continue作用于循环,表示跳过当前这次条件的执行;break作用于分支语句或者循环语句,表示结束分支语句或者循环语句,与if等条件语句没有什么关联。

  • 7.  this引用(指针)和super引用(指针)
  • 在每一个对象内部都有一个this引用(指针)指向它自己,同时也有一个super引用(指针)指向它的父类实例(调用子类构造方法创建对象时,会先创建父类的实例对象并作为子类实例对象的一个属性)。
    super(p1,...)调用父类构造方法,super.test()调用父类的方法。

  • 8.  static关键字及初始化顺序
  • 初始化顺序为:父类的static修饰的变量或者static代码块(static修饰的按照声明顺序执行)-->父类的非static变量或者非static代码块(非static也按照声明顺序执行)-->调用父类构造方法-->子类的static修饰的变量或者static代码块(static修饰的按照声明顺序执行)-->子类的非static变量或者非static代码块(非static也按照声明顺序执行)-->调用子类构造方法。(由于在继承体系中,调用子类构造方法创建对象时,会显示或隐式地调用父类的构造方法,且该调用必须处于子类构造方法中有效代码的第一行)
    注意:static修饰的变量仅仅只会初始化一次,static代码块也仅仅只会执行一次。


  • 9.  包的应用
  • 在有效代码的第一行使用package关键字创建包,当定义了一个包名之后,如com.test,表示这个类必须放到定义的包文件夹中去,即com/test文件夹中。(相对于classpath或者当前所在目录)包的命名一般采用域名的反响操作(域名的倒序,且不包括主机名)。

  • 10.  访问控制最佳实践
  • 所有属性用private修饰,并通过public修饰的getXxx和setXxx方法进行访问(用getXxx和setXxx方法代替bean.property来获取和设置属性值,主要是为了提高系统的可扩展性--如果需要在设置值或者获取值的时候做一些业务逻辑判断或处理,使用getXxx和setXxx方法仅需在getXxx和setXxx方法处添加业务逻辑处理,而bean.property则需在系统每次获取或者设置属性值时添加业务逻辑,导致代码冗余,不易扩展。而将属性用private修饰也是基于此,为了防止开发人员通过bean.property来获取和设置属性值)

  • 11.  多态性
  • 多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
    实现多态的技术称为: 动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
    多态的作用:消除类型之间的耦合关系。
    多态存在的三个必要条件:
        一、要有继承;
        二、要有重写;
        三、父类引用指向子类对象。


  • 12.  抽象类与接口
  • 抽象类与类的唯一区别是:抽象类不能实例化,抽象类中可以存在抽象方法;
    接口和类的唯一区别是:接口中的所有方法都是抽象方法,接口中不存在属性,但可以存在常量,接口中的所有常量和方法都是public的。

  • 13.  哈希码(hashCode)的作用
  • 1、hashCode的存在主要是用于快速检索,如Hashtable,HashMap等,hashCode是用来在散列存储结构(相当于内存中维护的一张表)中确定对象的存储地址的;
    2、如果两个对象相同,就是适用于equals(java.lang.Object) 方法(相当于==),那么这两个对象的hashCode一定要相同;
    3、如果对象的equals方法被重写,那么对象的hashCode也尽量重写,并且产生hashCode的对象,一定要和调用equals方法的一致,否则就会违反上面提到的第2点;
    4、 两个对象的hashCode相同,并不一定表示两个对象就相同,也就是不一定适用于equals(java.lang.Object) 方法,只能够说明这两个对象在散列存储结构中,如Hashtable,他们“存放在同一个篮子里”。

  • 14. Java基本数据类型与Object的关系
  • Java中所有类都直接或间接地继承于java.lang.Object类,但是基本数据类型不是对象,因此跟Object不存在直接的关系。在JDK1.5及以后,Java提供了自动装箱拆箱机制(语法糖),会自动将基本数据类型封装成相应的封装类对象,而封装类对象都直接或间接地继承于Object类;而JDK1.5之前需要手动转换,如Integer.valueOf(int i)

  • 15. Comparabley与Comparator
  • 当需要排序的集合或数组不是单纯的数字类型的时候,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序。

    Comparator和Comparable的区别如下:
    Comparable用在对象本身,说明这个对象是可以被比较的,也就是说可以被排序的。(String和Integer之所以可以比较大小,是因为它们都实现了Comparable接口,并实现了compareTo()方法)。

    Comparator用在对象外面,相当于定义了一套排序算法来排序。



猜你喜欢

转载自linyinpeng1989.iteye.com/blog/2212303