jdk jre jvm的关系、标识符命名规则、单元测试、变量和常量、运算符、流程控制语句、面向对象、异常处理、集合、IO流、多线程、设计模式、反射

1、Java分类

1.JavaSe(j2se)  java的核心基础  重点在于java的语法和规范问题
2.JavaEe(j2ee)  java企业级开发  可以完成一定的项目开发
3.JavaMe(j2me)  java嵌入式开发
java从1.2开始,分为了三个分支

2、java语言的特点

1.简单性  
2.跨平台性:跨操作系统
3.面向对象:封装  继承  多态  (抽象)
4.多线程
5.安全性、鲁棒性
6.分布式
7.自动垃圾回收
8.安全性 
Java是一门编译+解释型的语言

3、问题:jdk jre jvm的关系

Jdk:java development kit  java开发工具集
Jre:  java runtime environment  java运行环境
Jvm:  java vitual machine  java虚拟机

Jdk包含了jre+开发工具
Jre包括jvm+基本类库

在这里插入图片描述

4、标识符命名规则

可以使用字母、数字、下划线、美元符,数字不能开头,
也不能包含除这些之外的其他符号,起名字要做到见名知意
1.属性和方法
  (1)驼峰命名法:首字母小写,第二个单词开始,首字母大写
2.类
  (1)首字母大写,每个单词的首字母大写
3.常量
  (1)全部大写
4.包名
全部小写
注释:3种  单行//  多行/**/  文档/***/

5、单元测试

通过注解测试某个单元模块的功能
隶属于junit包
@Test测试单元模块  @Before在Test前面执行的代码  @After在Test之后执行的代码

6、变量和常量

变量是一种容器,用来存储一个值
变量指的是程序运行过程中可以改变的量,常量是程序运行过程中不可改变的量
数据类型:
1.基本数据类型
	(1)整形  byte字节型 short短整形 int整型 long长整型
	(2)浮点型  float单精度浮点型  double双精度浮点型
	(3)字符型  char   0-65535  char遇到+的时候,通常都是使用对应数字计算
	(4)布尔型  boolean
2.引用数据类型
	(1)字符串
	(2)类
	(3)数组
	(4)枚举
	(5).........

7、运算符

算术运算符  略
赋值运算符  = += -=...
逻辑运算符  &&  ||  !  逻辑运算符中存在短路现象
位运算符    
&与  11为1  10为0  01为0  00为0 
|或   11为1  10为1  01为1  00为0
^异或  11为0  10为1  01为1  00为0
>>  右移  m>>n  m/2的n次幂    
<<  左移  m<<n  m*2的n次幂
>>>  无符号位右移
~取反  去相反数-1
三元运算符  三目运算符  条件运算符  boolean?值1:值2

8、流程控制语句

1.条件分支语句
	(1)If...else
	(2)Switch...case
			①Byte short int char String 枚举Enum
			②case后面的值必须是常量
			③Break
2.循环语句
	(1)Do...while(循环条件);
	(2)While(循环条件);
	(3)For(初始化;循环条件;迭代语句);
			问题:while和dowhile的区别
			答案:dowhile循环至少会执行一次,while需要先判断再执行  

面向对象

1.方法:

	(1)有返回值  从方法的定义处,传递值到调用的位置
	(2)无返回值
	(3)有参  use...a   从方法调用处,传递值到定义的位置
	(4)无参
	(5)Return:
			a.将值从方法中,返回到调用处
			b.终止方法
	(6)值传递
		①8个基本数据类型+8个包装类+String
			在值传递的过程中,只将对应的值进行传递,并没有传递变量本身
		② 引用数据类型
			在值传递的过程中,传递的是堆内存中实际的对象
	(7) 可变参数
		①数据类型...参数名  同类型的参数数量可以动态变化,参数类型实际就是数组
		②如果使用可变参数,需要将可变参数放到参数的最后一个位置

2.数组

	(1)定义数组的三种方式
			①只有长度没有元素
			②已知元素,使用new创建
			③已知元素,不适用new创建
	(2)注意:声明数组的时候不能定义长度,创建数组的时候必须要定义长度,元素的数量即为长度,数组的最小长度是0
	(3)数组可以存储任意类型,包括数组
	(4)下标:又叫索引,从0开始,最大值是length-1
	(5)冒泡排序:相邻元素作比较,如果符合条件则交换
	(6)数组的复制:
			①Arrays.copyOf
			②System.arraycopy

