一、 JAVA概述。1、Jame Gosling是JAVA之父;2、1991年5月23日JAVA诞生。 二、 JAVA语言特点:1、简单性,略去了多重继承,运算符重载,实现垃圾的自动回收;2、面向对象;3、健壮性;4、分布性;5、安全性,JAVA不支持指针,防止访问私有成员;6、体系结构中立;7、可移植性;8、解释执行,一句一句的翻译执行;9、高性能、多线程、动态性。 三、 即时编译:解释器先将字节码编译成机器码,然后再执行该机器码。 解释执行:解释器编译一行就执行一行,也就是一句一句的翻译执行。 JAVA使用的是解释执行。 |
一、 行业规矩:1、类名一般首字母使用大写;2、变量名小写,如果是2个以上的单词构成则后面每个单词的首字母使用大写;3、定义变量时保证变量名做到见名知意;4、final定义的常量名使用全大写,单词之间使用下划线分割,如STUDENT_NAME 二、 1、JAVA文件中的类可以没有public标识的类;2、JAVA文件名要与文件中的public类名一样,但是如果文件如果没有public标识的类,那么文件名可以随意取;3、main()方法可以不在public标识的类中,但是如果存在public标识的类,那么main()方法就必须放在public标识的类中。 三、 /**。。。。*/:文档注释后的文字导出为文档的方法:File—Export—Java下的Javadoc,然后下一步,选择要导出的文档所在的工程之后确定即可。文档注释应放在方法或是类的头前。 四、 多行注释中不能再嵌套多行注释或是文档注释,文档注释中也不能再嵌套多行注释或文档注释。 五、 局部变量必须先声明再赋值最后才能使用,没经赋值的局部变量不能使用,属性(成员变量)可以不用初始化就直接能使用,是因为系统会给属性赋默认值。 六、 数据类型:1、整型默认为int型,long型数据应该在数据后加L,浮点数默认为double型,float型数据应该在数据后加F标识;2、byte(1)、short(2)、int(4)、long(8),char(2)类型数据做运算时数据类型默认由小到大的数据类型转换;3、float(4)与double(8)型进行计算,默认向double型转换后计算;4、整型和浮点型进行计算,默认整型向浮点型转换后计算; 5、float型为6~7位有效数字,double型为15位有效数字;6、boolean(1) 七、 =、+=、-=、*=、/=是从右向左结合计算,即将右边的作为一个整体计算之后再与左边的进行计算,如 int x = 10; x *=5+3; 之后x = 80,而不是53。 八、强制类型转换: int a = 300;(二进制1 0010 1100) byte b=(byte)a;//最高位被舍去 则b的值为44 (0010 1100) |
一、JAVA控制语句: 1、if 语句 If() { 执行语句1;} else { 执行语句2;} 2、while 语句 while(循环条件) { 循环体;} 3、do-while 语句 do{ 循环体; }while(循环条件); 4、for 语句 for(初始化数值;循环变量;变更循环体) { 执行语句 ;} for(类型1 变量 :类型1集合) { 循环体;} 每次循环从类型1集合中取出一个放入相同类型的变量中,知道类型1集合结束为止。 5、多分支语句switch switch(参数值) { case value1: 语句1; break; case value2: 语句2; break; case value3: 语句3; break; [default : defaultStatements;] } 参数值的类型必须是以下几种之一:int 、byte、char、short 6、中断控制语句 break; 用来跳出正在执行的语句块。用于循环体中break能跳出当前的循环;用在switch分支结构中,break可以跳出case块的语句。 continue;语句常用在循环体中,用来结束本次循环,跳过循环体中尚未执行的语句,接着进行终止条件的判断,已决定是否继续循环。对于for语句,在进行终止条件判断前,还要限制性迭代语句。 |
一、 JAVA中使用的是二进制的补码。1、正数的补码等于二进制原码;2、负数的补码等于正数的原码取反加1; 二、 进制之间的转换:十进制转换成R进制,除以R取余数,倒着排;R进制转换成十进制,各位数乘以R n-1 再相加可得。 三、 二进制移位:(有符号移位)做移n位等于这个数乘以2 n,右移n位等于这个数除以2n 如:x>>1等价于x/2;x<<2 等价于 x * 4。 移位不会改变变量本身的值。 四、 创建之后未赋值的数组,整数默认赋值为0,浮点数默认为0.0,布尔型默认为false,char 默认为编码为0的字符。 五、 Length 的使用:数组中计算数组的长度为 数组名.length; 计算字符串的长度用 字符串.length(); 六、 String 是不可更改的字符系列;StringBuffer 是可以更改的字符系列。 七、 使不使用new的区别: String str1 = “abc”; String str2 = “abc”; String nStr1=new String(“abc”); String nStr1=new String(“abc”); str1 == str2 // true nStr1 == nStr2 // false 说明:str2 与 str2 是同一个对象,nStr1 与 nStr2 是两个不同的对象。以上代码执行时在内存中的分配如右图。常量池放在data segment中。 八、 当使用字符串拼接较多时,尽量使用StringBuffer代替String,这样能节省代码的运行效率。 String x = “a” + 4 + “c”; 编译时如下运行 String x =new StringBuffer(). append(“a”).append(4).append(“c”).toString; 九、 final 关键字在StringBuffer中的使用: final StringBuffer a = new StringBuffer(“11”); final StringBuffer b = new StringBuffer(“22”); a = b; //编译不通过 a.append(“22”); //编译能通过 可见:final 只对应用的“值”(即内存地址)有效,它迫使引用只能向初始指向的那个对象,改变它的指向会导致编译期错误,至于它所指向的对象内容的变化,final 是不负责任的。 十、 JAVA的数据在内存中的主要分布:1、栈,用来存放一些基础数据类型的局部变量数据和对象的引用(String 、数组 、对象等),但不存放对象内容,栈中的垃圾采用垃圾自动回收机制自动回收;2、堆,用来存放new关键字创建的对象;3、static 静态变量需存放在内存中的data segment中;4、程序中的方法存放在code segment中,而且是多个对象共享一个代码区域。 字符串是一种殊的包装类,其引用存放在栈里,而对象内容必须根据创建方式的不同来定(常量池或堆中)。有的是编译期就已经创建好的,存放在字符串常量池中,而有的是运行时才被创建的,如使用new关键字创建的,存放在堆中。 十一、数组的复制: System.ArrayCopy(src,srcPos,dest,destPos,length); 其中,src表示源数组,srcPos表示源数组的复制起始位置,dest表示目标数组,destPos表示复制到目标数组的起始位置,length表示被复制的源数组长度。只能用于复制一围数组。 十二、StringBuffer str = new StringBuffer(“abcd”); str.replace(1,3,”fff”); System.out.println(str); 结果为:afffd replace(start,end,s); 即用字符串s替换从start到end-1 之间的字符串。字符串下标从0开始。 十三、字符串比较:str1==str2比较的是两字符串的地址,str1.equals(str2)比较的是两字符串的实际内容。 十四、String[] split(String str)注意事项: 在使用“|”、“//”作为拆分标志时应注意他们在正则表达式中有特殊的含义,使用时应如下: “ab|gg|dd”.split(“//|”).length == 3 “ab/gg/dd”.split(“”).length ==3 “ab:gg:dd”.split(“:”).length == 3 |
一、 方法的重载:方法名称相同,参数不同(包括参数类型不同、参数个数不同、参数顺序不同),注意的是返回值类型的不同不足以构成方法的重载,因为在调用时不知道调用哪一个方法,返回值类型是是最后才调用的。 二、 构造方法:构造方法的任务就是初始化一个对象的内部状态,通常不用于显示任何东西。构造方法前不能加任何返回类型,void也不能写,要不就不叫构造方法,而是普通方法了。一个构造方法只能调用另一个构造方法一次,用this();调用自身构造方法。 |
一、 继承的意义是代码的重用,每个类只能继承自一个父类,也就是说JAVA不支持多重继承。子类会包括它的父类中的所有满足条件的成员。 二、 重写:为了对父类方法进行修改重写。同时需注意:1、重写的方法不能比被重写的方法抛出更多种类的异常,只能少;2、重写的方法不能必被重写的方法的访问权限范围小。 三、 父类的引用指向子类对象:1、使用父类引用调用重写的方法时调用的是子类的方法;2、使用父类引用调用重写的属性时调用的是父类的属性;3、父类引用调用的方法如果在子类中不存在则调用父类中的方法;4、父类引用不能调用子类自身的属性和方法(即子类独有的方法和属性而父类没有的),如果还是想用,只能将父类引用强自转换成对应的子类对象,如: Parsent present = new Child1(); Child1 ch = (Child1)parsent; 这样就能使用子类对象引用ch调用Child1类特有的方法或属性了。 四、 不能创建子类的引用指向父类对象。 五、 关键字instanceof(是…..之一)的使用: 对象名a instanceof 类名A ; // 对象a 是一种A吗?返回true 或 false 六、 super关键字 super的两种通用形式:1、调用父类的构造方法;2、用来访问被子类的成员隐藏的父类成员。 注意:1、super()必须是在子类构造方法中的第一个执行语句,因为必须要先创建父类对象再能创建子类对象;2、当父类中显示的定义了有参数的构造方法,且没有定义无参数的构造方法时,子类中必须要定义自己的构造方法并使用super()调用父类中的有参数的构造方法。因为在创建父类对象时编译器不可能知道向父类有参数的构造方法里传递什么值。 七、 final 关键字在继承中的使用 1、 使用final可以阻止方法的重写;定义成final的方法可以提高程序的性能。父类中的final属性在子类中可以定义相同的属性。 2、 使用final申明类可以阻止被继承。 |
一、 对于类成员的高级访问权限:1、任何申明为public的内容可以被任何地方访问;2、被申明成private的成员不能被该类外看到;3、如果一个成员不含有一个明确的访问说明,它对于子类或是该包中的其他类是可见的,这是默认的访问;4、被申明成protected的内容可以被该包中的类和其他包中的其子类可见,其他类不可见。 对于类:一个类只能有两个访问权限:默认的和公共的。如果被申明成public可以被任何的代码访问;如果该类默认访问控制符,它仅可以被相同包中的其他代码访问。 二、 所谓类的封装就是类内部的逻辑和数据隐藏起来,对于使用这个类的人来说,他只需要知道如何使用这个类,如何使用这个类提供的方法来实现想要的功能,而不需要知道这些方法是如何实现的。封装的好处:1、隐藏类的实现细节;2、让使用者只能通过实现定制好的方法来访问数据,可以方便的加入控制逻辑,限制对属性的不合理操作;、便于修改,增强代码的可维护性;3、可进行数据检查。 三、 内部类可以访问外部类的所有成员,包括private成员;外部类访问内部类需要通过对象引用来访问。 在有方法定义的块中,或在for循环体内部都可以定义嵌套类。 四、 static 关键字 1、静态表示的是内存的共享,就是它每一个实例都指向同一个内存地址; 2、对于静态的东西,JVM在加载类(将.class文件读到内存中时就是加载)时,就在内存中开辟了这些静态的空间; 3、static定义的变量会优先于任何其他的非static变量,不论其出现的顺序如何; 4、在涉及到继承的时候,会先初始化父类的static变量,让后是子类的; 5、通常一个普通类不允许声明为静态类,只有一个内部类才可以; 6、定义静态变量时不能用来定义局部变量,只能定义成员变量(属性)。类中的变量称为成员变量或是属性,方法中的变量叫局部变量。 五、static关键字并不是随处可用的: 1、static方法中不能直接调用非static方法和变量,要通过类的引用创建对象来调用; 2、在static方法中不能以任何方式引用this或super,因为加载statin方法前还没有创建对象; 3、static变量在定义的时候必须进行初始化,并且初始化的时间早于非静态; |