一.包
特点: 1.包可以有多层(以"."分隔,com.itheima.homework1)
2.不同包下的文件名可以相同
作用:分类管理java文件,避免重类名的冲突
注意: 1. 声明包的语句,必须写在程序有效代码的第一行(注释不算)
2.相同包下的类可以直接访问,不需要其他操作.
3.类的全名: 包名.类名
不同包之间的访问:
1.使用类的全名 java.util.ArrayList=new java.util.Arraylist();(不推荐,太麻烦)
2.imort 例.import java.util.ArrayList;
注意:"*"代表通配符,代表导入该包下的所有类.
问题:不同工程下的包 如何使用?
二.权限修饰符
public: 公共的,整个项目可见
protected: 受保护的,当前包下,或者子类中
问题:在别的包下 new一个子类对象 能访问protected修饰的方法吗?
答案是 不可以,只有在子类中才可以.
default(不写,空着):默认的,当前包下
private: 私有的,当前类
修饰符总结:
修饰符
| 类
| 成员变量
| 成员方法
| 构造方法
|
public
| √
| √
| √
| √
|
默认
| √
| √
| √
| √
|
protected
| ×
| √
| √
| √
|
private
| ×
| √
| √
| √
|
abstract
| √
| ×
| √
| ×
|
static
| ×
| √
| √
| ×
|
final
| √
| √
| √
| ×
|
常见规则:
1.以后我们使用public来修饰类,一个java文件中只能有一个类,如果一个文件中有多个类,类名和文件名一样的类,必须用public来修饰,其他类不可用public
2.以后所有的成员变量都是用private修饰,且提供get,set方法
3.以后所有的方法使用public修饰
4.以后所有的构造方法都使用public修饰,如果不想让创建对象,就使用private来修饰
三.内部类
特点:
1.虽然编写在同一个java文件中,但是编译后都是独立的".class"字节码文件
2.内部类编译后的字节码文件名是"外部类名$内部类名"
分类:
a.成员内部类
类中,方法外
Outer.Inner i=new Outer().new Inner(); 非静态成员内部类
Outer.Inner i=new Outer.Inner();静态成员内部类
b.局部内部类
方法中
c.匿名内部类
方法中或者方法参数中,且必须创建对象
一.注意:
1)new出来的实际上是类或接口的子类对象
2)如果创建了继承普通类的子类对象, 可以自主选择是否重写父类方法
3)如果创建了实现接口或抽象类的子类对象, 则必须重写父类所有抽象方法
二.匿名内部类的使用方式:
方式1:
创建并定义匿名内部类
使用变量接收创建的对象
使用对象变量调用方法
方式2:
创建并定义匿名内部类
直接.链式调用匿名内部类对象的方法
三.应用场景
a.作为参数进行传递
b.只用一次的抽象类或者接口的子类,免去专门定义一个类
四.扩展
a.修饰符
修饰符
| 类
| 内部类
| 局部内部类
| 成员变量
| 成员方法
| 构造方法
|
public
| √
| √
| ×
| √
| √
| √
|
默认
| √
| √
| √
| √
| √
| √
|
protected
| ×
| √
| ×
| √
| √
| √
|
private
| ×
| √
| ×
| √
| √
| √
|
abstract
| √
| √
| √
| ×
| √
| ×
|
static
| ×
| √
| ×
| √
| √
| ×
|
final
| √
| √
| √
| √
| √
| ×
|
b.匿名内部类对象和直接定义子类实现接口或继承抽象类, 应该用哪种方式?
1.如果对于这个接口或抽象类, 只有一种实现方式, 就直接定义实现类, 创建该类对象作为参数传入
2.如果对于这个接口或抽象类, 会有多种实现方式, 定义很多实现类会导致代码很长复用性差, 此时使用匿名内部类比较方便
c.匿名内部类常见用途
监听器(Listener)或回调(Callback): 配合接口和匿名内部类实现
day05
一. Object类 & System类
1) String toString() 返回值:String
Object的toString方法:return getClass().getName() +
"@" + Integer.toHexString(hashCode())
getClass():返回一个字节码对象
getName():获取类的全名
Integer.toHexString():返回一个16进制的字符串
hashCode(); 获取hash值
2) boolean equals(Object obj)
比较两个对象内的属性是否相同,
需要重写Object的方法,Object默认是比较地址值
掌握:获取字节码对象的三种方法:
一个类仅有一个字节码对象
1)类名.class
2)对象.getclass()
3)Class.forName(类全名)
二.System
1)arrayCopy(Object src,int srcPros,Object dest,int destPros,int length);
src:源数组
srcPros:源数组起始索引
dest:目标数组
destPros:目标数组起始索引
length:复制长度
注意:不要数组越界
2)currentTimeMillis()
当前系统时间,以毫秒值进行返回
3)exit(int status)
种植当前正在运行的java虚拟机,参数status用作状态码,0为正常终止,
非0则为异常终止
三.日期相关类
Date 表示特定的瞬间,精确到毫秒,
Date() 创建一个表示当前系统时间的Date对象
Date(long time) 根据"指定时间"创建Date对象,time毫秒值
void setTime(long time) 设置毫秒值
long getTime() 获取毫秒值
SimpleDateFormat 格式化日期工具类
String<-->Date 解析与格式化
格式化
Date--->String
String format(Date date)
解析
String--->Date
Date parse(String source)
构造方法
SimpleDateFormat()使用默认模式创建
SimpleDateFormat(String pattern)使用自定义模式创建
"y" 年--->yyyy 1988
"M" 月--->MM 06
"d" 日--->dd 30
"H" 小时--->HH 05
"m" 分--->mm 59
"s" 秒--->ss 59
yyyy-MM-dd HH:mm:ss 1988-11-26 12:30:50
四.calender 日历
1)创建对象
Calendar c=Calendar.getInstance();
2)成员方法
获取: get(int field)
修改: set(int field,int 值)
添加: add(int field,int 值)
field为Calendar中的静态字段
static YEAR: 年份
static MONTH: 月份. 注意月份数值是0-11
static DAY_OF_MONTH: 日期
static HOUR: 小时(12小时制)
static HOUR_OF_DAY: 小时(24小时制)
static MINITE: 分钟
static SECOND: 秒
五.包装类
一.自动装箱
基本数据类型-->包装类
自动拆箱
包装类--->基本数据类型
二.
char: Character
int: Integer
以上有所区别,别的都是首字符大写
基本类型: 包装类
byte: Byte
short: Short
long: Long
float: Float
double: Double
boolean: Boolean
三.Integer-->int ,int intvalue()
int--->Integer,new Integer(int)
四.字符串和整数转换
- 方式1: Integer Integer(String s)
- 方式2: static int parseInt(String s)
- 方式3: static Integer valueOf(String s)
- 方式1: "" + int值
- 方式2: String toString()
- 方式3: static String toString(int i)
六.正则表达式
boolean matches(String regex)
常用的规则
x就是字符x
"?" 0次或者1次
"+"一次或者多次
"*"0次或者多次
"{n}"n次
"{n,}"至少n次
"{n,m}"至少n次,但是不能超过m次
\d 是[0-9]的数字
\w 单词字符[a-zA-Z0-9]
\s 是空白字符
[^a] 除了 a 以外
day06
一.集合 Collection
1)集合的体系结构:
由于不同的数据结构,所以java给我们提供了不同的集合
但是不同的集合他们的功能都是相似的,不断的向上抽取,
将共性的东西抽取出来,这就是集合体系形成的原因
2)Collectlion的基本方法
add() 添加
clear() 清空
contains() 包含
isEmpty() 是否为空
remove() 删除
size() 长度
toArray() 转化成Object类型数组
3)iterator 迭代器
获取迭代器对象: 集合对象.iterator();
next() 获取一下一个元素
hasnext() 判断是否有下一个元素
4)泛型
泛型:是一种广泛的类型,把明确数据类型的工作放在编译时期,借鉴数组的特点
优点:
1)避免了类型转换的问题
2)可以减少黄色警告线
3)可以简化我们代码的书写
5)增强型for循环
for(元素类型 变量名: 集合名){
}
二.常见的数据结构
数组的特点:
数组的长度一旦定义则不可改变
数组中的元素都有整数索引
数组只能存储同一类型的元素
数组即可以存储基本数据类型,也可以存储引用数据类型
增删慢,查询快
链表的特点:
查询慢,增删块
三.list的子体系
add(int index,Object obj)
add(Object obj)
remove(int index)
set(int index,Object obj)
get(int index)
LinkedList
底层是链式结构,查询慢,增删快
addFirst
addLast
removeFirst
removeLast
getFirst
getLast
问题:说出几个linkedlist特有的方法()
ArrayList
底层是数组结构,查询快,增删慢