Java基础总结

常用DOS命令

d: 回车    盘符切换

dir(directory):列出当前目录下的文件以及文件夹

md (make directory) : 创建目录 r

d (remove directory): 删除目录

cd (change directory)改变指定目录(进入指定目录)

cd.. : 退回到上一级目录

cd\: 退回到根目录

del (delete): 删除文件,删除一堆后缀名一样的文件*.txt

exit : 退出dos命令行

cls : (clear screen)清屏

一、Java基础

1.基本数据类型

类型名称

关键字

位数

取值范围

举例说明

整数

字节型

byte

8

-128-127

byte b = 10;

短整型

short

16

-2^15 - 2^15-1

short s = 10;

整型

int

32

-2^31 - 2^31-1

int i = 10;

长整型

long

64

-2^63 - 2^63-1

long l = 10l;

浮点数

单精度

float

32

1bit(符号位) 8bits(指数位) 

23bits(尾数位)

float f = 10.0f;

双精度

double

64

1bit(符号位) 11bits(指数位)

 52bits(尾数位)

double d = 10.0d;

布尔型

boolean

8

true/false

boolean b = true;

字符型

char

16

char c = 'c';

2. 赋值运算符

操作符

描述

例子

=

简单的赋值运算符,将右操作数的值赋给左侧操作数

C = A + B将把A + B得到的值赋给C

+ =

加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数

C + = A等价于C = C + A

- =

减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数

C - = A等价于C = C - A

* =

乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数

C * = A等价于C = C * A

/ =

除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数

C / = A,C 与 A 同类型时等价于 C = C / A

(%)=

取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数

C%= A等价于C = C%A

<< =

左移位赋值运算符

C << = 2等价于C = C << 2

>> =

右移位赋值运算符

C >> = 2等价于C = C >> 2

&=

按位与赋值运算符

C&= 2等价于C = C&2

^ =

按位异或赋值操作符

C ^ = 2等价于C = C ^ 2

| =

按位或赋值操作符

C | = 2等价于C = C | 2

3. 算数运算符

操作符

描述

例子

+

加法 - 相加运算符两侧的值

A + B 等于 30

-

减法 - 左操作数减去右操作数

A – B 等于 -10

*

乘法 - 相乘操作符两侧的值

A * B等于200

/

除法 - 左操作数除以右操作数

B / A等于2

取余 - 左操作数除以右操作数的余数

B%A等于0

++

自增: 操作数的值增加1

B++ 或 ++B 等于 21

(区别)

--

自减: 操作数的值减少1

B-- 或 --B 等于 19

(区别)

 4.关系运算符

运算符

描述

例子

==

检查如果两个操作数的值是否相等,如果相等则条件为真。

(A == B)为假。

!=

检查如果两个操作数的值是否相等,如果值不相等则条件为真。

(A != B) 为真。

检查左操作数的值是否大于右操作数的值,如果是那么条件为真。

(A> B)为假。

检查左操作数的值是否小于右操作数的值,如果是那么条件为真。

(A <B)为真。

>=

检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。

(A> = B)为假。

<=

检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。

(A <= B)为真。

5.逻辑运算符 

运算符

表达式

说   明 

&&

条件1 && 条件2

仅仅两个条件同时为真,结果为真

||

条件1 || 条件2

只要两个条件有一个为真,结果为真

!

! 条件

条件为真时,结果为假

条件为假时,结果为真

 6.位运算符

操作符

描述

例子

如果相对应位都是1,则结果为1,否则为0

(A&B),得到12,即0000 1100

|

如果相对应位都是 0,则结果为 0,否则为 1

(A | B)得到61,即 0011 1101

^

如果相对应位值相同,则结果为0,否则为1

(A ^ B)得到49,即 0011 0001

按位取反运算符翻转操作数的每一位,即0变成1,1变成0。

(〜A)得到-61,即1100 0011

<< 

按位左移运算符。左操作数按位左移右操作数指定的位数。

A << 2得到240,即 1111 0000

>> 

按位右移运算符。左操作数按位右移右操作数指定的位数。

A >> 2得到15即 1111

>>> 

按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。

A>>>2得到15即0000 1111

7.数组 

分明数组并分配空间

数据类型[ ]  数组名   =   new   数据类型[大小]  ;    

 二维数组

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

int arr1[][];

int[] arr2[];

int[] x,y[];

int[][] arr3 = new int[3][];

int[][] arr4=  {{1,2,3},{4,6},{6}};

 8.对象

(1)对象的特征

1.属性——对象具有的各种特征

2.方法——对象执行的操作

对象的属性和方法通常被封装在一起,共同体现事物的特性

类:具有相同属性和方法的一组对象的集合

(2)创建和使用对象

创建对象

类名 对象名 = new 类名();

引用对象成员

引用类的属性:对象名.属性 引用类的方法:对象名.方法名()

9.面向对象的优点 

与人类的思维习惯一致

把人类解决问题的思维过程转变为程序能够理解的过程

信息隐藏,提高了程序的可维护性和安全性

封装实现了模块化和信息隐藏

封装使得在对象外部不能随意访问对象的属性和方法

