Java基础知识总结(1)


   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条记录。当两个表关联查询时,不写连接条件,得到的结果即是笛卡尔积

猜你喜欢

转载自blog.csdn.net/qigc_0529/article/details/52096518