3.三大特征:封装 继承 多态

4.类和对象的关系:

	(1)类是对象的抽象表现,对象是类的具体实现
	(2)类是具有相同属性和行为的一组对象的集合
	(3)对象:万物皆对象
	(4)修饰类的关键字:public和(default)
	(5)属性:又叫成员变量、全局变量、实例变量,定义在类中,方法外,调用的时候使用对象进行调用
	(6)行为:方法,见面向对象1
	(7)问:成员变量和局部变量的区别
			①答:
					1)默认值:成员变量有,局部变量没有
					2)定义位置:成员变量在类中方法外,局部变量在方法内
					3)存储位置:成员变量存在堆内存的对象中,局部变量存在栈内存的方法中
					4)生命周期:成员变量随着对象的创建而产生,随着对象的消亡而消亡;局部变量随着方法的执行而产生,随着方法的结束而消亡
					5)作用域:成员变量作用于整个类,局部变量作用于所在的方法中
	(8)构造方法
			①又叫构造器,构造方法可以重载
			②使用new关键字进行调用,目的是帮助我们创建对应类的对象
			③构造器的名字必须和类名一致,但不代表其他的方法不能和类名一致
			④构造器没有返回值,并且也不需要写void
			⑤默认构造器的访问权限和当前类一样
			⑥如果一个类中没有手写构造器,那么系统会提供一个默认的无参构造
			⑦如果手写了构造器,那么系统提供的默认无参就失效了
			⑧不能使用static/final/abstract关键字
			⑨This关键字:
					1)区分当前类的同名的成员变量和局部变量,
					以及引用当前类的成员
					2)指代调用当前方法的对象,
					例如:compareTo方法
					3)调用当前类其他的构造器,
					并且必须放在有效代码的第一行
	(9)封装:
			①将对象的一些特征,隐藏起来,不被其他类随意访问(将属性private私有化)
			②对外提供公共的访问器(get/set)进行属性的访问
	(10)包
			①通常来说,会有四层包
			②第一层:公司门户网站的后缀
			③第二层:公司的名字
			④第三层:项目名称
			⑤第四层:模块名称
			⑥命名:全部小写
			⑦关键字:package  放在有效代码的第一行
			⑧导包:import  导包实际导的是类
	(11)访问权限:
			①Private  本类  修饰属性和方法
			②(Default) 本包  修饰类  属性  方法
			③Protected  本包和其他包子类  修饰属性和方法
			④Public 本项目  修饰类  属性  方法
	(12)继承:
			①子类可以自动共享父类的非私有属性和方法,是一种is...a关系
			②关键字:extends
			③java的类只能支持单继承,一个类最多只有一个父类
			④构造方法不能继承,但是可以调用,使用super()
			⑤super用法
				1)调用父类构造方法,必须放在有效代码第一行,在构造器中不能和this调用的构造器同时出现
				2)调用父类的成员
			⑥
			⑦子类的所有构造器会默认调用父类的默认构造,如果父类中手写了构造器,所以子类的所有构造器,都要手动调用父类手写的构造器
			⑧方法的覆盖、重写、覆写
					1)关键字Override
					2)子类中存在与父类成员方法 同名  同返回值  同参  访问权限不能低于父类方法
					3)父类的方法如果抛出异常,子类重写的方法可以不抛出异常,可以抛出相同异常,可以抛出比父类小的异常,不能抛出比父类更大的异常
			⑨重载和覆盖的区别
					1)重载:发生在同一作用域,方法名相同,参数列表不同(顺序、数量、类型),与返回值无关
					2)重写:发生在继承关系中,方法名相同,参数列表相同,返回值相同,访问权限不能低于父类
	(13)多态
			①概念:同一指令发送给不同类型的对象,根据对象的不同,产生不同的行为
			②代码体现:父类声明,子类创建
			③多态对象只能访问父类存在的成员,无法直接访问子类的特有成员,如果想要访问子类特有的成员,需要向下转型
			④子类转换为父类的过程,称为向上转型,隐式转换;父类转换为子类的过程,称为向下转型,显示转换
			⑤多态分为两个时期,编译期和运行期,编译期只会看父类成员的声明,如果有则编译通过,没有则编译失败
					1)访问同名变量:编译期看父类,运行期看父类
					2)访问同名方法:编译期看父类,运行期看子类
			⑥Java中多态的体现:重载  重写  多态参数
			⑦多态参数:形参定义的是父类或者父接口,实参传递的是子类或者子实现类
			⑧Instanceof:比较某个对象在运行期是否属于某种类型
	(14)抽象
			①抽象的类,不能直接实例化,需要子类进行实例化
			②为什么抽象类不能直接实例化:
					1)因为抽象类中极有可能存在抽象方法,抽象方法没有方法体,创建对象之后调用无意义
			③关键字:abstract  可以修饰类和方法
			④抽象方法和抽象类的关系
					1)抽象类不一定有抽象方法
					2)抽象方法一定在抽象类中
			⑤抽象方法只有声明,没有实现(方法体)
			⑥抽象类有构造方法
			⑦abstract不能和哪些关键字连用?
					1)Final:final修饰的类,不能继承
					2)Private:私有化无法继承和访问
					3)Static:静态属于类,使用类名即可调用,但是抽象方法没有方法体,调用无意义
			⑧抽象类和普通类的异同
					1)相同点:都是用来描述事物的,都可以有成员
					2)不同点
							a.普通类描述的事物比较具体,抽象类描述的事物不够具体
							b.抽象类可以有抽象方法,普通类不可以有抽象方法
							c.抽象类不能直接实例化,普通类可以直接实例化
	(15)接口
			①Java为了克服单继承的问题,提供了接口
			②接口可以多实现  
			③接口关键字interface  实现关键字implements
			④类和接口可以多实现,类和类之间单继承,接口和接口之间可以多继承
			⑤接口中的方法都默认被public abstract修饰的
			⑥接口中的变量都默认被public static final修饰的常量
			⑦接口不能直接实例化,并且没有构造器(跟抽象类的区别之一)
			⑧抽象类和接口的区别
					1)关键字不同
					2)抽象类中有成员变量,接口中只有静态常量
					3)抽象类中可以有抽象方法和普通方法,接口中默认只有抽象方法
					4)抽象类中有构造方法,接口中没有构造方法
					5)抽象类和其他类是单继承关系,接口和其他类是多实现关系
					6)继承抽象类的类称为子类、派生类,实现接口的类称为子实现类
			⑨从jdk1.8之后,java对于接口提供了能够实现功能的方法,静态static方法和默认default方法
			⑩函数式接口:
					1)当一个接口中只存在一个抽象方法,这种接口称为函数式接口
					2)lambda表达式  箭头函数  用于函数式接口
			⑪接口的优点
					1)解决了单继承问题
					2)解耦,降低了耦合度
					3)提高了代码的可维护性和灵活性
	(16)Final和static关键字
			①Final
					1)译为最终
					2)可以修饰类  属性  方法
					3)修饰的类叫最终类,不能被继承
					4)修饰的属性叫常量,必须初始化,而且只能赋值一次
					5)常量的赋值方式:
							a.直接赋值
							b.在构造块中赋值
							c.构造方法中赋值
					6)修饰的方法,不能重写
					7)final修饰的参数,只能使用,不能更改
		②Static
				1)译为静态
				2)可以修饰属性  方法
				3)被static修饰的属性和方法属于类,可以使用类名调用或者对象调用
				4)被static修饰的属性和方法具有共享性,多个对象共享一个静态成员
				5)静态成员调用其他成员的注意点
						a.静态成员调用本类其他静态成员:直接调用
						b.静态成员调用本类其他非静态成员:创建对象调用
						c.非静态成员调用本类其他静态成员:直接调用
				6)静态方法中不能出现this和super关键字,原因是在静态方法加载的时候还没有对象出现,this和super均代表对象的一个引用,所以还没出现
				7)静态块、构造块、局部块
						a.静态块:static{} 可以存在多个静态块,每个静态块只执行一次,静态块的作用初始化静态成员
						b.构造块:{}  定义在类中,创建对象,调用构造方法之前执行,构造块的作用是初始化普通成员
						局部块:{}  定义在方法中

