Java
2020-12-21 11:54:07 16 举报
AI智能生成
java基础总结
作者其他创作
大纲/内容
1.Java简介
环境安装
JDK
配置环境变量
IDE
Eclipse
集成开发环境
Integrated Development Environment
是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、
调试器和图形用户界面等工具。集成了代码编写功能、分析功能、编译
功能、调试功能等一体化的开发软件服务套
调试器和图形用户界面等工具。集成了代码编写功能、分析功能、编译
功能、调试功能等一体化的开发软件服务套
API
应用程序接口
Application Programming Interface
是一些预先定义的函数,或指软件系统不同组成部分衔接的约定。
计算机发展史
第一代语言
机械语言
二进制代码
第二代语言
汇编语言
第三代语言
高级语言
面向过程
C语言,面向对象的鼻祖
面向对象
包含面向过程
C++,C#,PHP,Python,Java
计算机之父
冯诺依曼
计算科学之父
图灵
Java 语言的核心优势
跨平台
在任何操作系统上都可以运行
Windows
Mac
Linux
Unix
。。。
Java体系结构
JavaSE
Java Standard Edition
Java标准开发
JavaEE
Java Enterprise Edition
Java企业级开发
JavaMe
Java Micro Edition
Java微端开发
JDK
JRE
JVM
变量
变量的声明
见名知意
不能重复在同一作用域中生命
声明变量最后要初始化,否则不能使用,可以直接使用变量
禁止间转换
Integer.toBinartString(int)
转化成二进制
Integer.toOctalString(int)
转化成八进制
Integer.toHexString(int)
转化成十六进制
Integer.MAX_VALUE
最大取值范围
Integer.MIN_VALUE
最小取值范围
数据类型
八种数据类型
整形
byte
-2^7~2^7-1
8bit
short
-2^15~2^15-1
16bit
int
-2^31~2^31-1
32bit
long
-2^63~2^63-1
64bit
浮点型
float
double
字符型
char
[0,65536]
布尔型
boolean
true
false
引用数据类型
数组
数据类型转换
自动数据类型转换(隐形数据类型转换)
小的数据类型赋值给大的数据类型
强制数据类型转换(显性数据类型转换)
(小)大的数据类型复制给小的数据类型
当出现溢出时,调整前面的数据类型,否则会溢出
用户在控制台输入
Scanner
控制控制台输出
System.out.print()
不换行
System.out.println()
换行
常用工具类
Java
lang
Integer
toHexString()
返回16进制整数参数的字符串
MAX_VALUE
最大值
MIN_VALUE
最小值
toOctString()
返回8进制整数参数的字符串
toBinaryString()
返回2进制整数参数的字符串
parseInt(String)
字符串转为整形
valueOf(String)->Integer
字符串转为Integer
valueOf(int)->Integer
整形转为Integer
toString()->String
Math
floor()
向下取整
ciel()
向上取整
sqrt()
返回一个算数平方跟
random()
返回一个【0,1)的随机数
abs()
绝对值
min(a,b)/max(a,b)
返回最大最小的
Math.sin()
正弦
Math.cos()
余弦
Math.PI
圆周率
Math.toDegrees()
转化为角度
Math.toRadians()
转化为弧度
Math.round()
保留小数
String
charAt(int index) char
根据下表返回对应的index的位置的字符
length() int
获取字符串的长度
isEmoty()
判断字符串是否为空
this。value.length==0
indexOf(int ch)
根据字符串返回第一次出现的下标
lastIndexOf(int ch)
返回该字符串最后一次出现的下标索引
startWith(String)
是否以该字符串开始
endWith(String)
是否以该字符串结束
subString(int)
截取字符串到结尾
subString(int int)
从字符串开始位置截取到结束位置,前包含后不包含
String.valueOf(各种数据类型)
+:如果+左右两边有字符串的话"+"转化为字符串连接符
将该数据类型转化为字符串
replace
(char oldChar char, newChar)
方法通过用 newChar 字符替换字符串中出现的所有 oldChar 字符,并返回替换后的新字符串
(String oldStr,String newStr)
方法通过用 newString 字符串替换字符串中出现的所有 oldString 字符串,并返回替换后的新字符串
equal(String)
判断两个字符串内容(值)是否相等
于(==)进行区分
基本数据类型
比的是两个数据的值
基本数据类型没有地址
引用类型
比较引用对象的地址
equalsIgnoreCase(String)
比较内容并忽略大小写
trim()
去除首尾空格
toLowerCase()
变成小写
toUpperCase()
变成大写
System
arraycopy(src, srcPos, dest, destPos, length)
复制数组的值
src原数组
srcPos从原数组开始进行复制的位置
dest目标数组
destPos从目标数组的那个位置开始粘贴
length拷贝的长度
currentTimeMillis()long
返回从1970到现在的毫秒数
toString
return getClass.setname+ "@"+Integer.toHexString(hashcode())
为什么子类要重写object类中的toString()方法
方便用户直接输出对象得到的不是地址而是直接标识该对象的字符串
util
Scanner
创建资源对象
Scanner sc = new Scanner(System.in)
netLine()
String
返回字符串,不可进行数学运算
nextInt()
int
返回一个整型变量
nextDouble()
double
返回一个双精度浮点数
Arrays
toString([])
输出数组
copyOf(scr, length)
数组的扩展和缩减,底层调用了arraycopy的方法
src
原数组
length
长度
sort(数组)
除了boolean的任何类型数组的排序
Arrays.equals(Object[],Object[])
比较两个数组元素是否相等
Random
随机数
BigDecimal
a.add(b)
加
a.subtract(b)
减
a.mutiply(b)
乘
a.divide(b)
除
Collections
sort(List<T>)
T类型必须实现Comparable接口
shuffle(List<?>)
将容器中的内容乱序
reverse(List<?>)
将容器中的内容逆序
Comparable接口
作用
当自定义对象时,我们要有自己的比较逻辑
功能
进行排序比较
应用场景
排序
分组
思考Comparator和comparable的区别
Date
getTime
同System.concurrentMills()
text
SimpleDateFormat
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
fomat(Date)->String
parse(String)->Date
方法
方法的声明
修饰符+返回值类型+方法名(形参)
放大的调用
方法名(实参)
运算
运算符
算术运算符
+-*/
模运算%
比较运算符
>,<,=,>=,<=,!=
赋值运算符
=
三目运算符
表达式1?表达式2:表达式3
如果表达式1为true执行表达式2
如果表达式1为true执行表达式3
逻辑运算符
&&与
||或
!非
位运算符
&
|
~
面试题
请描述“&&”与“&”的区别
“&&”短路与,只要前面有任何一个bollean结果位false,后面的表达式都不执行
“&”按位与,无论结果如何,后面的表达式都要执行
“&”左右两边可以加入数的运算,为二进制运算,而“&&”不能使用数
“&&”比“&”效率更高,企业中经常使用
在内存中,所有的计算数据,都是以int类型进行运算的,byte,short,long,都是假的,都会转换为int类型进行运算
int的表述范围远远小于double类型,但精度要高于double
移位运算符
左移放大
<<
右移缩小
>>
无符号右移
>>>
运算效率最高的运算符
面向对象
面向对象的概念
OOP
面向对象程序设计
OOD
面向对象分析
OOA
面向对象设计
构造方法
Constructor
使用new关键字来使用
在编程时一定要定义无参的构造方法
方法的重载
同一个方法名
参数列表不同
变量的数目
变量的顺序
变量的数据类型
只有返回值类型不同,不能构成方法的重载
IclipseIDE的使用
Outline
绿色实心圆是
public修饰的方法
绿色空心圆
public修饰的属性
右上角有c标识的
构造方法
右上角有f标识
表示final修饰
右上角有s标识
标识static修饰
三大基本特征
继承extends
子类继承父类,会继承父类中除了构造方法以外的所有属性和行为
当父类的方法或属性用private修饰的时候,定义上可以继承但是无法访问
重写的规则@Override
要有继承,父子类之间
方法名,参数列表完全相同
方法体不同
子类的访问权限不能严格于父类
重写和重载的区别
封装encapsulation
四个访问修饰符
public
类内
包内
子类
任意
protected
类内
包内
子类
default
类内
包内
private
类内
多态polymorphic
赋值多态
Foo foo = new Koo()// Koo是Foo的子类
传参多态·
public void test(Foo foo){}
声明一个大类型,传参时可以传该类型的子类
构成多态的条件
final关键字
final修饰的变量,不能被二次赋值
final修饰的类,不能被子类继承
final修饰的方法,不能被子类重写
static关键字
修饰的属性为静态属性,修饰的方法为静态方法
从属于类,被该类的所有实例共享,类加载时直接加载,不用创建对象
而成员变量和成员方法在new对象时才创建
而成员变量和成员方法在new对象时才创建
执行程序
父类static代码块
子类static代码块
父类普通代码块
父类构造方法
子类普通代码块
子类普通构造方法
不可以修饰类,但可以修饰内部类
在实际项目中为了让项目运行的更流畅,资源文件一般使用static修饰
super关键字
子类构造器中会默认调用父类的无参构造器
super()标识调用父类构造器
使用super()掉用父类的有参或者无参构造器时,必须写在子类构造方法的第一行
this()也要放到第一行
有super()就不能有this()
instanceof运算符
判断一个父类型是否是后面类的实例
FOO instanceof Koo
boolean
有抽象方法的类,必须定义为抽象类
abstract关键字
类
不能 new对象
不一定有抽象方法
方法
抽象方法没有方法体,子类必须重写
interface关键字
接口:特殊的抽象类
作用:为了解决java中不能多继承的缺陷
接口可以多实现(类只能单继承)
接口中的所有方法都是抽象方法
有public abstract修饰
接口中所有变量都是常量
由public static final 修饰
implement关键字,用于描述类和接口之间的关系
接口与接口之间也是继承
接口可以多继承
面试题
抽象类和接口的区别
抽象类为class,只能单继承
接口为interface,可以多实现,多继承
接口中定义行为,极少定义属性
抽象类中定义属性和扩展的方法
集合
ArrayList
add(Object)
添加元素
size()
获取容器大小
remove(int)
根据索引删除元素
remove(Object)
直接删除对象
clear()
清空容器,容器对象本身不会销毁
toArray()->Object[]
将容器类型转化为数组类型
iterator()->Iterator
使用next()获得序列中的下一个元素
使用hasNext()检查序列中是否还有元素。
contains(Object)
容器中是否包含obj对象,同杨适用于LinkedList
容器的遍历
普通的for循环
使用remove()将迭代器新返回的元素删除。
foreach(增强for循环)
不允许修改
一旦修改会抛出异常
java.util.ConcurrentModificationException
Iterator(迭代器)
it.hasNext
使用hasNext()检查序列中是否还有元素。
it.next
使用next()获得容器中的下一个元素
LinkedList
getFirst()
得到第一个元素
getLast()
得到最后一个元素
addFirst()
向第一个位置添加元素
addLast()
向最后一个位置添加元素
removeFirst()
删除第一个位置的元素
removeLast()
删除最后一个位置的元素
Map
HashMap<k,v>
size()
获取Map结构的大小
put(k,v)
向maps添加元素,key唯一不可重复,如果重复,会被覆盖,与value无关
get(Object key)
>v
remove(Object key)
移除对象
map.entrySet
->Set<Entry<K,V>>
TreeMap<K,V>
添加元素有序(底层是树状结构)
Set
HashSet<>
添加无序不可重复
TreeSet
树状结构,添加有序;
先序遍历
中序遍历
后序遍历
List,Set和Map接口的区别
List、Set都是Collection接口的子接口,Map是独立的接口,与Collection是同级别
List、Set可以使用Iterator进行迭代(Iterator())Map不可以
List添加元素是有序的,Set、Map是无序的
List添加元素可重复Set、Map、数据唯一(由于哈希散列算法,Key决定不可重复)
List和set接口方法基本相同
问HashSet为什么不可重复
答:HashSet源码中是使用HashMap的Key作为HashSet泛型的,所以不可重复
面试题
ArrayList、LinkedList和Vector的区别
ArrayList底层实现数据结构是数组
查询快,增删改慢
线程不安全,效率高
LinkedList
底层实现数据结构为双向链表
查询慢增删改快
线程不安全,效率高
Vector
线程安全,效率低
异常
是什么
运行方法中出现的错误结果
异常的分类
运行时异常(非检查性异常)
只有当运行时才会出现异常
编译异常(检查性异常)
语法错误
defauuult
句法错误
结束括号、分号
调用方法时,该方法声明时定义了需要抛出异常
Throwable
出现异常时的处理方式
1使用throws关键字向上层(调用者)继续抛出异常(不建议使用)
2使用try{}catch{}finally三个关键字进行处理
3使用throw关键字进行异常抛出
常见运行时异常
自己添加
自定义异常
I/O流
分类
处理数据的基本单位
字节流
图片、音频、视频、文档
FileInputStream
fis
FileOutputStream
fos
BufferedInputStrean
bis
FileWriter
fw
BufferedOutputStream
bos
字符流
字符串、纯文本
FileReader
fr
OrintWriter
out
按流向
输入流
InputStream
输出流
OutputStream
java.io和java.nio的区别
File
exsists()
isFile()
isDirectory()
length()
utf-8
getAbsolutePath()
获得绝对路径
load(InputStream)
文件拷贝
普通拷贝
缓冲拷贝
Properties工具类的使用
getProperty(String key)
序列化和反序列化
Serializable
gbk
多线程
Java中如何实现多线程
实现Runable接口
new Thread(Runnable).start();
继承Thread类
new MyThread().start()
线程的生命周期(状态)
新建状态·
使用new关键字,调用start()
就绪状态
运行状态
IO阻塞
Scanner
Sleep阻塞
Thread.sleep(milisec)
interrupt()
yield()
死亡状态
线程的优先级
setPriority(int)[1,10]defalut 5
具体情况由操作系统与CPU决定设置了不一定有
线程的锁机制
syncronized
悲观锁和乐观锁
.class.getClassLoader().getResourceASStream(String)
反射
反射机制是什么
在运行状态中,对于任意一个类的描述
以前用new关键字创建对象,对象创建时很单一
现在使用反射机制,可以灵活创建任意对像
反射机制的应用
eclipse开发工具
后期框架初始化对象
通过反射机制创建对象
Class.forName(String className)
Class<?>
对象(实例)get.Class()
Class<?>
int.class/String.class
Class<?>
创建对象
cls.newInstance()
Constructor<?>[]
cls.getConstructors()
Method[]
cls.getMethids()
Field[]
cls.getFields()
GUI
实现窗口的方法
继承Frame类
重写paint(Graphics g)方法
drawLine()
画直线
drawString()
画字符串
drawRect()
画矩形
drawOval()
画圆
fillRect()
圆角矩形
fillOva()
椭圆
Font
new Font(String ,int ,int)
新建字体
setFont()
保存字体
getFont()
得到字体
Color
new Color(int, int, int)
新建颜色
setColor()
保存颜色
getColor()
得到颜色
0 条评论
下一页