提高了程序的可重用性

一个类可以创建多个对象实例,增加了重用性

10.String类的判断功能 

boolean equals(Object obj)

boolean equalsIgnoreCase(String str)

boolean contains(String str)

boolean startsWith(String str)

boolean endsWith(String str)

boolean isEmpty()

int length() char

charAt(int index)

int indexOf(int ch)

int indexOf(String str)

int indexOf(int ch,int fromIndex)

int indexOf(String str,int fromIndex)

String substring(int start)

String substring(int start,int end)

byte[] getBytes()

char[] toCharArray()

static String valueOf(char[] chs)

static String valueOf(int i)

String toLowerCase()

String toUpperCase()

String concat(String str) 

替换功能

String replace(char old,char new)

String replace(String old,String new)

去除字符串两端空格    

String trim()

按字典顺序比较两个字符串  

int compareTo(String str)

int compareToIgnoreCase(String str)

字符串拆分

 split() 

StringBuffer类

StringBuffer sb = new StringBuffer(); 

 转换成String类型:toString()

连接字符串:append()

插入字符串:insert()

 11.冒泡排序

 12.选择排序,插入排序

 二、JavaOOP

1.static静态常量

static可以用来修饰属性、方法和代码块

static修饰的属性和方法称为类属性(类变量)、类方法

不使用static修饰的属性和方法,属于单个对象,通常称为实例属性(实例变量)、实例方法

static修饰的变量和方法可以通过类名和对象名访问,而不用static修饰的变量和方法只能通过对象名访问

final可以用来修饰属性、方法和类

用final修饰的变量称为常量,其值固定不变

 static修饰与非static修饰的区别

static、非private修饰

 非static、private修饰

属性

类属性、类变量

实例属性、实例变量

方法

类方法

实例方法

调用方式

类名.属性

类名.方法()

对象.属性

对象.方法()

对象.属性

对象.方法()

归属

单个对象

 2.子类访问父类成员

(1)访问父类构造方法

super();    

super(name);

访问父类属性

super.name;

访问父类方法

super.print();

(2)不能被继承的父类成员

1.private成员

2.子类与父类不在同包, 使用默认访问权限的成员

3.构造方法

3.访问修饰符总结

 访问修饰符

本类

同包

子类           

其他

private

默认(friendly)

protected

public

4. 重继承关系的初始化顺序

父类属性>父类构造方法>子类属性>子类构造方法

5.方法重写

 (1)构造方法不可以被重写

 (2)方法重写的规则

  方法名相同

  参数列表相同

  返回值类型相同或者是其子类

  访问权限不能严于父类方法

6.重载与方法重写

位置

方法名

参数表

返回值

访问修饰符

方法重写

子类

相同

相同

相同或是其子类

不能比父类更严格

方法重载

同类

相同

不相同

无关

无关

7.多态 

实现多态的三个要素 

编写具有继承关系的父类和子类

子类重写父类方法

运行时,使用父类的引用指向子类的对象 

多态存在的三个必要条件:

1.继承 2.重写 3.父类引用指向子类对象 

编译时(compile time)和运行时(run time)多态 

对于面向对象而言,多态分为编译时(compile time)多态和运行时(run time)多态。

编译时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的函数,包括参数列表的顺序和参数类型,不能通过返回值来区分重载方法,它们通过编辑之后会变成两个不同的函数,在运行时谈不上多态。

运行时多态是动态的,它是通过动态绑定(binding)来实现的,也就是我们所说的多态性。 

方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现 

8.接口 

接口不可以被实例化

实现类必须实现接口的所有方法

实现类可以实现多个接口

接口中的变量都是静态常量 

9.异常

 try:执行可能产生 异常的代码

catch:捕获异常

finally:无论是否发生异常, 代码总能执行

throw:声明方法可能要 抛出的各种异常

throws:手动抛出异常

 常见的异常类型 

异 常 类 型

说    明

Exception 

异常层次结构的父类

ArithmeticException

算术错误情形,如以零作除数

ArrayIndexOutOfBoundsException

数组下标越界

NullPointerException

尝试访问 null 对象成员

ClassNotFoundException

不能加载所需的类

IllegalArgumentException

方法接收到非法参数

ClassCastException

对象强制类型转换出错

NumberFormatException

数字格式转换异常,如把"abc"转换成数字

10.开源日志记录工具log4j

log4j是一个非常优秀的开源日志记录工具

控制日志的输出级别

控制日志信息输送的目的地是控制台、文件等 控制每一条日志的输出格式

使用log4j记录日志的步骤 

在项目中加入log4j的JAR文件

创建log4j.properties文件

配置日志信息

使用log4j记录日志信息

11.Java集合框架

1.Collection 接口存储一组不唯一,无序的对象

2.List 接口存储一组不唯一,有序(插入顺序)的对象

3.Set 接口存储一组唯一,无序的对象

4.Map接口存储一组键值对象,提供key到value的映射 

5.ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高

6.LinkedList采用链表存储方式。插入、删除元素时效率比较高 

List接口常用方法 

方法名

说    明

boolean add(Object o)