5、常用类

1.Object
		(1)hashCode and equals
				a.如果equals相同,要求hashCode必须相同
				b.如果hashCode相同,equals不一定相同
		2)toString
				a.返回对象的地址表述,可以重写
		3)getClass
				a.用于反射,将某个类封装成Class类的对象
		4)Wait
				a.线程等待,需要notify唤醒
		5)Notify
				a.唤醒等待的某一条线程
				b.notifyAll唤醒所有正在等待的线程
		6)Finalize
				a.finalize方法是某个对象被回收之前执行的该类中的最后一个方法
2.包装类
		(1)Byte Short Integer Long Character Boolean Float Double
		(2)值传递的时候遵从基本数据类型的传递原则
3.String
		(1)各种方法省略
		(2)不同的创建方式,创建出的对象数量也不同。
		(3)StringBuffer和StringBuilder
				a.字符串缓冲区,用于处理字符串,效率高于String
		(4)String StringBuffer StringBuider的区别
				a.String是一个不可变字符串,处理效率较慢
				b.StringBuffer 可变字符串,长度可变,线程安全,多线程,效率低
				c.StringBuilder 可变字符串,长度可变,线程不安全,单线程,效率高
4.System
		(1)Exit()  退出虚拟机
		(2)Arraycopy()数组复制,5个参数
		(3)currentTimeMillies  获取当前时间毫秒,距离1970年1月1日00时00分00秒
		(4)Gc  手动垃圾回收
