Java梗概
Java平台:J2SE(桌面)、J2ME(逐渐被android取代)、J2EE(企业级针对web程序)
Java是在JVM虚拟机上运行,跨平台本质是在不同平台上运行JVM虚拟机
JRE = JVM+核心类库
JDK是Java开发使用的,包含java的开发工具
JDK=JRE+JAVA开发工具
通过文本编辑器运行java程序
1。Java的主方法
public class 类名{
public static void main(String[] args){
System.out.println("hello");
}
}
确保类名和文件名一直否则javac编译时会出错
2。Javac 编译文件
3。Java 编译后的文件 即可运行
JAVA的基本语法:
1。注释:
单行注释 // 注释文字
多行注释 /* 注释文字*/
文档注释 /** 注释文字*/
2。关键字特点:
小写字母,编译器会自动识别
数据类型:
class、interface、byte、short、int、long、float、double、char、boolean、void
数据类型值:
true、false、null
控制流程的关键字:
If、else、switch、case、default、while、do、for、break、continue、return
访问权限:
private、protected、public
类,函数,变量修饰
abstract、final、static、synchronized
类之间关系
extends、implements
实例、引用实例
new、this、super、instanceof
异常处理
try、catch、finally、throw、throws
包
package、import
其它
native、strictfp、transient、volatile、assert
3。常量分类:
字符串常量、整数常量、小数常量、字符常量、布尔常量、空常量(null)
4。变量:
注意事项:1。未赋值变量不能直接使用2。变量只在所属范围内有效3。一行可定义多个变量
5。数据类型:
6。隐性数据转换:
取值范围小的向取值范围大的转换
7。强制类型转换:
和C一样
8。运算符:对常量和变量操作的符号
算术运算符:+ - * / % ++ --
关于字符和字符串参与的运算,字符则取相应的ascii值,字符串则进行拼接等字符串操作
赋值运算符:= += -= *= /= %=
关系运算符:== != > >= < <=
逻辑运算符:& | ^ ! && ||
& 有false为false
| 有true为true
^ 相同为false,不同为true
! !false为true !true为false
三元运算符:关系表达式?表达式1 : 表达式2;
9。程序流程:
顺序,选择,循环
Java产生随机数:
使用Random:
Eg:Random r = new Random();
int number = r.nextInt(10); // 产生0~10之间的随机数,不包括0和10
Java复合数据结构:
数组:存储同类型的多个元素容器
数组两种定义:
1。数据类型 [] 数组名;
2。数据类型 数组名 [];
数组初始化两种方式:
1。动态初始化:
数据类型 [] 数组名 = new 数据类型[数组长度] // 数组长度:就是数组中元素个数
2。静态初始化:指定数组中每个元素的值,有系统决定长度
函数与方法:
方法:完成特定功能的代码块
格式:修饰符 返回值类型 方法名(参数类型 参数名1,。。。){
方法体
return 返回值
}
重载:同一个类中,允许一个以上的同名方法,参数个数或参数类型不同即可
参数传递:传递基本类型时,不影响实际参数。传递引用(本质是指针),影响实际参数
面向对象:成员变量(事物属性) 成员方法(事物行为)
类:一组属性和行为的集合
封装、继承、多态面向对象三大特征
封装原则:不需要对外提供的内容隐藏
成员变量private提供对应的getXxx()/setXxx()方法
this关键字:this代表所在类的对象引用
局部变量和成员变量重名时使用
构造:与类名相同、没有返回类型和返回值
构造与重载:系统默认提供构造方法、重写构造则系统不提供,重载构造遵循重载原则
对象:类事物的具体表现
静态static:被static修饰的成员变量属于类,不属于这个类的某个对象,被static修饰的成员可以通过类名直接访问。静态的加载优先对象,随类的加载而加载。
说明:静态成员只能访问静态成员,非静态成员可以访问静态成员
类的继承:
格式:class 子类 extends 父类{ }
说明:java中只允许单继承,多个类可以有一个父类,可以多层继承,
子父类成员变量名一样获取的是子类成员
super:可以获取父类的成员变量和成员方法,用法和this类似
@Override:方法重写,下面的方法是重写父类的方法
抽象类,一个类继承了抽象类就必须重写抽象类的所有方法。否则仍为抽象类
说明:抽象方法只能在抽象类中,必须使用abstract修饰,不能创建对象,可以有非抽象方法,一个类继承抽象类要么重写所有方法要么仍为抽象类。同时抽象类不能与static共存
接口(interface):功能集合,比抽象类更抽象的"类",只描述具备的方法,由子类实现
格式:class类 implements 接口{
重写接口中的方法
}
说明:接口中变量使用 public static final修饰符
方法使用 public abstract修饰符
接口不可以创建对象,子类必须实现所有的方法,否则仍为抽象类
接口和类关系:
类之间是继承,
类与接口之间只有实现关系,一个类可以实现多个接口
接口之间只有继承关系,一个接口可以继承多个接口
接口和抽象类:
共性:没有具体实现方法都不能实例化
区别:
类 |
接口 |
类与抽象类是继承关系 |
类与接口是实现关系, |
抽象类可以有成员变量和常量 |
接口只能有常量默认public static final |
抽象类可以有抽象方法和非抽象方法 |
接口只能有抽象方法默认public abstact |
抽象类有构造方法,给子类 |
接口没有构造方法 |
匿名对象:匿名对象务对象名,直接使用new创建对象
使用:方法只调用一次。可以作为参数传递,但传参前没有其他操作
final:修饰类:不能被继承,没有子类
成员方法:不能被重写
成员变量:不可以修改,是常量
多态:父类引用变量指向子类对象
格式:父类类型 变量名 = new 子类类型();
变量名.方法名();
成员特点:子父类同名成员变量时,
编译都是看父类、运行(成员方法)看子类,静态和成员变量看父类
(变量没有重写概念)
子类型转换成父类类型(自动)
格式:父类类型 变量名 = new 子类类型() ;
父类类型转换成子类型(强制)
格式:子类类型 变量名 = (子类类型)父类类型的变量
权限修饰符:
可以访问
public:当前类,相同包下不同类,不同包下的子类,不同包下无关类
default:当前类,相同包下不同类,
private:当前类,
protected:当前类,相同包下不同类,不同包下的子类
default和protected区别:
default:当前类下使用
protected:子类对象使用
内部类:其它类内部的类。
集合的体系结构
Collection中定义了所有子类集合的共同属性和方法
Collection中常用的功能:
boolean add(Object e): 向集合中添加元素
void clear():清空集合中所有元素
boolean contains(Object o):判断集合中是否包含某个元素
boolean isEmpty():判断集合中的元素是否为空
boolean remove(Object o):根据元素的内容来删除某个元素
int size():获取集合的长度
Object[] toArray():将集合转换成数组并存储到数组中
迭代器:遍历集合获取集合中的元素
Iterator(接口):
hasNext():判断集合中是否有元素可迭代
next():迭代返回下一个元素,并指针后移
迭代器并发修改异常:
解决方法:1。不使用迭代器遍历集合,遍历集合就可以增删
2。使用迭代器的子接口ListIterator实现增删
泛型:类上定义<>时使用泛型 E
HashSet集合:
Set体系集合:1。存入和取出顺序不一致2。没有索引3。不重复
HashSet唯一性原理:对要添加的元素调用hashCode()产生哈希值,比较集合判断是否存在,然后进行添加或不添加
Map接口:是集合存储数据形式不同。
Map中的元素成对存在,包含键与值。通过键可以查找值
Collection中的集合为单列集合,Map中的集合为双列集合,键不能重复,值可以
Map常用功能:
映射:
V put(K key, V value) :以键=值的方式存入Map集合
获取:
V get(Object key):根据键获取值
int size():返回Map中键值对的个数
判断
boolean containsKey(Object key):判断集合中是否包含键为key的键值对
boolean containsValue(Object value):判断集合中是否包含值为value键值对
boolean isEmpty():判断集合中是否没有任何键值对
删除
void clear():清空Map集合中所有的键值对
V remove(Object key):根据键值删除Map中键值对
遍历
Set<Map.Entry<K,V>> entrySet():将每个键值对封装到一个个Entry对象中,再把所有Entry的对象封装到Set集合中返回
Set<K> keySet() :将Map中所有的键装到Set集合中返回
Collection<V> values():返回集合中所有的value的值的集合
异常与处理
Java中使用Exception类描述异常,层级图
JVM默认处理异常的方式:将异常的类型、原因、位置显示在命令行终止程序
try/catch处理异常
格式:try{
//需要被检测的语句
}
catch(异常类 变量){
//异常的处理语句
}
finally{
//一定会被执行的语句
}
throws方式处理异常:
格式:权限修饰符 返回值类型 方法名(形参列表)throws 异常类型1,…{ }
Throwable常用方法:
String getMessage() 返回此 throwable 的详细消息字符串
String toString() 返回此 throwable 的简短描述
void printStackTrace() 打印异常的堆栈的跟踪信息
编译时异常和运行时异常:
编译时异常:是Exception子类,编译期必须处理
运行时异常:RuntimeException子类
集合:元素个数、长度不确定使用 ArrayList集合
ArrayList集合操作:
增
public boolean add(E e);// 添加元素
public void add(int index,E element);// 在指定的索引处添加元素
删
public boolean remove(Object o);// 删除指定的元素,返回操作是否成功
public E remove(int index);// 删除指定索引处的元素,返回被删除的元素
查
public E get(int index); // E 特殊数据类型,泛型
public int size();// 获取集合中元素的个数
改
public E set(int index,E element);//修改指定索引处的元素,返回被修改的元素。
集合遍历:和数组遍历一样
Java IO流
写数据:FileWriter
1。FileWriter关联流文件:FileWriter(String fileName)// 传入文件路径
2。写方法写数据:void write(String str)向文件中写str
3。刷新方法将数据传入硬盘:void flush()
4。关闭流释放占用的系统底层资源:void close()
写的其他方法:
void write(String str,int index,int len);//写字符串中的一部分数据
void write(int ch);// 写一个字符数据,int类型或char类型都可
void write(char[] chs);// 写一个字符数组
void write(char[] chs,int index,int len);// 写一个字符数组的一部分数据
FileWriter(String filename,boolean append);// 写入换行以及向文本末尾追加
读数据:FileReader 读数据一次读取一个字符
缓冲流:BufferedWriter:将文本写入字符串输出流
BufferedReader:从字符输入流读取文本
缓冲流复制文本的两种方式:
1。使用缓冲流不使用字符数组
2。使用缓冲流使用字符数组
缓冲流特有使用方式:void newLine();// 写入一个换行符
String readLine()// 一次读取一行数据,不读取换行符
File概述:File文件和目录的抽象形式
File构造函数:
File(String pathname) :将一个字符串路径封装成File对象
File(String parent,String child):传入一个父级路径和子级路径
File(File parent,String child):传入一个File类型的父级路径和子级路径
File类创建和删除功能:
boolean createNewFile():指定路径不存在该文件时时创建文件,返回true,否则返回false
boolean mkdir():当指定的单级文件夹不存在时创建文件夹并返回true,否则返回false
boolean mkdirs():当指定的多级文件夹某一级文件夹不存在时,创建多级文件夹并返回true,否则返回false
boolean delete():删除文件或者删除单级文件夹
File类的判断功能
boolean exists():判断指定路径的文件或文件夹是否存在
boolean isAbsolute():判断当前路路径是否是绝对路径
boolean isDirectory():判断当前的目录是否存在
boolean isFile():判断当前路径是否是一个文件
boolean isHidden():判断当前路径是否是隐藏文件
File类的获取和修改名字功能
File getAbsoluteFile():获取文件的绝对路径,返回File对象
String getAbsolutePath():获取文件的绝对路径,返回路径的字符串
String getParent():获取当前路径的父级路径,以字符串形式返回该父级路径
File getParentFile():获取当前路径的父级路径,以字File对象形式返回该父级路径
String getName():获取文件或文件夹的名称
String getPath():获取File对象中封装的路径
long lastModified():以毫秒值返回最后修改时间
long length():返回文件的字节数
boolean renameTo(File dest): 将当前File对象所指向的路径 修改为指定File所指向的路径
File类的其他获取功能:
String[] list():以字符串数组的形式返回当前路径下所有的文件和文件夹的名称
File[] listFiles():以File对象的形式返回当前路径下所有的文件和文件夹的名称
static File[] listRoots():获取计算机中所有的盘符
对象操作流:用于从流中读取对象
ObjectInputStream:反序列化流,利用输入流,从文件中读取对象
ObjectOutputStream:序列化流,利用输出流,向文件中写入对象
用于操作对象,可将对象写入文件中,也可从文件中读取对象
Properties集合:可保存在流中或从流中加载属性列表中每个键及其对应值
特征:
1。Hashtable的子类,map集合中的方法都可用
2。该集合没有泛型,键值都是字符串
3。是一个可持久化的属性集
4。和流方法结合
void load(InputStream inStream)//从输入流中读取属性列表
void load(Reader reader)//按简单的面向行的格式从输入字符流中读取属性列表
void store(OutputStream out,String comments)//将load(InputStream)方法加载到Properties表中的格式,将表中的属性列表写入输出流
void store(Writer writer,String comments)// 将load(Reader)方法加载到Properties表中的格式,将表中的属性列表写入输出字符
Java字符串常用方法:
构造方法(字节数组转字符串):
String():初始化一个新创建的 String 对象,使其表示一个空字符序列
String(byte[] bytes) 使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String
String(byte[] bytes, Charset charset) 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String
成员方法(字符串转字节数组)
getBytes() 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中
getBytes(Charset charset) 使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组
字符流中的编码
InputStreamReader(InputStream in, CharsetDecoder dec) 创建使用给定字符集解码器的 InputStreamReader
OutputStreamWriter(OutputStream out, CharsetEncoder enc) 创建使用给定字符集编码器的 OutputStreamWriter
多线程实现:
1。继承Thread类:定义类继承Thread重写run,创建子类对象 调用start方法
Eg:public class mythread extends Thread{public void run(){}}.start();
2。实现Runnable接口:定义Runnable接口重写run,创建Thread类对象,将Runnable接口的子类对象作为参数传递给Thread类的构造函数,调用Thread类的start()开启线程
多线程同步问题:
同步代码块:
synchronized(锁对象){ //锁对象需要被所有线程共享
//需要同步的代码
}
同步方法:
修饰符 synchronized 返回值 方法名(){
}
JAVA面向网络
TCP/IP协议层次结构简单共四层
IP地址:可以链接到指定计算机
端口号:连接到指定计算机的指定应用程序上
JDK中的InetAddress类:用于封装一个IP地址,并提供与IP地址相关的方法
常用方法:
类型 |
方法 |
static InetAddress |
getByName(String host) 在给定主机名的情况下确定IP地址 |
static InetAddress |
getLocalHost() 返回本地主机 |
String |
getHostName() 获取IP地址的主机名 |
String |
getHostAddress() 返回IP地址字符串(文本形式显示) |
UDP协议:数据传输时,数据的发送端和接收端不建立逻辑链接,是一种面向无连接的协议
DatagramPacket类:
DatagramPacket(byte[] buf,int length)//构造DatagramPacket接收长度为length的数据包
发送端需要指出数据的IP地址和端口号,接收端不需要
DatagramPacket(byte[] buf,int length,InetAddress address,int port)// 构造数据包,用来将长度为length的包发送到指定主机上的指定端口
DatagramPacket常用方法:
类型 |
方法 |
InetAddress |
getAddress()//返回某台机器的IP地址, |
int |
getPort()//返回某台远程主机的端口号 |
byte[] |
getData()//返回数据缓冲区 |
Int |
getLength()//返回将要发送或接收的数据的长度 |
DatagramSocket类:发送或接收DatagramPacket数据包
DatagramSocket()//数据包套接字并将其绑定到本地主机上任何可用的端口
DatagramSocket(int port)//创建数据包套接字并将其绑定到本地主机的指定端口
void receive(DatagramPacket p)//从此套接字接收数据包
void send(DatagramPacket p)//从此套接字发送数据包
TCP协议:
Java提供两个类实现:ServerSocket类,用于服务端,Socket类,用于客户端
ServerSocket类:
ServerSocket(int port)//创建绑定到特定端口的服务器套接字
Socket accept()//侦听并接收套接字的连接
InetAddress getInetAddress()//返回服务器套接字的本地地址
Socket类:
Socket(String host,int port)//创建一个流套接字并将其连接到指定主机上的指定端口号
Socket(InetAddress address,int port)//创建一个流套接字并将其连接到指定IP地址的指定端口号
常用的Socket方法
int getPort() |
该方法返回一个int类型对象,该对象是Socket对象与服务器端连接的端口号 |
InetAddress getLocalAddress() |
该方法用于获取Socket对象绑定的本地IP地址,并将IP地址封装成InetAddress类型的对象返回 |
void close() |
该方法用于关闭Socket连接,结束本次通信。在关闭socket之前,应将与socket相关的所有的输入/输出流全部关闭,这是因为一个良好的程序应该在执行完毕时释放所有的资源 |
InputStream getInputStream() |
该方法返回一个InputStream类型的输入流对象,如果该对象是由服务器端的Socket返回,就用于读取客户端发送的数据,反之,用于读取服务器端发送的数据 |
OutputStream getOutputStream() |
该方法返回一个OutputStream类型的输出流对象,如果该对象是由服务器端的Socket返回,就用于向客户端发送数据,反之,用于向服务器端发送数据 |
在Socket类的常用方法中,getInputStream()和getOutputStream()分别用于获取输入流和输出流。客户端和服务段建立连接后,数据是以IO流的形式进行交互。
java使用API思路:
1。帮助文档
2。看包
3。看类描述
4。看构造
5。看成员函数
Java梗概的更多相关文章
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- 专访 | 新浪架构师:0-5年Java工程师的职业规划如何做?
经历了2018年末的阵痛,大家都积攒着一股暗劲蠢蠢欲动. 3月初即将迎来2019年互联网行业换工作的大潮,技术工程师的升级换位对于一家互联网公司来说无疑是命脉般的存在——技术强则公司强! 如何做一个抢 ...
- Java - 33 Java Applet基础
Java Applet基础 applet是一种Java程序.它一般运行在支持Java的Web浏览器内.因为它有完整的Java API支持,所以applet是一个全功能的Java应用程序. 如下所示是独 ...
- 大话Java中的哈希(hash)结构(一)
o( ̄▽ ̄)d 小伙伴们在上网或者搞程序设计的时候,总是会听到关于“哈希(hash)”的一些东西.比如哈希算法.哈希表等等的名词,那么什么是hash呢? 一.相关概念 1.hash算法:一类特殊的算法 ...
- JAVA设计模式——第 5 章 工厂方法模式【Factory Method Pattern】(转)
女娲补天的故事大家都听说过吧,今天不说这个,说女娲创造人的故事,可不是“造人”的工作,这个词被现代人滥用了.这个故事是说,女娲在补了天后,下到凡间一看,哇塞,风景太优美了,天空是湛蓝的,水是清澈的,空 ...
- java之Map源代码浅析
Map是键值对.也是经常使用的数据结构. Map接口定义了map的基本行为.包含最核心的get和put操作,此接口的定义的方法见下图: JDK中有不同的的map实现,分别适用于不同的应用场景.如线程安 ...
- 关于Java 项目的思考总结
Java 项目思考总结 前言 今天是2017年3月25日,笔者已经毕业半年,工作经验一年. 正好有心思写这个总结. 持续开发 对于Java项目,我所接触的一般就是JavaWeb项目和 Java Jar ...
- Java匹马行天下之一顿操作猛如虎,框架作用知多少?
流行框架: 框架就是开发人员定义好的一套模板,程序员只需要往模板中添加响应的代码即可,填完代码,项目就完成了.所以框架存在的意义以及我们学习框架的目的就是想办法能够让程序员快速的完成整个项目的开发.理 ...
- 细数Java项目中用过的配置文件(ini 篇)
Java 菜鸟,会把可变的配置信息写死在代码里:Java 老鸟,会把可变的配置信息提取到配置文件中.坊间流传这么一句非科学的衡量标准,来评判程序员的级别. 那么,项目中的配置信息,你平时都是怎样来实现 ...
随机推荐
- 学习Spring-Data-Jpa(九)---注解式方法查询之@NamedQuery、@NamedNativeQuery
1.@NamedQuery.@NamedNativeQuery @NamedQuery与@NamedNativeQuery都是定义查询的一种形式,@NamedQuery使用的是JPQL,而@Named ...
- django运行报错TypeError: object supporting the buffer API required
运行django项目报错:TypeError: object supporting the buffer API required 解决方案: 将settings.py中数据库的密码改成字符串格式 源 ...
- Springboot之自定义配置
SpringBoot自定义配置 springboot在这里就不过多介绍了,大家都应该了解springboot零配置文件,所以配置信息都装配在属性文件(properties.yml.yaml)中,有时我 ...
- 在eclipse中新建java问题报错:The type XXX cannot be resolved. It is indirectly referenced from required .class files
在Eclipse中遇到The type XXX cannot be resolved. It is indirectly referenced from required .class files错误 ...
- 基于Linux(中标麒麟)上QT的环境搭建
最近由于公司需要,需要在中标麒麟上进行QT的二次开发,但是网上的资料很少,就算是有也基本都是其他的版本的Linux上的搭建.中标麒麟本身的资料也很好,而且还只能试用60天. 下面就介绍下我对此环境的搭 ...
- vue-echarts在vue中的使用
安装依赖: [win]npm install echarts vue-echarts [mac]sudo npm install echarts vue-echarts Vue-ECharts 默认在 ...
- 用luks方式对磁盘进行加密以及加密磁盘的自动挂载
1.关于luks加密 LUKS(Linux Unified Key Setup)为Linux硬盘分区加密提供了一种标准,它不仅能通用于不同的 Linux发行版本,还支持多用户/口令.因为它的加密密钥独 ...
- Cut 命令截取不同空格的string
eth0 Link encap:Ethernet HWaddr 00:0C:29:16:79:98 例如这一串中间空格数量不一样cut 是无法截取字段的.所以我们需要把他变成有规律的. 这 ...
- 【Kubernetes学习之一】Kubernetes 简介
环境 centos 7 一.概念和组件Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署.大规模可伸缩.应用容器化管理,简称k8s. 1.Master Kubernetes中的 ...
- 【07月02日】A股滚动市盈率PE最低排名
仅根据最新的市盈率计算公式进行排名,无法对未来的业绩做出预测. 方大集团(SZ000055) - 滚动市盈率PE:2.68 - 滚动市净率PB:1.2 - 滚动年化股息收益率:3.78% - 建筑产 ...