Java复习
Java的基础知识
1.变量和数据类型以及类型的转换
基本数据类型 :byte short int long float double boolean char
类型的转换: 自动类型转换 强制类型转换
比如:一个int类型与double类型转换,最终的结果是double类型
char c1 = '\n'; char c1='\n'; \n转义符代表换行 \t 表示制表符Tab
int aa = 34; int aa='A';
浮点数默认为double
float f =3.14;错的 需要强转 下面2种类型
float f =(float)3.14;
float f=3.14F;
double ff =3.14;(常用)
boolean 类型默认值为False(常用)
boolean isRight = false boolean isRight = null;(只有引用类型才能赋值为null)
2.运算符
算数运算符 : + - * / %
一元运算符 : ++ --
int x = 10;
System.out.println(x++); 10
System.out.println(x); 11
System.out.println(++x); 12
System.out.println(x); 12
int a = (x++)+(++x)+(--x);
10 12 11
赋值运算符 : = += -= *= /= %=
逻辑运算符 : && || ! &&与&区别 || 与|的区别
比较运算符: > < >= <= !=
三元运算符: ?:
3.基本语法:
if...esle
if...else if...else
switch
while
do...while();
for
4.数组
数组如何定义,如何向数组中添加元素以及获取元素
int[] array = new int[10];
int[] array1 = new int[]{1,2,3,4,5};
int[] array2 = {1,2,3,4,5};
对象数组定义
Employee emps1= new Employee[10];
Employee emps1= new Employee[]{new Employee(),new Employee()};
Employee emps1= {new Employee(),new Employee()};
for(int i =0; i emps1[i]; System.out.printIn(emp.getName()); } 数组也是引用类型:默认值null String[] strs = null; 可以向字符串添加3个"" String[] strs = new String[3]; for(int i = 0;i<3;i++);{ strs[i] = ""; } String[] strs = new String[]{"","",""}; 不加长度就得在后面赋值 String[] strs = new String[]; strs={"","",""};不正确的 String[] strs = {"","",""}; String[] strs = new String[3]{"","",""}; 不正确 对数组的排序(冒泡排序法) for循环嵌套 对二维数组了解,如何创建二维数组以及对二维数组的遍历 5. 方法(函数):就是一个功能 方法的定义: 有返回值的方法,无返回值的方法 public static void m1(String s){ System.out.println(s); } public String m2(String name){ return name; } 方法的调用: 类名.方法名 类名.m1("tom"); String name = 类名.m2("jazz"); 注意: 1.在实际应用中,方法什么时候有返回的/无返回的 什么时候定义有参数的/无参数的 2.参数表示用户的输入,而返回值表示方法的最终结果 3.参数与返回值类型可以是基本类型也可以是引用类型 变量的作用域: 局部变量(方法中的变量) 写在方法里 成员变量(类中的变量) 注意:局部变量一定要先初始化然后才能使用 int x ; int[] array=new int[5]; for (int i = 0; i < array.length; i++) { x++; 报错,因为x没有初始化,就使用了。 } Java面向对象基础:继承,封装,多态 1.类与对象的关系,类中可以写什么,类中的方法如何调用 类与对象的关系:类是抽象的,对象是具体的,对象是对模板的复制 创建对象的基本语法: 类名 变量名(对象名)=new 类名(); 访问对象中的属性行为: 对象名.属性 对象名.方法名() 2.类中的方法重载 3.构造器:作用是初始化属性和对象 public 类名(){} 调用构造器:类名 对象名= new 构造器(实参1...实参n); 匿名对象: new 构造器().方法名; 注意:使用匿名对象调用方法的时候,这个方法只能被调用一次 初始化属性 private Test(String name) { this.name=name } 初始化对象 private String[] array; private Emp emp; public Test(){ array=new String[10]; emp=new Emp(); } 调用构造器 Test t = new Test("tom"); Test t = new Test() 构造器也可以重载 继承: B extends A 为什么使用继承(体现到Java中的可重用性(少些代码)) Java只支持单继承 注意:B类继承A类的时候会调用父类中的无参数的构造器,如果没有会报错 public class A{ public A(){ } Public A(int a){ System.out,println(a); } } public class B extends A{ } 注意:this与super的区别 this表示当前类自身的资源 ,放在构造方法的第一行 super表示调用父类的资源 this.属性名 this.方法名() this():表示当前类中的构造器 注意: this()一定要出现方法的第一行 super: super.属性名 super.方法名 super()调用父类中的构造器 4.方法重写(Override) 要有继承关系,子类的方法与父类的方法相同,会继承父类的构造器,会调用子类重写后的方法 注意:方法重载与重写的区别 1.重载发生在一个类 2.重写要有继承关系,与父类的方法一样 5.多态(三个条件) 1.要有继承关系 2.方法重写 3.父类的引用指向子类的对象 继承多态 public void m1(父类型) m1(子类的对象) public 父类型m2() return 子类的对象 使用多态的好处:可以优化程序的设计,提高重用性。 注意:子类新扩充的方法对父类是不可见的。才需要引用类型的转换(向上造型:自动转换,向下造型:强制转换) 6.抽象类与接口 接口也是Java中多态的体现 抽象类(abstract):一个类中只要有抽象类,那么这个类一定就一定定义为抽象类 。 抽象类不能实例化(不能创建对象) 抽象类中可以有抽象方法也可以有非抽象方法,从规范来说我们抽象类中只写抽象方法。 在接口中:常量默认的都是 public static final 方法默认的都是: abstract public void m1(List list){} 调用方法 m1(new ArrayList()); public List(父类型) m2() return new ArrayList(子类型)(); 接口与抽象类的区别 1.从规范来说: 接口会更加规范一些(常量以及抽象方法)而抽象类(变量,常量,非抽象方法) 2.类只支持单继承而接口可以实现多继承 3.使用接口的好处:接口灵活(接口和实现可以分离),解耦合(减少层与层之间的依赖) 接口和抽象类都不能被实例化 类成员的访问权限修饰符:private default protected public 关于接口是如何进行解决耦合的。 参考三层结构 7.设计模式:单例模式 (重要) 构造器是私有的 8.异常处理 Throwable 类是Java语言中所有错误或异常的超类,两个子类 :Error/Exception(需要程序员处理) 基本语法 try catch fanilly 异常的两大类:非检查异常(RuntimeException) 检查异常 try{ //有可能产生异常的代码 }catch(异常的类型 变量名){//catch 捕获异常 异常类型指的是:ArrayIndexOutOfBoundsException //处理。。。。 //子类的子类 }catch(异常的类型2 变量名){//子类 }catch(异常的类型3 变量名){//父类 从上往下,从小到大排 }finally{ //无论try中的代码有没有异常,都会执行finally中的语句 //在实际应用中主要用于对资源的释放 } 面试题: throws 与throw 的区别 throws 写在方法的后面 表示异常的声明,它在定义方法的时候去使用,表示这个方法有可能会产生异常,但是我不会在这个方法中去处理,谁调用谁处理。 throw 表示人为的抛出异常,这个异常对象需要我们自己new 使用语法:throw new NullPointerException(""); 9.常用的工具:封装类 (8种) 字符串 (String) SimpleDateFormat(格式化日期) == 和equals的区别 (重要) ==: 1.对基本数据类型进行比较,它比较的是值是否相等 2.而引用类型比较的是内存地址 equals: 1.JDK文档中提供的一些系统类都重写了这个equals方法,比较的是内容是是否相等 2.对于用户来说我们自定义的类如果没有重写Object中的equals方法,实际来说比较的是内存地址 3.所以说对于用户的自定义类需要重写Object中的equals方法 String 与 StringBuffer的区别 StringBuffer的长度是可变的 10.集合 1.List ArrayLast add get Iterator 2.Set HashSet/TreeSet add Iterator 3.Map HashMap/TreeMap put(key,value) get(key) 以上三种集合的特点: List是一个有序的集合,可以有重复的元素 extends Collection Set是一个无序的集合,不能有重复的元素 extends Collection Map是以键Key-值value的方式来保存元素,获取元素可通过Key就能获取到value Collection与Collections的区别 Collection:接口 Collections:针对集合提供的工具类