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.length;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:针对集合提供的工具类