java复习

java的编译和执行指令

HelloWorld.java

javac HelloWorld.java  -> 编译生成 HelloWorld.class(字节码文件)

java HelloWorld  ->  执行HelloWorld类

java的命名规则和规范


类,方法,属性,变量统称为标识符

标识符起名规则

首字符可以是字母,_和$

其余字符可以是字母,_, $和数字

名字中间不能出现空格

不能使用关键字和保留字作为标识符

保留字:goto const

关键字:public class static void.....

标识符的起名规范

类名: 首字符大写,其余每个单词首字母都大写    Studnet  StudentClass

方法名:首字符小写,其余每个单词首字母都大写    student  studentClass

属性名/变量名:规则与方法名一致

二进制十进制转换

二进制 -> 十进制

10010  = 2*2*2*2 + 2 = 18

十进制 -> 二进制

20  0

10  0 

5    1    =>  10100

2    0

1

数据类型的取值范围 

      基本类型  1Byte = 8bit    1bit = 0/1

byte    1Byte  7bit    -2的7次幂  - 2的7次幂-1  -128 - 127

short    2Byte  15bit  -2的15次幂 - 2的15次幂-1  -32768 - 32767

int      4Byte

long    8Byte

float    4Byte

double  8Byte

char    2Byte

boolean  1Byte

字符和字符串的区别

char c = 'A'    -- 字符  使用单引号    基本数据类型

String str = "ABC"  -- 字符串  使用双引号  引用数据类型

haha('A');    -- 传入的是字符

public void haha(int c)

public void haha(String s)

类型转换

基本数据类型的转换

自动转换

  byte

  short ->  int -> long -> float -> double

  char

  boolean

  自动转换的规律

(1)小的范围向大的范围自动转换

(2)整数向浮点数自动转换

(3)char向int自动转换

(4)boolean不参与任何转换

强制转换

  语法  double d = 3.14;

  int i = (int)d;

    强制转换丢失精度

(1)浮点数向整数强制转换,丢失小数部分

(2)大的范围向小的范围强制转换,丢失bit位的数据

int i = 300;  100101100

byte b = (byte)i;  00101100

b?  44


引用数据类型的转换

没有继承或实现关系的两个类之间是不能进行类型转换的

继承或实现关系的两个类之间

上溯造型

    子类可以自动转换成父类对象

    class Child extends Parent

    Parent p = new Parent();

    Child c = new Child();

    p = c;

下溯造型

    父类对象向子类对象进行强制转换(该父类对象必须是该子类对象先转过去)

    class Child extends Parent

    Parent p = new Parent();

    Child c = new Child();

    c = (Child)p;    //编译通过,执行时会报出类型转换异常

                            Parent p = new Child();

    Child c = (Child)p;  //没有问题 OK的

单目运算符++

int x = 3;

int y = x++/2;  3/2 = 1

int x = 3;

int y = ++x/2;  4/2= 2

int x = 3;

int y = 5;

  y += x++;  y += 3  8

逻辑运算符的短路

&&  ||

int x = 3;

boolean b = (x++ > 3) && (++x < 5);

      3 > 3

      4

x? 4

&,|不是短路的,通常用于位运算

条件分支和循环

int x = 0;

while(x>0){

  sysout("xxx");

  x++;

}

结论:x = 0  控制台什么都不输出

int x = 0;

do{

  sysout("xxx");

}while(x>0);

结论:x=0  控制台输出“xxx”

while与do...while的区别

while有可能循环体中的代码一次都不执行

do...while至少会执行一次方法体中的内容

数组的声明和创建

一维

  int[] a = new int[3];

  int[] a = new int[]{1,2,3};

  int[] a = {1,2,3};

  int a[] = {1,2,3};

二维

  int[][] a = new int[3][4];

  int[][] a = new int[3][];

  int[][] a = new int[][4];  错误!!


  int[][] a = new int[3][4];

  a.length ? 3

  a[0].length ? 4

冒泡排序

类的属性和方法

属性:代表类的一个属性和状态,声明在类中的变量

方法:代表类中的一个行为

类的声明和实例化

构造方法来完成实例化

类不写构造方法 -- 系统默认提供无参构造方法

类写明了构造方法  -- 系统不再提供了

构造方法是可以重载的

this的使用

1.解决方法中同名变量/同名参数与属性冲突

  private String name;

  public Haha(String name){

this.name = name;

  }

2.在构造方法中调用本类的其他构造方法(必须写在构造方法的第一行)

  private String name;

  public Haha(){

this("张三");

  }

  public Haha(String name){

this.name = name;

  }

方法重载

重载:同名,不同参数,返回值类型无关的方法

继承 

