1.重载和重写的区别?
重载:是指在一个类中定义多个方法名相同但参数列表不同的方法,在编译是根据参数的个数和类型来决定绑定哪个方法。(编译期绑定)
重写:是指在子类中定义和父类完全相同的方法,在程序运行时根据对象的类型(而不是引用类型)而调用不同的方法。(运行期绑定)
2.封装的意义
1) 降低代码出错的可能性,更便于维护
2) 当内部实现细节改变时,只要保证对外功能定义不变,其他模块不需要改
3.访问控制修饰符
1) private:修饰成员变量和方法只能在本类中调用
2) public:修饰的成员变和方法能在任何地方调用
3) protected:本类,子类,同包类
4) 默认:本类,同包类
4.关键字static和final
static:静态的
1)静态变量:
1.1)由static修饰
1.2)属于类的,存在方法区中,只有一份
1.3)常常通过类名.来访问
1.4)何时用:所有对象的数据都一样
2)静态方法:
2.1)由static修饰
2.2)属于类的,存在方法区中,只有一份
2.3)常常通过类名.来访问
2.4)静态方法中没有隐式的this传递
所以静态方法中不能直接访问实例成员
2.5)何时用:方法的操作仅与参数相关而与对象无关
3)静态块:
3.1)由static修饰
3.2)属于类的,在类被加载期间自动执行
因类只被加载一次,所以静态块也只执行一次
3.3)何时用:常常用于加载/初始化静态资源(图片、音频、视频...)
final:不可变----单独使用的几率很小
1)修饰变量:变量不能被改变
2)修饰方法:方法不能被重写
3)修饰类 :类不能被继承
static final常量
static final修饰的成员变量成为常量,必须声明同时初始化,并且不可以被改变
5.面向对象三大特征
1) 封装:
类:封装对象的属性和行为
方法:封装的是具体的实现过程
访问修饰符:封装的是访问的权限
2) 继承:
作用:避免代码重复,有利于代码的复用
父类:所有子类所共有的属性和行为
子类:子类所特有的属性和行为
子继承父后,子具有: 父+子
单一继承、传递性
3) 多态:
a) 意义:
行为的多态:同一类型引用指向不同的对象时,有不同的实现
对象的多态:同一对象被造型为不同的类型时,有不同的功能
b) 向上造型、强制类型转换、instanceof
c) 多态的表现形式:
重写
重载
字符串基本操作
1) int indexOf(“字符”):给定字符在字符串第一次出现的位置,0表示第一个字符,若不含有给定字符,则返回-1。
2) substring(int begin,int end):截取当前字符串内容,含头不含尾
3) trim:去掉空格
4) charAt(int index):获取给定下标的字符
5) startsWith 和endsWith 判断是否以给定字符串开始(结尾)的
6) 大小写转换:toUpperCase(),toLowerCase()
StringBuilder的常用方法
1) append(String str):追加字符串
2) insert(int begin,String s):插入字符串
3) delete(int start,int end):删除字符串
4) replace(int start,int end,String str):替换字符串
5) reverse():字符串反转
String,StringBuilder,StringBuffer区别
String对象是不可变对象,一旦字符串内容改变,就会创建新的对象;
StringBuilder:非线程安全,并发处理,性能较快
StringBuffer:封装了可变字符串对象,线程安全,同步处理,性能稍慢
正则相关API
1) matches():返回Boolean类型,判断是否匹配
2) split(String regex):对字符串拆分
3) replaceAll(String regex,String replaceword):根据正则替换部分字符串
"=="与equals区别
“==”是值比较,对于引用类型变量而言,该对象保存的是对象地址,使用“==”是比较两个变量的地址是否相等,就是看两个变量引用的是否为同一变量;
equals是内容的比较,对于两个引用变量而言,是比较两个对象所引用的内容是否相同;
例:两个人有一支一样的笔,用==返回结果是false,用equals返回结果是true
可以理解为:“==”判断是否为同一个,equals判断像不像。
date及其常见API
1) 系统当前时间:Date date=newDate();
2) 1970.1.1至今的毫秒数:long time=date.getTime();
3) date.setTime(long time);距离纪元time毫秒的日期
4) getTime():Date对象表示时间点距离纪元的毫秒数
Date和String之间的转换
DateàString: SimpleDateFormat对象.format(date)
StringàDate: SimpleDateFormat对象.parse(string)
calendar类
1) calendar.getInstance():当前系统时间
2) calendar.set(Calendar.YEAR/Month/DAY_OF_MONTH)
注:月份从0开始,也可以用常量Calender.MAY
3) 获取时间分量
calendar.get(Calendar.YEAR/Month/DAY_OF_MONTH)
4) 获取时间分量所允许的最大值
calendar.getActualMaximum(DAY_OF_MONTH):获取月的最后一天
5) Date date=calendar.getTime();
集合:
1) ArrayList和LinkedList:
List接口的两个常见实现类
ArrayList:用动态数组方式实现List接口,适用于随机访问
LinkedList:用链表方式实现List接口,适用于插入和删除
2) 集合à数组:list.toArray(newString[]{})
3) 数组à集合:Arrays.asList(数组)
4) 排序:Collection.sort(list);对集合list内元素进行自然排序(由小到大)
Queue和Deque
Queue:队列,LinkedList实现了Queue接口
boolean offer(E e):将元素e追加到队列末尾,成功返回true
E poll():从队首删除并返回该元素
E peek():返回队首元素,但不删除
Deque: Queue的子接口 双端队列 LinkedList实现了该接口
void push(E e):将给定元素存入栈首
E pop():将栈首元素删除并返回
11.Map接口
方法:
V put(K k, V v ):向Map存入对象 如果Key已存在,则更换对应的value值,返回值为被替换的元素,若key不存在,则返回null
V get(Object key):若key存在,返回对应的value值,若key不存在,则返回null
boolean containsKey (Objectkey):检测Map中是否包含给定的key
HashMap:
HashMap是Map的子类实现,使用散列算法实现hashcode方法
FOS对象
FOS(重写模式):
File file=new File(“demo.dat”);
FileOutputStream fos=newFileOutputStream(file);
注:若指定文件中已包含内容,当使用FOS写入数据时,原有数据会清空.
FOS(追加模式):
File file=new File(“demo.dat”);
FileOutputStream fos=newFileOutputStream(file,true);
2.常见RuntimeException
IllegalArgumentException:向方法传入了一个不合法或不正确的参数
NullPointerException:空指针异常
ArrayIndexOutOfBoundsException:数组下标超出范围
ClassCastException:将对象强制转换为不是实例的子类时,抛出的异常
NumberFormatException:字符串转换格式异常
XML
XML:可扩展标记语言,是独立软件和硬件的信息传递工具,应用于web开发的许多方面,常用于简化数据的存储和共享.
大小写敏感;
必须有根元素
XML解析
SAX解析:优点:可以立即开始,速度快,没有内存压力
缺点:不可对节点进行修改
DOC解析:优点:把xml文件在内存构造树形结构,可以遍历和修改节点
缺点:如果文件较大,内存有压力,解析时间比较长
获取根元素方法:Document doc=readXML(“XX.xml”);
Element root=doc.getElement();
Element
Element element(String name):获取当前元素下指定名称的子元素
List<Element>elements=element.elements():获取当前元素下所有子元素
getName():获取当前元素名称
getText():获取元素的文本节点(起始标记与结束标记之间的文本)
Attribute attribute(intindex):获取当前元素的指定属性,index为索引,从0开始
Attribute attribute(String name):获取当前元素指定名称的属性
String getValue():获取属性的值
数据库
1.DDL
1) DESC 查询表结构
2) DEFAULT 默认值
3) RENAME old TO new 修改表名
4) ALERT TABLE emp ADD();增加列
ALERT TABLE emp DROP();删除列
ALERT TABLE emp MODIFY();修改列
2.DML
1) INSERT INTO emp(...)VALUES(…);向表中插入数据
2) UPDATE emp SET name=..WHERE..:更新表中数据
3) DELETE FROM emp WHERE …:删除表中的记录
3.字符串函数
1) CONCAT和”||”连接函数
CONCAT(char1,char2);
例:SELECTCONCAT(CONCAT(name,’:’),sal) FROM emp;
SELECT name||’:’||sal FROM emp;
2) LENGTH(char)返回参数字符串长度
例:SELECTLENGTH(name) FROM emp;
3) UPPER,LOWER和INITCAP
UPPER(char):将字符转换为大写
LOWER(char):将字符串转换成小写
INITCAP(char):首字母大写
例:SELECTUPPER(‘hello world’),LOWER(‘hello world’),INITCAP(‘hello world’)FROM DUAL; //HELLO WORLD ,hello world ,Hello World
4) TRIM ,LTRIM ,RTRIM 字符串的截取
TRIM(c2 FROM c1):从c1的前后截去c2
LTRIM(c1,c2):从c1的左边截去c2
RTRIM(c1,c2):从c1的右边截去c2
后两个函数,如果没有c2参数,就除去空格
例:SELECTTRIM(‘e’FROM ‘elite’) AS t1,LTRIM(‘elite’,’e’) AS t2,RTRIM(‘elite’,’e’) AS t3;//t1:lit t2:lite t3:elit
5) LPAD和RPAD补位函数
LPAD(char1,n,char2)左补位:在char1的左端用char2补足到n位
6) SUBSTR和INSTR
SUBSTR(char , m, n):在char的m(从1计数)位开始截取n个字符
INSTR(char1,char2):返回char2在char1中的位置数
4.数值函数
1) ROUND(i,n);四舍五入 n为位数
2) TRUNC(i,n);截取函数 n为位数
3) MOD(i,n);取模 按n取余数
4) CEIL(n);取整(天花板) 大于等于n的最小整数
FLOOR(n);取整(地板) 小于等于n的最大整数
5.日期操作
1) TIMESTAMP 时间戳 与DATE相比,可以保存小数秒,精确度高
2) 日期关键字:SYSDATE:返回当前系统时间(精确到秒)
SYSTIMESTAMP:返回系统时间(精确到毫秒)
3) 日期转换函数
TO_DATE(char,fmt):把字符串按照指定形式转换成日期
TO_CHAR(date,fmt):把指定日期转换成字符串
4) 日期常用函数
LAST_DAY(date);返回日期所在月的最后一天
ADD_MONTHS(date,i);返回日期加上i个月之后的日期
MONTHS_BETWEEN(date1,date2);返回两个日期之间隔了多少个月 date1-date2
NEXT_DAY(date,char);返回date的下一个周几(char 1表示周日)
LEAST /GREATEST(date1,date2,…)返回参数列表中的最小,最大值
EXTRACT(date FROM datetime);抽取指定参数的数据
5) 空值操作
NVL(e1,e2);如果e1为null,则取e2(非空)
NVL2(e1,e2,e3);如果e1不是null,返回e2,如果是null,返回e3
SQL
1) 模糊查询
LIKE条件
_:单个字符
%:0-多个字符
2) IN和NOT IN
IN(list),NOT IN(list)
3) ANY和ALL条件
>ANY:大于最小 >ALL:大于最大
<ANY:小于最大 <ALL:小于最小
4) DISTINCT过滤重复
SELECT DISTICT job FROM emp;
5) 排序
ORDER BY ..(DESC/ASC):DESC降序,默认ASC升序
6) 聚合函数
将表的数据划分为几组函数,每组统计出一个结果
MIN MAX AVG SUM COUNT(忽略NULL值)
7) 分组
GROUP BY和HAVING
HAVING字句用来对分组后的结果做进一步限制,必须跟在GROUP BY后面,不能单独存在.
查询语句的执行顺序:
1st) FROM字句:执行顺序为从后往前、从右到左。数据量较大的表尽量放在后面。
2nd) WHERE字句:执行顺序为自下而上、从右到左。将能过滤掉最大数量记录的条件写在WHERE字句的最右。
3rd) GROUP BY:执行顺序从右往左分组,最好在GROUP BY前使用WHERE将不需要的记录在GROUP BY之前过滤掉
4th) HAVING字句:消耗资源。尽量避免使用,HAVING会在检索出所有记录之后才对结果进行过滤,需要排序等操作。
5th) SELECT字句:少用*号,尽量使用字段名称,oracle在解析的过程中,通过查询数据字典将*号依次转换成所有列名,消耗时间。
6th) ORDER BY字句:执行顺序从左到右,消耗资源
SQL关联查询
1) 笛卡尔积
指做关联操作的每个表的每一行都和其他表的每一行做组合,假设两个表的记录条数分别是X和Y,笛卡尔积将返回X*Y条记录。当两个表关联查询时,不写连接条件,得到的结果即是笛卡尔积