第一天
java
面向对象
跨平台
JDK
jdk是一个开发工具包,包含了jre以及常用的类库
jre
包含了jvm(java 虚拟机)和和运行java程序(.class字节码文件)所需要的核心类。
傻瓜式安装,安装完以后配置环境
右击计算机,找到高级系统设置
打开高级系统设置,到系统变量配置
java_home jdk的安装路径
path java_home/bin
java javac
切换盘符:
从小到大
byte>>>>>short>>>>>int>>>>>long>>>>>float>>>>double
(强制转换的类型)
trim() 去掉首尾空格,并返回String
charAt();截取下标所对应的字符,返回值是char
length();这是字符串获取长度
contains();字符窜是否包含另外一个字符串
endsWith();
判断是否是以XXXXX结束的,返回值是boolean
indexOf();字母首次出现的位置,返回值是int equalsIgnoreCase();忽略字母的大小写,返回值是boolean
startsWith();是以XXXXX开始,返回值是boolean
substring();截取字符串长度,返回 值是String
isEmpty();判断是否是空串 返回值是boolean
valueOf();转换成字符串类型,返回值是String
split(),重中之重,字符串切割转,返回值是String数组。
import 导包关键字
continue 结束当前循环进入下一轮循环
break 结束循环
return 结束循环,并可以有返回值
减少代码冗余、
提高代码重用性
提高程序的结构化
方法重载和方法名一样,参数的类型,个数不同,参数顺序(面试经常问到),
/**
* 方法的声明方式:
*
* public static
(返回值类型) methodName(params){ 代码块}
*/
数组的定义:
声明数组的三种方式
int [] i={1,2,3,4};
int [] n=new int []{1,2,3,4};
int [] s=new int [length];
ins[0]=1;
.
.
.
静态关键字 static
静态变量:能被静态方法或者非静态方法中使用
非静态变量:只能在非静态方法中使用
静态方法:可以直接通过类名调用,不用创建对象
非静态方法:需要创建对象,通过对象进行调用
对象:客观存在事物;
类:是对象的抽象,概念定义。
创建对象的关键字是 new
举例:new Student();
构造函数:
在创建对象的时候就被调用了
和类名保持一致
没有返回值
final 修饰的变量常量,值不可以被改变
面向对象:
封装
继承
多态
什么是封装:
首先通过private属性私有化,不能让外界直接访问,要通过get/set方法来访问属性,这就是封装
get/set方法命名统一,get/set+属性名称,属性名称首字母大写
set方法设置 get方法获取值
通过继承,子类具有访问父类对象的成员的访问权。
继承的好处:继承是实现代码复用的重要手段。
继承的步骤:
子类继承父类,当创建子类对象时,先创建父类对象,再创建子类的对象。
Java中的继承是单继承。
private default protected public
本类 √ √ √ √
本包 √ √ √
子类 √ √
全局 √
方法的重写 重写的方法名一样,权限修饰符更宽或者是相同,返回值类型相同,
super 指的是父类对象,可以通过super关键字直接调用父类的方法或者是属性,不能被静态成员访问
super()
调用父类构造方法,必须写在子类构造方法
的第一行。
多态:
多态存在的三个必要条件:继承、重写、父类引用指向子类。
在多态的情况下,只能调用父类已有的对象成员,不能调用子类新增的成员。
如果父类对象、子类对象定义了同名属性,在多态情况下使用父类对象的。
如果子类对象重写了父类对象的方法,在多态的状态下,调用的是子类的重0写方法。
向上转型
当子类对象赋值给一个父类对象引用时,便是向上转型。例子 Animal a=new Cat();
instanceof
判断一个对象,是否是另外一个对象
包装类:对基本数据类型的强化,提供了对应的方法和属性
基本数据类型和包装类型的区别
包装类型可以为null 基本数据类型不可以为空;
.valueOf();
.toString();
final修饰的类无法被继承。
final修饰的方法无法被重写。
final修饰的变量无法被再次赋值,
变为了常量。
堆:放的是对象
栈:属性和方法
//类就是你们写Java文件
类加载时机:
1,第一次创建对象的时候
2,第一次调用静态成员的时候
类加载:
当jvm 第一次使这个类时,需要找到这个类.class文件,并把这个文件类的信息,读取到jvm 中,并保存起来。
类加载的过程
1)如果需要,先加载父类 2)按照定义顺序,初始化静态属性和执行静态初始代码块
静态代码块:
类加载的时候执行一次;
StringBuilder 先线程不安全的,StringBuffer 线程安全(贼重点)可以通过append
来操作字符窜
执行速度方面的比较:
StringBuilder > StringBuffer > String
成员内部类:
可以访问外部类的属性和方法
对象的创建:先创建外部类对象然 后 外部类对象.new 创建
静态内部类:
只能访问外部类的静态成员
创建对象 new 外部类.静态内部类名()
局部内部类:
不仅可以访问外部类属性还可以访问局部变量
匿名内部类:
一般用于接口的实现
异常:
throwable
error:程序出现无法控制,无法修改
Exception:可控的,可以手动处理
RuntimeException 运行时异常
非 RuntimeException:一般指的是我们编译
异常
RuntimeException 处理的方式:
try{}catch(){}
try{}catch(){} finally{}
throws 在方法的声明处抛出异常
throw 手动一个异常对象
所有异常类的父类是Exception
ArithmeticException :数学异常
NullPointerException: 空指针异常
indexOutOfBoundException : 下标越界
classCastException:类型强转错误
FileNotFoundException:文件找不到
抽象类:
抽象类的特点
1、抽象类不能直接用new 对象()去创建。
2、抽象类必须使用abstract修饰符去修饰。
3、抽象类可以有普通的方法。
4、抽象类中的抽象方法使用abstract修饰符修饰,抽象方法没有方法体。
5、抽象类中的抽象方法交给子类去实现。
6、抽象类会被间接创建,因为在创建子类对象时先创建的是父类对象,这样抽象类作为父类会被间接的实例化,所以抽象类也有构造器。
注意:abstract只能修饰对象成员,不能修饰静态成员,抽象方法权限修饰符不能为private,final。
抽象类和普通类的区别
1、抽象类不能被直接创建实例对象,普通类可以。
2、抽象类中可以有抽象方法,也可以没有抽象方法,普通类不能有抽象方法。
3、如果抽象类继承其他抽象类,可以不用重写其父类的抽象方法,普通类继承抽象类必须重写抽象方法。
new Date ()获取当前日期
SimpleDateFormat 格式化日期类
format() 日期转化为字符串
parse() 字符串转换成日期
获取当前毫秒值
System.currentTimeMillis();
接口的定义:
接口定义了你要实现功能一种规范,功能的实现要用类来实现,
关键字是interface 。
接口可以同时实现多个,实现关键字是implements,用逗号隔开
接口的成员
1、接口的方法都是抽象方法,默认使用public abstract修饰,不能修改。
2、接口的变量都是静态常量,默认使用public static final修饰,不能修改。
3、接口中的常量必须在声明时赋值,常量名称必须大写。
接口和继承
先继承,再实现
7.1 接口和抽象类的相同点
1、抽象类和接口都不能被直接实例化,他们都需要被继承或实现。(类和抽象类中间是继承关系,类和接口是实现关系,接口和接口之间可以有继承关系)
2、接口和抽象类都可以包含抽象方法,实现或继承他们 的普通类必须重写抽象方法。
3、抽象类和接口,都可以体现在多态中,作为变量数据类型接收子类实例对象。
接口和抽象类的不同点
1、接口里只能包含抽象方法,抽象类则可以包含普通方法和抽象方法。
2、接口不能定义静态方法,抽象类可以(jdk1.8之后可以)。
3、接口中的成员变量是静态常量,使用public static final修饰。抽象类则可以定义静态常量,也可以定义非静态成员变量。
4、接口不能被创建为对象,不含构造器,抽象类可以被实例化为对象,抽象类具有构造器。抽象类是可以被实例化,子类对象创建的时候,创建抽象类父类对象。抽象类是可以有静态代码块,构造代码块,构造器方法,抽象类就既可以有实例成员、也可以有静态成员。
垃圾回收机制:
对象的生命周期
从创建对象开始
用:对对象应用,
不可见,
不可达
收集,收集要销毁对象
对象不用的生命已经结束
finalize:这个是创建对象的时候
生命周期结束,会执行finalize
销毁你创建对象,垃圾回收不能强制销毁
重新分配空间
创建一个日历对象
Calendar c=Calendar.getInstance();
setTime();参数是日期类型的
add();计算年月日的
get();参数是年月日,返回值是int类型的