一般(父类)与特殊(子类)的关系

ISA原则  XXX是一种YYY 成立    XXX就是YYY的子类

super

  1.调用继承来的父类的属性和方法(可以被this替代)

Class Parent{

public String name;

}

Class Child extends Parent{

public Child(String name){

super.name = name;    <=>  this.name = name;

}

}

  2.调用父类的构造方法

Class Parent{

public String name;

public Parent(String name){

this.name = name;

}

}

Class Child extends Parent{

public Child(String name){

super(name);  // 此处父类没有无参构造方法,子类必须显式的调用父类构造方法

}

}

抽象类

abstract类  -- 本质上抽象类就是当父类

抽象类中可以有普通方法,也可以有抽象方法。什么方法都没有也行

抽象方法:没有方法体,子类来实现抽象方法。

接口

interface  接口

implements 实现接口

接口中定义的方法都是抽象方法

哪些关键字可以写在接口文件中?

public

abstract

final

extends      接口可以继承其他接口  多继承

class    可以写

implements    不能写!!!

类与接口的关系

类与类之间  单继承关系

类与接口之间  多实现关系

接口与接口之间  多继承关系

接口与类之间  没有关系

接口与抽象类的区别

抽象类是class  接口是interface

抽象类中可以有正常的属性和普通的方法

接口中的方法必须全部是抽象方法  (可以省略public 和 abstract)

抽象类被其他类单继承

接口可以被其他类多实现,也可以被其他接口多继承

封装 

访问权限

private 默认 protected public

private 私有 类自身的内部

默认    包  同包下的其他类

protected 保护 同包下及不同包的子类

public  公有 任何类都可以访问

部分权限

setter和getter方法

只读权限:

属性私有

只设置get方法

多态

重写

子类改写父类同名同参同返回值类型的方法,访问权限子类>=父类

重载与重写的区别

父类引用子类实例化

实例题:参照上次周测分析题

Class Parent{

public void haha(){

sysout("Parent")

}

}

Class Child extends Parent{

public void haha(){

sysout("Child")

}

}

main(){

Parent p = new Child();

p.haha();  ==>  Child

}

static关键字

静态关键字:所有对象共享一个内容

块 

static{

//块

}

当第一次加载该类时,static块中代码执行一次,以后不再执行

在整个程序运行周期中,最多只执行一次

属性  被称为类属性

class Haha{

static int i

所有对象共享该属性

}

Haha h1 = new Haha();

Haha h2 = new Haha();

h1.i = 5;

h2.i = 10;

h1.i? 10

正常的调用方式

Haha.i = 5;

Haha.i = 10;

方法  被称为类方法

无需创建对象即可调用

class Haha{

static int i;

int j;

所有对象共享该属性

static void abc(){

sysout(i);

sysout(j);  --编译失败

}

}

Haha.abc();

静态方法需要注意:

1.静态方法可以直接调用类中的其他静态方法和静态属性

2.静态方法不能直接调用类中的其他普通方法和普通属性

普通方法:

随意

一般使用static设置类方法,不用创建对象就能用。这种方法都是工具性质的

一般配合final声明常量值

final关键字

最终关键

类:  final类不能被其他类继承

属性:final属性和final变量的值设定后不能更改

方法:final方法不能被子类重写

常量的声明

普通常量

public static final int X = 5;

数组常量

public static final int[] A = {1,2,3};

数组本身不能更改

但是数组中的元素可以重新赋值

单例模式

异常的分类

错误:硬件问题    硬件损坏,网络掉线...

异常:程序逻辑问题  Exception

运行时异常:编译不显示错误,执行时才会发生    RuntimeException

检查性异常:强制在编译时处理异常

异常的处理

throw  在某行人为抛出一个异常对象

throw new Exception();

throws

方法上表示该方法抛出哪些异常需要被使用者处理

public void haha() throws ParseException, IOException{

    throw new ParseException();  //检查性异常

    throw new IOException();  //检查性异常

}

//强制处理

try{

haha();

}catch(ParseException p){

}catch(IOException e){

}

try...catch...finally

try...catch...finally...

try...catch...

try...catch...catch...  顺序  小catch在大catch

try...finally...

main(){

try{

haha();

sysout("1")

}catch(Exception e){

sysout("2")

}finally{

sysout("3")

}

sysout("4");

}

public void haha(){

int x = 5/3;

}

结果:134

main(){

try{

haha();

sysout("1")

}catch(Exception e){

sysout("2")

}finally{

sysout("3")

}

sysout("4");

}

public void haha(){

int x = 5/0;

}

结果: 234

20180108 练习-下午.txt  没有三角形

有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

分子:斐波拉切数列

分母:前一个数的分子


