javaSE总结
1 java的历史
1991-至今 詹姆斯-高斯林 SUN公司
ORACLE 2009年
2 java的版本
javaSE java的标准桌面级开发
javaEE 企业级web开发
javaME 嵌入式开发
3 jdk的版本
jdk1.0 - jdk11 每半年一个版本 每年的3月和9月
4 jdk 的安装和环境配置
jdk--开发者必须安装
jre--使用者安装
java_home:jdk的安装目录
javac:%java_home%/bin; 可以在任意目录结构中,进入jdk的bin目录,方便的找出javac.exe和java.exe
5 数据类型
基本类型
byte,short,int,long,char,float,double,boolean
引用类型
类,接口,数组,枚举
6 运算符
算术运算符,关系运算符,逻辑运算符, 赋值运算符,位运算
7 流程语句
单分支 if
双分支 if else
多分支
if.. else if.. else
switch(){case..}
8 循环语句
while(条件){
循环体
变量更新
}
do{
}while();
for(初始值;范围值;变量更新){
循环体
}
9 方法
无参无返回
无参有返回
有参无返回
有参有返回
形参:方法声明是时,形式上的参数,是一个局部变量
实参:方法调用时,传递给方法实际有值的参数
10 数组
概念:一个开辟了连续的空间的线性数据结构
特点:查询快,增删慢
可以添加任意的数据类型
数组的基本操作
增 删 改 查 长度 判断 排序
冒泡排序 插入排序,选择排序,快速排序
11 面向对象编程 OOP AOP(面向切面编程)
类:类是一类事务的模板,把很多具有相同功能的对象抽象出来,描述为一个类
对象:每一个类的具体的实例
类是对象的抽象化,对象是类的实例化
类的主要组成
成员属性,成员方法,构造方法
成员属性:修饰符 数据类型 变量名;
默认值
整型:0
浮点型:0.0
布尔型:false
引用类型:null
变量的作用域
局部变量:声明在方法中的变量,作用范围,只在本方法中
成员变量
类变量(static),对象变量
内存位置
堆: 对象变量
方法区:类变量
加载时机
创建对象的时候,对象变量初始化
类被加载的时候,类变量就初始化
份数
对象变量,每一个对象各有一个
类变量,被每一个对象所共享
成员方法
修饰符 返回值 方法名(){
}
方法重载:overload
1:同一个类
2:方法名相同
3:参数列表不同
3.1 参数个数
3.2 参数类型
3.3 参数顺序
和返回值无关
构造器
修饰符 类名(){
}
每一个类至少会有一个构造器,如果没有手动提供构造器,那么编译器会自动提供一个无参的构造器
构造器没有返回值
构造器也可以重载
public Student(){
this("张三");
}
public Student(String name){
this("李四",20);
}
public Student(String name,int age){
}
this:代表当前对象的引用
1:this可以调用成员属性
2:this可以调用成员方法
3:this可以调用构造方法
static的用法
修饰变量:代表类变量,被所有的对象共享
修饰方法:代表类方法
修饰类 :静态内部类
细节
成员方法中,既可以直接访问成员变量,也可以访问类变量
静态方法中,只可以访问类变量
成员方法既可以直接调用成员变量,也可以调用类方法
静态方法只可以调用类方法
面向的3个特点
封装,继承,多态
封装:属性私有化,提供公开的get和set方法 隐藏细节,公开接口
属性的值是随着行为的变化而变化的
修饰符
访问修饰符
private:类可见性
default:类可见,包可见性
protected:类可见,包可见,不同包的子父类
public:项目可见
非访问修饰符
static,final, synchronized,native,transient
继承:单继承,继承链 extends
顶级父类:Object
子类可以继承父类的属性和方法,私有的不能继承
修饰符 class 子类 extends 父类{
}
优点:提高了代码的复用性
缺点:高耦合,低内聚
多态 :
父类 变量名 = new 子类() 向上转型(父类的引用指向子类对象)
多态的必要原则
1:继承
2:要有方法重写
3:向上转型
方法重写 override
1:子父类之间
2:方法名,参数列表,返回值相同
super:代表父类的引用
super.成员属性
super.成员方法
super(参数); 调用父类的构造函数
java中任何一个子类的构造方法都必须调用其父类的构造方法(包括隐示调用)
并且调用父类构造方法的语句必须是子类构造方法的第一条语句
抽象类:就是为了被子类继承
修饰符 abstract class 类名{
}
特点
1:可以有抽象方法
2:可以有实现方法
3:不可以创建对象
4:利用多态通过向上转型,创建子类对象
接口 interface
修饰符 class 类名 implements 接口名{
}
类与类
继承关系,单继承,有继承链
类与接口
实现关系,多实现
接口和接口
继承关系,多继承
抽象类与接口的区别?
变量
抽象类有,接口没有
常量
抽象类有,接口有 public static final
成员方法
抽象类有,接口没有(jdk1.8之前没有)
抽象方法
抽象类有,接口有 public abstract
构造器
抽象类有,接口没有
final的用法
final修饰变量,表示常量,一旦被赋值,不可被修改
final修饰方法,表示这个方法不能被重写
final修饰类,表示是一个最终类,不能被继承(所有的方法不能被重写)
异常
Throwable
子类
Exception 异常
编译时异常
运行时异常 RuntimeException
Error 错误
处理异常
1:捕获异常
try:尝试运行有可能会出错的代码
catch:一旦代码出错,编译器生成一个异常对象,和catch中异常做匹配,匹配成功进入catch块,后面的代码正常执行
finally:表示一定会执行,就算代码中有return,也会在return之前执行,除了虚拟机强制退出 System.exit(1);
2:抛出异常
throws:在方法声明部分,抛出一个异常类,可以一次性声明多个异常
有可能会抛出异常
throw
在方法体中,抛出一个异常对象,一定会抛出异常
3:自定义异常
1:继承Exception或者RuntimeException
2:提供一个无参的,以及有参的构造函数
public class SexException extends Exception{
public SexException(){
super();
}
public SexException(String message){
super(message);
}
}
常用类
包装类
Byte,Short,Integer,Long,Float,Double,Boolean,Character
字符串 :String:是一个不可变的字符序列
"abcde".substring(0,2) = "ab"
"abc".charAt(0) = 'a'
"abc".length() = 3
"a,b,c".split(",") = ["a","b","c"]
"abc".indexof("a") = 0
"abaca".replaceAll("a","*") = "*b*c*";
字符串缓冲类
StringBuffer:可变的字符序列 同步
StringBuilder: 可变的字符序列 不同步
数学类:Math
random() 0-1 之间的小数 包括0,不包括1
max(int a,int b);
min(int a,int b);
ceil(10.123) = 11
floor(10.123) = 10
pow(10,3) = 1000 次幂函数
日期类:java.util.Date
Date date = new Date(); 获取当前系统时间
getYear()+1900
getMonth()+1
getDate()
getDay()
getHours();
getMinutes()
getSeconds()
日期转为字符串
date.toLocalString();
日期转换类 DateFormat 子类 SimpleDateFormat
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
//将日期转为字符串
String s = date.format(date);
//将字符串转为日期
Date da = date.parse("1999-12-12");
日历类 Calendar
Calendar ca = Calendar.genInstance();
ca.get(Calendar.YEAR); 获取年
ca.get(Calendar.MONTH); 获取月
ca.get(Calendar.DATE); 获取日
大整型 BigInteger
BigInteger bg = new BigInteger(String.valueof(Long.MAX_VALUE))
bg = bg.add(new BigInteger("1")); 加法 给long的最大值+1
大浮点型 BigDecimal
BigDecimal bd = new BigDecimal(String.valueof(Double.MAX_VALUE))
bd = bg.add(new BigDecimal("1")); 加法 给double的最大值+1
文件类:File
File file = new File("d://工具//a.txt");
file.createNewFile();
renameTo()
delete();
枚举:enum
枚举里的变量默认的修饰符是public static final
public enum Season(){
春,夏,秋,冬
}
Season.春
Season[] son = Season.values();
for(Season s:son){
System.out.println(s.name)
}
集合
Collection
List
ArrayList:底层是数组,查询快,增删慢,不同步
LinkedList:底层是链表,查询慢,增删快,不同步
Vector:底层是数组,查询快,增删慢,同步
Set
HashSet:底层是哈希表(数组+链表)查询快,增删快,不同步
LinkedHashSet:底层是哈希表+链表 查询快,增删快,不同步
TreeSet:底层是树结构,排序
2种排序方案
1:自然排序,实现Comparable接口,重写comparTo()
2:比较器排序,实现Comparator接口,重写compare()
Map
HashMap:底层是哈希表(数组+链表)查询快,增删快,不同步
TreeMap:底层是树结构,排序
2种排序方案
1:自然排序,实现Comparable接口,重写comparTo()
2:比较器排序,实现Comparator接口,重写compare()
Hashtable:底层是哈希表(数组+链表)查询快,增删快,同步
List接口:有序(添加顺序和迭代顺序一致)且重复
Set接口:无序且唯一
List接口的遍历方式
1:转数组 toArray
ArrayList<String> al = new ArrayList<>();
2:size+get List的专有遍历方式
for(int i = 0;i<al.size();i++){
al.get(i);
}
3:迭代器 Iterator it = al.iterator(); Collection的专有遍历方式
while(it.hasNext()){
it.next()
}
4:for-each-- 任何集合都可以
for(String s:al){
s
}
Map集合遍历方式
1:先找到所有的键吗,然后根据键获取值
Map<String,String> map = new HashMap<>();
Set<String> set = map.keySet();
for(String s:set){
String value = map.get(s);
}
2:直接获取键值对 entrySet
Set<EntrtSet<String,String>> set = map.entrySet();
for(EntrtSet<String,String> en :set){
en.getKey(); 键
en.getValue(); 值
}
集合的工具类:Collections
添加 add()
删除 remove()
修改
排序 sort()
二分搜索法:binarySearch() 前提是先排序
IO流
字节流
OutputStream
FileOutputStream 文件字节输出流
BufferedOutputStream 缓冲字节输出流
ObjectOutputStream 序列化流 将对象流化(将java对象保存在文件)
InputStream
FileInputStream 文件字节输入流
BufferedInputStream 缓冲字节输入流
ObjectInputStream 反序列化流:将文件中对象读取取java程序中
字符流
Writer
OutputStreamWriter 字符输出转换流
FileWriter 字符输出便捷流
BufferedWriter 字符输出缓冲流
Reader
InputStreamReader 字符输入转换流
FileReader 字符输入便捷流
BufferedReader 字符输入缓冲流
//3层结构的流
1:缓冲流
2:转换流
3:字节流
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("a.txt")))
BufferedReader bw = new BufferedReader(new InputStreamReader(new FileInputStream("a.txt")))
流拷贝文件
把d://工具/中国人.mp3 拷贝到当前项目
BufferedInputStream bis = new BufferedInputStream("d://工具/中国人.mp3");
BufferedOutputStream bos = new BufferedOutputStream("中国人.mp3");
byte[] by = new byte[1024];
int num = 0;
while((num = bis.read(by))!=-1){
bos.write(by,0,num);
}
bos.close();
bis.close();
把d://工具/a.txt 拷贝到当前项目
BufferedReader br = new BufferedReader("d://工具/a.txt");
BufferedWriter bw = new BufferedWriter("a.txt");
String line = null;
while((line = br.readLine())!=null){
bw.write(line);
bw.newLine();
}
bw.close();
br.close();
序列化:
需要实现序列化的类要实现Serializable 接口
方案1:
Student stu1 = new Student();
Student stu2 = new Student();
ObjectOutputStream oos = new ObjectOutputStream("Student.txt");
oos.writerObject(stu1);
oos.writerObject(stu2);
oos.writerObject(null); //自定义结束标记
oos.close();
ObjectInputStream ois = new ObjectInputStream("Student.txt");
Object obj = null;
while((obj = ois.readObject())!=null){
Student stu = (Student)obj
}
ois.close();
方案2:
Student stu1 = new Student();
Student stu2 = new Student();
ArrayList<Student> al = new ArrayList<>();
al.add(stu1);
al.add(stu2);
ObjectOutputStream oos = new ObjectOutputStream("Student.txt");
oos.writerObject(al);
oos.close();
ObjectInputStream ois = new ObjectInputStream("Student.txt");
ArrayLis<Student> al = (ArrayLis<Student>)ois.readObject();
for(Student stu:al){
stu
}
ois.close();
多线程
实现方式
1:继承Thread类,重写run方法
2:实现Runnable接口, 重写run方法
启动方式1 继承方案
public class MyThread extends Thread{
@OverRide
public void run(){
多线程
}
main(){
MyThread m1 = new MyThread();
MyThread m2 = new MyThread();
m1.setName("线程1");
m2.setName("线程2");
m1.start();
m2.start();
}
}
启动方式2 接口方式
public class MyThread implements Runnable{
@OverRide
public void run(){
多线程
}
main(){
MyThread m1 = new MyThread();
Thread t1 =new Thread(m1,"线程1");
Thread t2 =new Thread(m1,"线程2");
t1.start();
t2.start();
}
}
线程声明周期
新生:new对象
就绪:调用start方法
运行:谁抢到CPU执行,就运行
阻塞:调用sleep()或者wait()
休眠时间结束,进入就绪
被唤醒进入就绪 (notify,notifyAll)
死亡 stop,interrupted
线程同步
1:同步代码块
synchronized(锁对象){
需要同步的代码...
}
2:同步方法
public synchronized void show(){
需要同步的代码...
}
3:Lock锁
lock.lock();
需要同步的代码...
lock.unLock();
死锁
public class DieLock implements Runnable{
public static final Object objA = new Object();
public static final Object objB = new Object();
public boolean flag;
public DieLock(boolean flag){
this.flag = flag;
}
@OverRide
public void run(){
if(flag){
synchronized(objA){
synchronized(objB){
}
}
}else{
synchronized(objB){
synchronized(objA){
}
}
}
}
main(){
DieLock d1 = new DieLock(true);
DieLock d2 = new DieLock(false);
Thread t1 = new Thread(d1);
Thread t2 = new Thread(d2);
t1.start();
t2.start();
}
}
线程通信
相互等待,相互唤醒
网络编程:Socket编程
网络编程3要素
1:IP地址 5类
2:端口号 0-65535
3:协议
TCP
面向连接 3次握手协议
安全,效率低
可传输大量数据
UDP
非面向连接
不安全,下率高
传输数据量小
可以广播发送
udp发送端
1:创建发送端的socket
DatagramScoket ds = new DatagramScoket();
2:创建数据包
byte[] by = {97,98,99};
DatagramPacket dp = new DatagramPacket(by,by.length,InetAddress.getLocalHost(),10086);
3:发送数据包
ds.send(dp);
4:关闭socket
ds.close();
udp接受端
1:创建接受端的socket
DatagramScoket ds = new DatagramScoket(10086);
2:创建数据包
byte[] by = new byte[1024];
DatagramPacket dp = new DatagramPacket(by,by.length);
3:接受数据包
ds.receive(dp);
4:拆包
byte[] by2 = dp.getDatea(); 数据
int len = dp.getLneght(); 数据长度
InetAddress address = dp.getAddress(); 发送端的ip
new String(by2,0,len);
5:关闭socket
ds.close();
tcp客户端
1:创建客户端的套接字
Socket s = new Socket(InetAddress.getLocalHost(),10086);
2:获取输出流
BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream());
3:获取输入流
BufferedIntputStream bis = new BufferedIntputStream(s.getIntputStream());
3:写数据
bos.writer("你好吗".getBytes());
4:通知服务器,写入数据完毕
s.shutdownOutput();
5:读取服务器给出的响应
bis.read();
6:关闭套接字
s.close();
tcp服务器端
1:创建服务器端的套接字
ServerSocket ss = new ServerSocket(10086);
2:监听客户端套接字,并获取套接字
Socket s = ss.accept();
3:获取输入流
BufferedIntputStream bis = new BufferedIntputStream(s.getIntputStream());
4 获取输出流
BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream());
5:读数据
byte[] by = new byte[1024];
int num = 0;
while((num = bis.read(by))!=-1){
new String(by,0,num);
}
6:给出响应信息
bos.write("反馈信息".geBytes());
bos.flush();
5:关闭套接字
s.close();
XML解析
1:DOM解析
2:SAX解析
3:JDOM解析
4:DOM4J解析
SAXReader reader = new SAXReader();
Document doc = reader.read(new File(pathname));
Element root = doc.getRootElements("Students");
Iterator<Element> it = root.ElementIterator();
while(it.hasNext){
Element el = it.next();
Attribute attr = el.attribute("id");
attr.getName();属性名
attr.getText();属性值
Iterator<Element> it2 = el.ElementIterator();
while(it.hasNext){
Element el = it.next();
Attribute attr = el.attribute("id");
attr.getName();属性名
attr.getText();属性值
Iterator<Element> it2 = el.ElementIterator();
}
}
正则表达式
具有正确规则的字符串的表达式
[0-9a-z_A-Z]
{a}? 0-1
{a}* 0-N
{a}+ 1-N
{3,6} 3-6
判断
boolean flag = "abc".matcher(regex)
分割
String[] str = "a,b,c".split(regex);
替换
"abc".replaceAll("a",regex);
获取
String regex = "\\b[a-z]{3}\\b";
Pattern pt = new Pattern();
Matcher mt = pt.complie(regex);
while(matcher.find()){
mt.group();
}
反射
1:获取Class
Class clazz = Class.foName("java.lang.String");
2:获取构造器 public
Constructor con = clazz.getConstructor(String.class);
获取构造器 所有
Constructor con2 = clazz.getDeclaredConstructor(String.class);
3:创建对象
Object obj = clazz.newInstance(); 无参对象
Object obj = con.newInstance("字符串");
4:获取属性
Field field = clazz.getField("name",String.class);
5 暴力破解
field.setAccessable(true);
6:属性赋值
field.set(obj,"张三");
7:获取属性值
field.get(obj);
8:获取方法
Method m = clazz.getMethod("add",String.class);
9调用方法
Object obj = m.invoke(obj,"你好");
javaSE总结的更多相关文章
- 用大白话聊聊JavaSE -- 如何理解Java Bean(一)
首先,在开始本章之前,先说一个总的概念:所谓的Java Bean,就是一个java类,编译后成为了一个后缀名是 .class的文件.这就是Java Bean,很多初学者,包括当年的我自己,总是被这些专 ...
- javaSE基础07
javaSE基础07 一.static静态修饰符 用了static修饰的变量就会变成共享的属性,只会初始化一次,在内存中只存在一个,并且每个对象都可以访问,存放在方法区(数据共享区) 1.1 stat ...
- javaSE基础06
javaSE基础06 一.匿名对象 没有名字的对象,叫做匿名对象. 1.2匿名对象的使用注意点: 1.我们一般不会用匿名对象给属性赋值的,无法获取属性值(现阶段只能设置和拿到一个属性值.只能调用一次方 ...
- javaSE基础05
javaSE基础05:面向对象 一.数组 数组的内存管理 : 一块连续的空间来存储元素. Int [ ] arr = new int[ ]; 创建一个int类型的数组,arr只是一个变量,只是数组的一 ...
- javaSE基础04
javaSE基础04 一.三木运算符 <表达式1> ? <表达式2> : <表达式3> "?"运算符的含义是: 先求表达式1的值, 如果为真, ...
- javaSE基础03
javaSE基础03 生活中常见的进制:十进制(0-9).星期(七进制(0-6)).时间(十二进制(0-11)).二十四进制(0-23) 进制之间的转换: 十进制转为二进制: 将十进制除以2,直到商为 ...
- 用大白话聊聊JavaSE -- 自定义注解入门
注解在JavaSE中算是比较高级的一种用法了,为什么要学习注解,我想大概有以下几个原因: 1. 可以更深层次地学习Java,理解Java的思想. 2. 有了注解的基础,能够方便阅读各种框架的源码,比如 ...
- javaSE基础02
javaSE基础02 一.javac命令和java命令做什么事情? javac:负责编译,当执行javac时,会启动java的编译程序,对指定扩展名的.java文件进行编译,生成了jvm可以识别的字节 ...
- JavaSE基础01
JavaSE基础篇01 ------从今天开始,我就学习正式java了,O(∩_∩)O哈哈~,请大家多指教哦 一.Windows常见的dos命令 操作dos命令: win7 --->开始 --- ...
- javaSE学习路线
Java SE大致可分为以下几块内容: n 对象导论:如何用面向对象的思路来开发 n 深入JVM:Java运行机制以及JVM原理 n 面向对象的特征:封装.继承.抽象.多态 n 数组和容器:容 ...
随机推荐
- docker rmi命令-删除image
rmi 删除image Usage: docker rmi IMAGE [IMAGE...]Remove one or more images -f,--force=falseForce remova ...
- Linux下Redis安装使用教程
https://redis.io/download 第一步:安装redis需要在有c语言的编译环境下,执行命令安装c语言环境: yum install gcc-c++ https://blog.csd ...
- hotmail 收不到邮件的问题
之前用 hotmail 注册过一个 aws 账号,起了一个 ec2 的免费一年的 VPS,然后没怎么用,不久就把这事忘了. 直到有一天手机收到信用卡扣款消息,我就马上去登账号,却怎么也想不起密码来了, ...
- 你不知道的console调试
概述 浏览器的开发者工具我们经常用,console.log我们也经常用,但是console还有其它一些方便调试的命令,我总结了几个常用的记录在下面,供以后开发时参考,相信对其他人也有用. 获取js执行 ...
- 如何在 SCSS 使用 JavaScript 变量/scss全局变量
Update2019/3/6:发现一个更好的方法,预处理器加载一个全局设置文件 官方github给出了详细的配置. 在 SCSS 中使用变量很方便,创建一个 variables.scss 文件,里面声 ...
- Linux下安装mysql5.7
Linux下安装mysql5.7 首先准备好mysql5.7.17的安装包,安装包放在 /data/software 目录下 进入到 /usr/local 目录下,解压mysql安装包 命令: ...
- mysql之CREATE DATABASE Syntax(创建数据库)
一:语法 CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name #SCHEMA是DATABASE的同义词 [IF NOT EXITTS]可防止建库是已经 ...
- MySQL Workbench导出Model提示['ERROR 1064 (42000): You have an error in your SQL syntax....syntax to use near 'VISIBLE']
CREATE TABLE IF NOT EXISTS `pihealth`.`warning_events` ( `wid` INT NOT NULL AUTO_INCREMENT, `wtime` ...
- Hybrid App 原理解析
目录 一.现有混合方案 二.Hybrid技术原理 三.Native 通知 H5 (Native 调用 JS) 3.1 Android 调 H5 3.2 iOS 调 H5 四.H5 通知 Native( ...
- eclipse 安装插件报错问题
报错信息 An error occurred while installing the items session context was:(profile=epp.package.jee, phas ...