5.Math
	    (1)提供了一些列处理数学问题的静态方法
6.Date以及日期处理
		(1)Date日期类  能够获取日期的先后顺序
		(2)Dateformat  日期格式化类  可以按照固定的格式获取日期  0123
		(3)SimpleDateFormat  日期格式化类,可以按照yyyy-MM-dd的形式转化日期
		(4)Calendar 日历  从1.1以后替代了Date当中单独获取日期数据的方法
7.Random
		(1)nextXXX  获取下一个随机数
		(2)伪随机,根据种子数计算下一个随机数
8.枚举
		Enum  类似于一种选择的问题,Enum只能选择已经写入的一些值

6、异常处理

	1.当程序出现异常的时候,会终止运行,解决异常就是为了让程序平稳运行
	2.异常的根类叫做Throwable,下面分为Error错误和Exception异常
	3.错误是在程序运行中不可解决的,异常是运行过程中可以解决的问题
	4.常见的异常
			(1)空指针异常
			(2)数组下标越界异常
			(3)算数异常
			(4)类型转换异常
			(5)数字格式化异常
			(6)解析异常
			(7)IO异常
			(8)文件未找到异常
			(9)类未找到异常
	5.解决异常的两种方式
			(1)Try..catch
					a.try是可能发生异常的代码
					b.Catch捕获某种异常并解决
					c.Finally无论是否捕获异常都会运行的代码
					d.finally会优先于return之前执行,只有System.exit会终止finally的执行
					e.如果出现多个异常需要捕获并解决的时候,需要注意异常从小到大
			(2)Throws  throw
					a.throws定义在方法声明处,向上抛出的是一个异常类
					b.throw定义在方法体中,向上抛出的是一个异常对象
					c.编译期异常必须要抛出并解决,运行期异常可以不抛出,抛出后也可以不解决
					d.向上抛出的异常,最多只能抛到main方法中就得解决
	6.自定义异常
			(1)继承Exception的自定义异常是编译期异常
			(2)继承RuntimeException的自定义异常是运行期异常
	7.Final  finally finalize的区别
			(1)final是一个修饰符,被修饰的属性叫常量,赋值一次,不可改变;修饰的方法不能被重写;修饰的类不能继承
			(2)Finally 是异常中的关键字,无论是否捕获异常都会执行的代码
			(3)Finalize 垃圾回收之前执行的最后一个方法

