1. Switch(表达式){
case 常量表达式: 语句序列 break;
…
…
default: 语句序列 break;
}
表达式:必要参数,byte,short ,int,char类型变量。
常量表达式:与数据类型一致的值,不能为判断语句。
语句序列:不需要大括号。
一般情况下,对于条件较少的用if,但实现一些多条件的判断就应该用switch语句。
2. do{
….
} while();
注意while()后面有分号。
for循环语句一般用在对循环次数已知的情况下,而while和do…while语句则用在不知循环次数的情况中。
3.break只是退出当前循环(最近的一层循环),若想让break退出所有循环,可以把break换成break loop形式,即可退出所有循环。
continue是让程序直接跳出其后语句,进行下一次循环。把continue换成continue loop也可直接跳出所有循环。
return用于退出当前方法并返回一个值,并把控制权交给调用它的语句.在编程中应注意return的灵活运用,有时可以简化程序。
4.面象对象设计的特点主要概括为封装性(封装对象的属性和方法)、继承性(单继承,多继承用接口,一般最好是用接口)、多态性(动态绑定:Java编译器会自动根据所传递的参数进行判断)。
5.构造方法是一种特殊的方法,具有以下特点。
(1)构造方法的方法名必须与类名相同。
(2)构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
(3)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。
(4)构造方法不能由编程人员调用,而要系统调用。
(5)一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。
(6)构造方法可以重载,以参数的个数,类型,或排列顺序区分。
6. 构造函数的任务是初始化一个对象的内部状态,一旦定义好一个构造函数,创建对象时就会自动调用它
class Count {
private int serialNumber;
private static int counter = 0;
public static int getTotalCount() {
return counter;
}
Count() {
counter++;
serialNumber = counter;
}
}
public class TestCounter {
public static void main(String[] args) {
System.out.println("Number of counter is " + Count.getTotalCount());
Count count = new Count();
System.out.println("Number of counter is " + Count.getTotalCount());
}
}
结果为:Number of counter is 0
Number of counter is 1
每创建一个类的实例都去初始化它的所有变量是乏味的。如果一个对象在被创建时就完成了所有的初始工作,将是简单的和简洁的。因此,Java在类里提供了一个特殊的成员函数,叫做构造函数(Constructor)。
一个构造函数是对象被创建时初始对象的成员函数。它具有和它所在的类完全一样的名字。一旦定义好一个构造函数,创建对象时就会自动调用它。构造函数没有返回类型,即使是void类型也没有。这是因为一个类的构造函数的返回值的类型就是这个类本身。构造函数的任务是初始化一个对象的内部状态,所以用new操作符创建一个实例后,立刻就会得到一个清楚、可用的对象。
7. 声明类型的工作仍然由Java接口承担,但是同时给出一个Java抽象类,且实现了这个接口,而其他同属于这个抽象类型的具体类可以选择实现这个Java接口,也可以选择继承这个抽象类,也就是说在层次结构中,Java接口在最上面,然后紧跟着抽象类,哈,这下两个的最大优点都能发挥到极至了。这个模式就是“缺省适配模式”。在Java语言API中用了这种模式,而且全都遵循一定的命名规范:Abstract +接口名。
8. 接口中的方法都是抽象的,类实现接口时要求方法名、返回类型和参数个数及参数类型必须与接口的完全一致.
9. 在Java程序中,接口有两种意思:
一是指概念性接口,即指系统对外提供的所有服务,在对象中表现为public类型的方法的声明。
二是指用interface关键字定义的实实在在的接口,也称为接口类型。它用于明确地描述系统对外提供的所有服务,它能够更加清晰地把系统的实现细节与接口分离。
10.封装的两个大致原则:
一是把尽可能多的东西藏起来,对外提供简捷的接口;
二是把所有的属性藏起来。(通过public方法访问属性,也就是变量)
11.引用类型可分为类引用类型,接口引用类型和数组引用类型。
12.JVM运行时数据区中,基本数据类型的静态成员变量和引用数据类型的静态成员变量在方法区;基本数据类型的实例成员变量和引用数据类型的实例成员变量,则位于堆区;基本数据类型的局部变量和引用类型的局部变量则是在栈区。
13.基本数据类型公表示数据类型,而引用类型所引用的实例除了表示复杂数据类型外,还能包括操纵这种数据类型的行为,如:String str1=” Hello ”;
String str2=str1.trim();
14. JVM处理引用类型变量和基本数据类型变量的方式不一样:对基本类型的变量,JVM会为其分配数据类型实际占用的内存空间;而对于引用类型变量,它仅仅是一个指向堆区中某个实例的指针。
15. 成员变量可以在类中方法外的任何地方定义,而局部变量必须先定义后使用。
16. 局部变量不能被static、private、protected、public等修饰符修饰,也不能通过类名或引用变量名访问局部变量。
17. 成员变量声明后,JVM会自动给它初始化默认值;而局部变量声明后,JVM不会自动给它初始化为默认值,因此,对于局部变量,必须先经过显式初始化才能使用它。若局部变量没有初始化,但在方法中也没用到,则程序是合法的。
18. 实例成员变量可以在构造方法中初始化,静态成员变量可以在静态代码块中初始化。
19. 用十进制科学计数法表示的数字都是double型直接数。直接数是直接赋给变量的具体数值,基本数据类型除short和byte外都是直接数,String类型的值也是直接数。
20. 对于引用类型,只有String引用类型有直接数(说明String是引用类型)。
21. 把int型直接数赋给byte、short、char型变量时,如果直接数位于该变量型的聚会范围内,就允许直接赋值,否则必须进行强制类型的转换。
如:byte b1=1; byte b3=(byte)129; char c1=1; short s1=-1;
22.把float型和double型直接数赋给整型变量时,必须经过强制类型转换,而把整数型直接数赋给float和double型变量时,允许直接赋值。
如:int i=(int)11.2; float f=13L; float f=0x0022;
23.把double型直接数赋给float类型变量时,必须经过强制类型转换,而把float型直接数赋给double类型变量时,允许直接赋值。
如: float f2=(float)11.2; double d=11.2f;
24.基本类型数据赋值的总原则是:聚会范围小的数据类型允许直接赋给聚会范围大的数据类型,反之,则必须进行强制类型转换。
25.在计算整型表达式时,如果有一个操作元是long型,那么结果也是long型,否则不管操作元是byte、short、char型,运算结果都是int型。
如:byte a=1,b=1;
int c=a+b;(如果写成 byte c=a+b;时会编译出错)
(也可写成 byte c=(byte)(a+b);)(强制类型转换)
26.除了“+”外,其他操作符(如“-”,“&”,“&&”等)都不支持String类型的操作元。
27.instanceof操作符用法:instanceof用于判断一个引用类型所引用的对象是否是一个类的实例。Instanceof操作符左边的操作元是一个引用类型,右边的操作元是一个类名或接口名。一个类的实例包括类本身的实例,以及所有直接或间接的子类的实例,
如:System.out.println(dog instanceof XXX);当“XXX”为Dog类,Dog类的直接或间接父类,Dog类实现的接口,以及所有父类实现的接口时,instanceof表达式的值都为true.
28.byte、char、short三种数据类型在运算中,要先转换成int型,再进行计算,最后的计算结果是int型的;但是这三种数据类型在如“X++”这样的一元运算中不自动转换类型。
29.注意这种应用switch语句的方式
public class SwitchTest {
public void convertGrade(char grade) {
switch (grade) {
case 'A':
System.out.println(grade + " is 85~100");
break;
case 'B':
case 'C':
case 'D':
System.out.println(grade + " is < 85");
//当grade的值为B、C、D时,都执行这行代码
break;
default:
System.out.println("Invalid Grade");
break;
}
}
public static void main(String[] args) {
SwitchTest switchtest = new SwitchTest();
switchtest.convertGrade('B');
}
}
30.public class ForTest {
public static void main(String[] args) {
for (int i = 5; i > 0; i--) {
for (int j = 0; j < i; j++) {
System.out.print("*");
}
System.out.println();//换行
}
}
}
结果为:
*****
****
***
**
*
31.break跳出内层循环;continue跳出本次循环,执行下次循环,或执行标号标识的循环休;return跳出方法,返回到上层调用方法。
32.
public class ForTest {
public static void main(String[] args) {
labelOne: for (int i = 0; i < 4; i++) {
labelTwo: for (int j = 0; j < 4; j++) {
if (i == 2) {
continue labelOne;
}
if (i == 3) {
break labelOne;
}
if (j == 2) {
continue labelTwo;
}
if (j == 3) {
break;
}
System.out.println("i=" + i + " j=" + j);
background: si