1.Object类: 类的默认父类

equals()方法

            Object的equals方法相等于==            ==比较的是两个对象的内存地址

    String的equals方法重写了Object的equals方法  比较的是内容

String str1 = "abc";

String str2 = "abc";

str1 == str2 ?  true

str1.equals(str2) ?  true

String str3 = new String("abc");

str1 == str3 ? false

toString()方法

2.字符串类

字符串常量  String      final类:不能被其他类继承

字符串变量

    StringBuffer    线程安全

    StringBuilder  线程不安全

它们三者的区别

3.日期类

java.util.Date

java.sql.Date

Calendar

三者是如何创建并实例化的

创建当前时间的Date

创建特定时间的Date

java.util.Date -> java.sql.Date

字符串与日期之间的类型转换

SimpleDateFormat类    yyyy-MM-dd HH:mm:ss

4.Math类

四舍五入操作round(),小数截取操作ceil(),floor()等等

生成随机数  Math.random()  [0,1)随机浮点数

Random类的用法

5.包装类

包装类的作用:某些场合不能使用基本数据类型,使用包装类代替基本数据类型

8个基本数据类型包装类  byte-Byte

int-Integer    char-Character

场合:泛型

字符串与基本数据类型的转换

int i = Integer.parseInt("35");

double d = Double.parseDouble("3.14");

String s = 35+"";

6.集合

集合的分类

线性集合  Collection接口  ---  List接口

---  ArrayList类

---  LinkedList类

---  Vector类

    ---  Set接口

--- HashSet类

--- TreeSet类

键值集合  Map接口

-- HashMap类

-- HashTable类

-- TreeMap类

(1)集合的分类有哪些?(常见)

线性集合和键值集合

线性集合有氛围List和Set

(2)线性集合和键值集合的区别?(常见)

从集合的存储结构来说明

(3)List与Set的区别?(常见)

List:有序(序号)可重复

Set:无序不重复

(4)List与Map的区别?(少见)

参照(2)回答,加上List自身的特点

(5)ArrayList与LinkedList的区别?(重要)

本质:数组与链表的区别

(6)ArrayList与Vector的区别?(少见)

ArrayList是线程不安全

Vector是线程安全

(7)HashMap与HashTable的区别?(少见)

HashMap是线程不安全

HashTable是线程安全

Iterator迭代器

迭代器在内存中的运作方式:List和Set都可以通过迭代器进行迭代访问

next()方法

集合的初始化长度

集合没有装满时,就会扩容(集合的底层实现,永远是没有装满的)

集合的具体应用

掌握集合的各个API方法

7.文件与流

包  java.io包

文件类: File类  文件自身的属性,不操作内容

getName(); 得到文件名  字符串截取的方式可以得到文件的扩展名

getPath(); 得到文件的完整路径

文件夹

exists();  判断路径是否存在

mkdirs();  创建目录

delete();  删除目录

文件

exists();  判断文件是否存在

createNewFile();  创建文件

delete();  删除文件

流类:

流向:输入 输出  针对的是内存

单位:字节 字符  文本文档操作内容--字符流    其余都是字节流

功能:原始 处理  处理流中修饰的是原始流

具体的API应用

序列化  特殊的处理流  ObjectInputStream和ObjectOutputStream

将对象序列化至其他介质中实现java.io.Serializable接口

系统中的类大部分都实现了序列化接口:String,包装类,日期类,集合类....

transient关键字:修饰属性,表示该属性不参与序列化过程

8.多线程

Java中线程的实现方式?

继承java.lang.Thread类,并重写它的run方法

实现java.lang.Runnable接口  并实现它的run方法

Java中的线程启动方式?

继承java.lang.Thread类

xxx.start();

实现java.lang.Runnable接口

Thread t = new Thread(xxx);

t.start();

线程的生命周期

参照图片理解

----------------------------------------

sleep与wait的区别

sleep是线程休眠:不会释放CPU的占用权,占用着CPU睡觉

wait是线程等待: 会释放CPU的占用权

9.Socket套接字

理解套接字就是用于连接两台计算机的端口

ServerSocket

Socket

的主要API

10.JDBC

JDBC的步骤

加载驱动

数据库基本信息:连接字符串,用户名和密码

获取数据库连接

创建SQL语句

创建预加载Statement加载SQL

绑定变量

执行SQL

查询:得到结果集并遍历

DML:得到影响了数据库中的行数

关闭连接

Statement与PreparedStatement的区别

Statement加载SQL不安全,执行效率略低

PreparedStatement是预加载的程序,使用?进行参数绑定避免了SQL注入,在数据库服务器提升执行效率

JDBC的主要API

你可能感兴趣的:(java复习)