7、集合

	1.泛型  
			(1)泛型,类似于一种约束,泛型只是声明一种不确定的类型,例如ETKV...
			(2)<泛型类型>
			(3)泛型可以添加到类声明处,也可以添加到方法声明处
	2.集合
			(1)分为单列集合和双列集合
			(2)单列集合Collection,下设两个子接口,List和Set
			(3)List集合有序,可为null,可重复
					①ArrayList  底层结构是数组,有序,可为null,可重复,查询快,不同步
					②LinkedList  底层结构是链表,有序,可为null,可重复,增删快,不同步
					③Vector  底层结构是数组,同步,增删和查询都慢
			(4)Set集合无序,不重复
					①HashSet  底层结构是哈希表,无序,不重复,可为null
					②TreeSet  底层结构是二叉树,无序,不重复,不可为null,可以实现自然排序
							1)自然排序方式一:实现Comparable接口,重写compareTo
							2)自然排序方式二:新建比较器,实现Comparator接口,重写compare方法
					③LinkedHashSet  底层是链表+哈希表,有序,其他参照HashSet
			(5) Map集合 键值对存储
					①HashMap  底层是哈希表,无序,键不能重复,允许null值null键
					②TreeMap  底层是红黑树,无序,键可自然排序,不允许null键
					③HashTable  底层是哈希表,无序,键不能重复,不允许null值null键,同步
					④LinkedHashMap 底层是链表+哈希表,有序,其他的参照HashMap
			(6)Length  length()  size()的区别
					①Length属性,属于数组;length()是方法,属于String;size()属于集合
			(7) Collections
					①集合的工具类,提供了很多的方法操作集合
			(8) Array和Arrays,Collection和Collections的区别
					①Array是数组,定长,可以存储任意类型
					②Arrays是数组的工具类,提供了很多方法,例如sort copyof等方法
					③Collection是单列集合接口,包括了List和Set集合(看分值,是否展开说明)
					④Collections是集合的工具类

8、IO流

	1.File类,本身是一个非流,提供了一系列方法能够操作文件,但是无法对文件中的内容进行操作
			(1)mkdir和mkdirs的区别:mkdir创建的文件夹,如果路径中的父目录不存在,则创建失败;mkdirs创建的文件夹,如果路径中的父目录不存在,则连同父目录一起创建
	2.根据流向将io流分为
			(1)输入流  read  从硬盘向内存
			(2)输出流  write  从内存向硬盘
	3.根据流量将io流分为
			(1)字节流  
			(2)字符流
	4.节点流的分类
			(1)字节输入流  InputStream
			(2)字节输出流  OutputStream
			(3)字符输入流  Reader
			(4)字符输出流  Writer
	5.处理流:处理节点流使用的类,效率要高于节点流
	6.处理流的分类
			(1)字节输入处理流  BufferedInputStream
			(2)字节输出处理流  BufferedOutputStream
			(3)字符输入处理流  BufferedReader  多出了一个readLine方法,如果全读完了返回null
			(4)字符输出处理流  BufferedWriter  多出了一个newLine换行,需要通过flush方法进行刷入
	7.转换流
			(1)InputStreamReader  字节输入流转成字符输入流
			(2)OutputStreamWriter 字节输出流转成字符输出流
			(3)转换流可以更高效的转换文档文件
	8.序列化
			(1)序列化是将一个对象写入到硬盘中,进行持久化的保存
			(2)Serializable  序列化接口  一个对象想要写入到硬盘中,必须要实现该接口
			(3)序列化提供了一个UID,反序列化的时候,通过读取该uid将对象读取到内存中

9、多线程

	1.什么是进程,什么是线程
			(1)进程是正在进行的程序,一个进程由多个线程组成,一个线程只能属于一个进程
			(2)多线程,同一时间由多条线程同时执行
			(3)创建线程的方式
					①实现Runnable,重写run方法
					②继承Thread,重写run方法
					③实现Callable,启用线程池
			(4)线程的生命周期
					①新建状态  new
					②就绪状态  start
					③运行状态  时间片
					④阻塞状态  sleep  wait...
					⑤销毁状态  线程结束
			(5) 线程同步
					①关键字synchronized
					②同步:在多条线程访问同一共享资源时,某一条线程放的时候,其他线程不可访问
					③用法
							1)同步块  建议
							2)同步方法
					④死锁
							1)当一条线程访问共享资源,而其他线程想要访问这个资源的时候,如果当前线程不释放同步,那么就无法获取该共享资源

10、设计模式

	23种设计模式
	1.单例模式
		(1)饿汉式和懒汉式
		(2)饿汉式:直接创建对象直接使用
		(3)懒汉式:当调用对应的get方法时,会判断当前对象是否存在
	2.工厂模式
		(1)简单工厂:一次生产一个
		(2)抽象工厂:一次生产一批

11、反射

通过反编译技术,将字节码文件,反编译成源文件,然后执行
将一些类,变为Class类的对象,使用getClass/.class/Class.forName进行获取
Field属性类  Method方法类  Constructor构造器类
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值