由于有C#的基础,Java的基础知识基本是略过,这里当做复习一遍吧!
Java的三种技术架构:
Java数据类型
注意:Java的符号集采用的是Unicode字符集,一个字符占用两个字节,不光是英文还是中文还是其他字符;
Java程序的基本结构:
大致可以分为:包,类,main()主方法,标识符,关键字,语句,注释等。
关键字:
(1)基本数据类型(八个):
整形:
注意范围,避免数据溢出 如:byte i = 47
浮点型:
字符类型:代表16位Unicode字符, char字符型用单引号 char x = 'X'
布尔类型:boolean布尔型true/false(只有真假两种结果) boolean x =true
注意:一个bit是计算机存储的最小数据单位。即1位,只可能是0或1;一个byte由八个bit组成,即八位;可以表示256个整数值,又由于byte在Java中有符号之分(即正负数),所以范围位-128~127;一个char在Java中由两个byte组成,用来表示一个字符,即unicode编码,是无符号类型;int和float在Java中由4个byte组成;每个long或double型变量占用八个byte的存储空间;1T=1024G,1G=1024M,1M=1024K,1K=1024B
补充:3种进制
基本数据类型和封装类:
变量和常量:申明变量 int age; char char1 = 'R'; 申明常量:final double PI = 3.1415926D;final boolean BOOL = true;
运算符:
PS: op1<<op2 将op1在内存中的二进制数向左移动op2位,左边移动的部分补0;
例子:不适用其他变量 实现2个数交换
A = A^B;B=B^A;A=A^B
数据类型间的相互转换:
自动类型转换:数据类型根据占用空间的大小分为大小不等的级别,空间小的级别低,空间大的级别高;遵循低级到高级的原则;如int 和byte ;
强制类型转换:当把高精度的数复制给低精度的值,需要强制类型转换;如int a = (int)32.23;long a = (long)56.1;
PS:boolean 不能和其他数据类型相互转换;
注释:
(2)对象数据类型(应用数据类型,类类型)
所有用class,interface,abstract Class定义的类,String 是Java中的一个类;
结构化程序
if ,if... else ,if... else if, switch, do while , while , for ,foreach,break ,continue,return
对foreach的特别说明:和C#中有点小小区别
Example: for(元素变量x:遍历对象obj)
{
引用X的java语句
}
对break 的一点说明:在switch中终止下面case句子的比较;在while,do...while中强制终止循环;
对continue的一点说明:只能用在while,do ...while,for中;跳过下面的语句,进行下一次循环;
对return的一点说明:从一个方法返回,并且将控制权交给调用它的语句;
数组
一维数组
申明一维数组两种方式: (1)数组元素类型 数组名字[]; (2)数组元素类型[] 数组名字;
new 数组元素类型[元素个数]; ( 使用new 为数组分配内存空间,元素值都为默认初始化为 0)
创建二维数组:(1)数组元素类型 数组名字[][]; (2) 数组元素类型 [][] 数组名字;
创建三维数组:(1)数组元素类型 数组名字[][][]; (2)数组元素类型 [][][] 数组名字;
经典案例: 对矩形转置
数组基本操作: 遍历数组;填充数组;对元素排序,复制数组(Arrays的copyOfRange和copyOf);冒泡排序,直接插入排序,快速排序
字符串
String 属于引用类型;
初始化创建一个对象 String s = new String();
用一个字符数组创建对象 String s = new String("good") 等价 char [] a = {'g','o','o','d'}; String s = new String(a);
提取数组的部分创建对象 Char[] a= {'a','d','f','g','h'}; String s = new String(a,2,3); 等价 String s = new String("fgh");
字符串操作
.Trim() (去掉前导和后倒空格)
StringTokenizer(string source,string separate ) ReplaceAll( )去除所有空格
StringBuilder() 新创建的默认是16个字节 StringBuilder在多线程中不安全 建议使用StringBuffer
面向对象基本知识(OOP)
Java中类大概可以分为三种:
(1)类:用class定义且不含有抽象方法的基本类;对属性和方法的封装,将内部数据隐藏起来;
用Static 修饰的变量,常量和方法为静态,为类共享;调用方式: 类名.变量(方法,常量)
类的修饰符如下:
this关键字 引用就是对一个对象的引用,除了可以调用成员变量和成员方法外还可以作方法的返回值;
super关键字 访问父类的方法和属性
Java虚拟机(JVM)自带垃圾回收机制(被视为垃圾情况: 只有用new 创建的对象才能JVM被回收,Java提供了finallize,用户可以在自己类中定义这个方法,如果定义了该方法,垃圾回收时,首先调用该方法,并且在下一次垃圾回收动作时,才真正回收占用的内存):
对象引用超过其范围;
将对象赋值为null;
(3)接口:用 interface 定义
实现接口 用implements关键字 继承用extends关键字
注意:接口中的方法全部是抽象(Abstract)方法,正式因为全部都是抽象方法,所以,省略 abstracts不写;
成员变量全部是Public Static final (可以省略不写)
PS:注意抽象类和接口区别:
抽象类可以有抽象方法,也可以不是抽象方法
成员变量可以不是public static final
定义接口抽象类和接口都是为了被继承:接口 (Implements(实现),因为接口中全部是抽象方法,所以 所有方法必须被重写覆盖@Override) 抽象类(extends)
(2)抽象类:使用 abstract class 定义的类,它可以含有,也可以不含有抽象方法
继承规则(注意super和this对父类和子类的访问权限控制)
类可以继承类,可以继承抽象类,可以继承接口;
抽象类可以继承类,可以继承抽象类,可以继承接口;
接口只能继承接口
封装(encapsulation):封装使得数据和对数据的操作集成在一起,从而对使用该类的人来说,可以不管它的实现方法,而只管用它的功能,从而实现所谓的信息隐藏。封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护数据。
继承(inheritance):继承使用已存在的类的定义作为基础建立新类,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用;继承是为了重用父类代码,同时为实现多态性作准备。
多态(polymorphism):方法的重写、重载与动态连接 构成多态性;包括设计时多态和运行时多态;C++允许多继承,但是增加了编程的复杂性,所以Java只允许单继承;虽然保证了继承关系的简单明了,但是势必在功能上有很大的限制;所以,Java引入了多态性以弥补不足,此外,抽象类和接口也是解决单继承规定限制的重要手段。同时,多态也是面向对象编程的精髓所在。
接口(interface):接口的定义和类的定义很相似,只是关键字不同,接口的关键字为interface;声明格式如下:interface 接口名 { }
如果一个类实现了某个接口,就必须要实现这个接口的所有方法,即使实在没有内容只是一个空的方法体也要写。而且每个方法都默认是public的,所以实现时代码一定要用public做修饰,参数个数,类型以及返回值的类型都必须与接口中的声明相一致。
1 public class TransferProperty 2 { 3 public void TransferProperty() 4 { 5 6 } 7 int i = 47; 8 public void call() 9 { 10 System.out.println("调用call方法"); 11 for (i;i<3 ; i++) { 12 System.out.println(i+""); 13 if (i==2) { 14 System.out.println("\n"); 15 } 16 } 17 } 18 } 19 21 public static void main(String[] args) { 22 TransferProperty t1 = new TransferProperty(); 23 TransferProperty t2 = new TransferProperty(); 24 t1.i = 60; 25 System.out.println("第一个实例调用输出为:\n"); 26 t1.call(); 27 t2.i = 100; 28 System.out.println("第一个实例调用输出为:\n"); 29 t2.call(); 30 System.out.println("输出完毕!"); 31 }
对象的引用:Book newBook = new Book() ;引用只是存放对象的一个内存地址,并非存放一个对象
如何比较两个对象是否相等:“==” “Equals”
Equals 是String中的方法,用于比较两个对象引用的内容是否相等,“==” 判断的是两个对象引用地址是否相等;
单例模式的应用
1 public class Emperor 2 { 3 private static Emperor emperor = null; 4 private Emperor() 5 { 6 7 } 8 public static Emperor getInstance() 9 { 10 if (emperor==null) { 11 emperor = new Emperor(); 12 } 13 return emperor; 14 } 15 }