在列表的末尾顺序添加元素,起始索引位置从0开始

void add(int index,Object o)

在指定的索引位置添加元素。

索引位置必须介于0和列表中元素个数之间

int size()

返回列表中的元素个数

Object get(int index)

返回指定索引位置处的元素。取出的元素是Object类型,

使用前需要进行强制类型转换

boolean contains(Object o)

判断列表中是否存在指定元素

boolean remove(Object o)

从列表中删除元素

Object remove(int index)

从列表中删除指定位置元素,起始索引位置从0开始

LinkedList的特殊方法 

void addFirst(Object o)

在列表的首部添加元素

void addLast(Object o)

在列表的末尾添加元素

Object getFirst()

返回列表中的第一个元素

Object getLast()

返回列表中的最后一个元素

Object removeFirst()

删除并返回列表中的第一个元素

Object removeLast()

删除并返回列表中的最后一个元素

 Map接口常用方法

方法名

说    明

Object put(Object key, Object val)

以“键-值对”的方式进行存储

Object get (Object key)

根据键返回相关联的值,如果不存在指定的键,返回null

Object remove (Object key)

删除由指定的键映射的“键-值对”

int size()

返回元素个数

Set keySet ()

返回键的集合

Collection values ()

返回值的集合

boolean containsKey (Object key)

如果存在由指定的键映射的“键-值对”,返回true

12.多线程 

多线程概述

进程:正在运行一个应用程序

正在运行的程序,是系统进行资源分配和调用的独立单位。

每一个进程都有它自己的内存空间和系统资源。

线程: 是进程中的单个顺序控制流,是一条执行路径

一个进程如果只有一条执行路径,则称为单线程程序。

一个进程如果有多条执行路径,则称为多线程程序。

什么是多线程

如果在一个进程中同时运行了多个线程,用来完成不同的工作,则称之为“多线程”

多个线程交替占用CPU资源,而非真正的并行执行 

线程的生命周期图 

 线程的状态转换图

13.File、IO流

1.File 

Java API :java.io.File 类

File类的概述:文件和目录路径名的抽象表示形式

 文件名称过滤器FilenameFilter应用示例

File dataDirectory = new File("D:"+File.separator+"test");
File[] dataFiles = dataDirectory.listFiles(new FilenameFilter() {
    @Override
    public boolean accept(File dir, String name) {
        String fileName = name.toLowerCase();
       if (fileName.endsWith(".png")) {
            return true;        
}
        return false;
    }
});
for (File file:dataFiles) {
    System.out.println(file.getName());
}

 2.IO流

流(stream)可以理解为一组有顺序的、有起点和终点的动态数据集合。

 

 输入输出流是相对于计算机内存来说的

Java流的分类 

 字节流是 8 位通用字节流,字符流是 16 位 Unicode 字符流

 

 常见编码表

ASCII/Unicode 字符集

ISO-8859-1

GB2312/GBK/GB18030

BIG5

UTF-8

装饰者模式(DecoratorPattern) 

是指在不改变原对象的基础之上,将功能附加到对象上,提供了比继承更灵活性的替代方案(扩展原有对象的功能),装饰者模式属于结构型模式。 

 优点: 装饰者比继承灵活,可以在不改变原有对象的情况下动态地给一个对象扩展功能,即插即用非常方便 通过不同的装饰器组合,可是实现不同效果 装饰者完全遵守开闭原则。

缺点: 会增加程序复杂性,会增加更多的类 动态装饰时,操作多层装饰复杂

 

 14.网络编程

 实现网络互连的不同计算机上运行的程序间可以进行数据交换。

 端口号:有效端口:0~65535,其中0~1024系统使用或保留端口。

UDP         将数据源和目的封装成数据包中,不需要建立连接;每个数据报的大小在限制在64k;因无连接,是不可靠协议;不需要建立连接,速度快

TCP         建立连接,形成传输数据的通道;在连接中进行大数据量传输;通过三次握手完成连接,是可靠协议;必须建立连接,效率会稍低 

Socket机制图解 

15.类加载器和反射 

 继承加载顺序

 类的加载过程

 Bootstrap ClassLoader 根类加载器

也被称为引导类加载器,负责Java核心类的加载,是用原生代码来实现的 比如System,String等。在JDK中JRE的lib目录下rt.jar文件中

Extension ClassLoader 扩展类加载器

负责JRE的扩展目录中jar包的加载。 在JDK中JRE的lib目录下ext目录

Sysetm ClassLoader 系统(应用)类加载器

负责在JVM启动时加载来自java命令的class文件,以及classpath环境变量所指定的jar包和类路径

反射 

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。通俗点讲,通过反射,该类对我们来说是完全透明的,想要获取任何东西都可以。 要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象. 

通过反射获取构造方法并使用 

获取构造方法 getConstructors:获取所有的公有的构造方法

getDeclaredConstructors:获取所有的构造方法

Constructor con = getConstructor:获取某个公有的构造方法

getDeclaredConstructor:获取任意一个构造方法

创建对象 newInstance():

创建对象 Object obj = con.newInstance(“zhangsan", 20); 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值