Java进阶
Remote_Li
这个作者很懒,什么都没留下…
展开
-
网络编程
网络编程1. 概述2. 网络通信的要素3. IP4. 端口5. 通信协议6. TCP7. UDP8. URL1. 概述计算机网络:是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统网络编程的目的:传播交流信息、数据交换、通信IP:端口 定位到这个计算机上的资源javaweb:网页编程 B/S网络编程: TCP/IP C/S2. 网络通信的要素IP和端口号原创 2021-04-14 13:51:32 · 99 阅读 · 0 评论 -
线程协作——生产者消费者问题
生产者消费者问题如果仓库中只能存放一件商品,生产者将生产出来的商品放进仓库,消费者将仓库中的商品取走如果仓库中没有商品,则生产者将商品放入仓库,否则停止生产并等待,知道仓库中的商品被消费者取走如果仓库中有商品,则消费者直接取走商品,否则停止消费并等待,直到仓库中再次放入商品方法名作用wait()表示线程一直等待,直到其它线程通知,与sleep不同,会释放锁wait(long timeout)指定等待的毫秒数notify()唤醒一个处于等待状态的线程..原创 2021-04-13 14:45:42 · 82 阅读 · 0 评论 -
死锁
多个线程各自占有一些共享资源,并且互相等到其他线程占有的资源才能运行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形称之为死锁某一个同步块同时拥有两个以上对象的锁时,就可能会发生死锁的问题产生死锁的四个必要条件:互斥条件:一个资源每次只能被一个进程使用请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系//死锁:多个线程互相抱着对方需..原创 2021-04-12 17:35:47 · 60 阅读 · 0 评论 -
线程同步
并发:同一个对象被多个线程同时操作处理多线程问题时,多个线程访问同一个对象,并且某些线程还想修改这个对象,这个时候就需要线程同步。线程同步实际上就是一种等待机制,多个需要同时访问此对象的线程进入这个对象的等待池形成队列,等待前面线程使用完毕,下一个线程再使用形成条件:队列+锁(synchronized)例1:线程不安全买票//有负数出现public class UnsafeBuyTicket { public static void main(String[] args) {..原创 2021-04-12 17:05:44 · 45 阅读 · 0 评论 -
线程状态
线程方法方法说明setPriority(int newPriority)更改线程的优先级static void sleep(long millis)在指定的毫秒数内让当前正在执行的线程休眠void join()等待该线程终止static void yield()暂停当前正在执行的线程对象,并执行其它线程void interrupt()中断线程,别用这个方式boolean isAlive()测试线程是否处于活动状态停止线程不...原创 2021-04-12 15:39:11 · 55 阅读 · 0 评论 -
Lambda表达式
避免了匿名内部类定义过多其实质属于函数式编程的概念(params) -> expression(params) -> statement(params) -> {statements}a->System.out.println("I like lambda --> " + a);new Thread(()->System.out.println("多线程")).start();函数式接口的定义:任何接口,如果只包含了唯一一个抽象方法..原创 2021-04-09 17:39:33 · 148 阅读 · 0 评论 -
静态代理
真实对象和代理对象都要实现同一个接口代理对象要代理真实角色好处代理对象可以做很多真实对象做不了的事情真实对象专注做自己的事情public class StaticProxy { public static void main(String[] args) { You you = new You(); WeddingCompany weddingCompany = new WeddingCompany(you); weddingCompany.HappyMarry(); }.原创 2021-04-09 16:44:17 · 59 阅读 · 0 评论 -
进程、线程和多线程
程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念进程则是执行程序的一次执行过程,是一个动态的概念,使系统分配资源的单位通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程。线程是CPU调度和执行的单位线程的创建:Thread class : 继承Thread类(重点)Runnable接口 : 实现Runnable接口(重点)Callable接口 : 实现Callable接口(了解)总结继承Thread类子类继承Thread类具有..原创 2021-04-09 16:17:19 · 55 阅读 · 0 评论 -
Properties
Properties:属性集合特点:存储属性名和属性值属性名和属性值都是字符串类型没有泛型和流有关Properties集合的使用//创建集合Properties p = new Properties();//添加数据p.setProperty("username","zhangsan");p.setProperty("age","20");System.out.println(p.toString());//遍历//keySet...//entrySet..原创 2021-04-08 18:34:56 · 51 阅读 · 0 评论 -
File类
概念:代表物理磁盘中的一个文件或者文件夹方法:createNewFile() //创建一个新文件mkdir() //创建一个新目录delete() //删除文件或空目录exists() //判断File对象所代表的对象是否存在getAbsolutePath() //获取文件的绝对路径getName() //取得名字getParent() //获取文件/目录所在的目录isDirectory() //是否是目录isFile() //是否是文件length() //获得文件的长度..原创 2021-04-08 18:12:41 · 46 阅读 · 0 评论 -
打印流和转换流
打印流PrintWriter封装了print()/println()方法,支持写入后换行支持数据原样打印//创建打印流PrintWriter pw = new PrintWriter("D:\\print.txt");//打印pw.println(97);pw.println(true);pw.println(3.14);pw.println('a');//关闭pw.close();/*运行完print.txt内容:97true3.14a*/转换流..原创 2021-04-08 16:15:48 · 58 阅读 · 0 评论 -
字符流
字符编码ISO-8859-1:收录了除ASCII外,还包括西欧、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号UTF-8:针对Unicode码表的可变长度字符编码GB2312:简体中文GBK:简体中文、扩充BIG5:台湾,繁体中文字符流的父类(抽象类):Reader:字符输入流public int read(){}public int read(char[] c){}public int read(char[] b, int off, int len){}Write..原创 2021-04-08 15:54:33 · 49 阅读 · 0 评论 -
对象流
对象流:ObjectOutputStream/ObjectInputStream增强了缓冲区功能增强了读写8种基本数据类型和字符串功能增强了读写对象的功能:readObject() //从流中读取一个对象writeObject(Object obj) //向流中写入一个对象使用流传输对象的过程称为序列化(写入)和反序列化(读取)序列化类必须要实现Serializable接口序列化类中对象属性要求实现Serializable接口序列化版本号ID,保证序列化的类和反序列化的类是同一.原创 2021-04-08 15:08:46 · 57 阅读 · 0 评论 -
字节流
字节流的父类(抽象类):InputStream:字节输入流public int read(){}public int read(byte[] b){}public int read(byte[] b, int off, int len){}OutputStream:字节输出流public void write(int n){}public void write(byte[] b){}public void write(byte[] b, int off, int len){}..原创 2021-04-08 14:24:43 · 58 阅读 · 0 评论 -
流
内存与存储设备之间传输数据的通道流的分类按方向(重点)输入流:将<存储设备>中的内容读取到<内存>中输出流:将<内存>中的内容写入到<存储设备>中按单位字节流:以字节为单位,可以读写所有数据字符流:以字符为单位,只能读写文本数据按功能节点流:具有实际传输数据的读写功能过滤流:在节点流的基础之上增强功能...原创 2021-04-08 11:29:01 · 65 阅读 · 0 评论 -
Collections工具类
概念:集合工具类,定义了除了存储以外的集合常用方法方法:public static void reverse(List<?> list) //反转集合中元素的顺序public static void shuffle(List<?> list) //随机重置集合元素的顺序public static void sort(List<?> list) //升序排序(元素类型必须实现Comparable接口)List<Integer> list = .原创 2021-04-08 10:58:16 · 49 阅读 · 0 评论 -
Map实现类
HashMap(重点):jdk1.2版本,线程不安全,运行效率快;允许用null作为key或是value存储结构:哈希表(数组+链表+红黑树)源码分析:hashMap初始容量大小:static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;hashMap的数组最大容量:static final int MAXIMUM_CAPACITY = 1 << 30;默认加载因子:static final int DEFAULT_LOA.原创 2021-04-08 10:27:27 · 89 阅读 · 0 评论 -
Map接口
特点:用于存储任意键值对(Key-Value)键:无序、无下标、不允许重复(唯一)值:无序、无下标、允许重复方法:V put(K key, V value) //将对象存入到集合中,关联键值。key重复则覆盖原值Object get(Object key) //根据键获取相应的值keySet< K > //返回所有的keyCollection< V > values() //返回包含所有值的Collection集合Set<Map.Entry<..原创 2021-04-07 17:31:50 · 53 阅读 · 0 评论 -
Set实现类
HashSet(重点):基于HashCode计算元素存放的位置当存入元素的哈希码相同时,会调用equals进行确认,如果结果为true,则拒绝后者存入存储结构:哈希表(数组+链表+红黑树)存储过程(重复的依据):根据hashcode计算保存的位置,如果此位置为空,则直接保存,否则执行第二步再执行equals方法,如果equals方法为true,则认为是重复,否则形成链表//创建集合HashSet<String> hashSet = new HashSet<S.原创 2021-04-07 16:07:46 · 426 阅读 · 0 评论 -
Set子接口
特点:无序、无下标、元素不可重复方法:全部继承自Collection中的方法Set<String> set = new Set<String>();//添加数据set.add("小米");set.add("苹果");set.add("华为");set.add("华为");System.out.println("数据个数:" + set.size()); //数据个数:3 不可重复System.out.println(set.toString()); //[苹果.原创 2021-04-06 18:38:53 · 95 阅读 · 0 评论 -
泛型
Java泛型是jdk1.5中引入的一个新特性,其本质是参数化类型,把类型作为参数传递常见形式有泛型类、泛型接口、泛型方法语法:<T,…> T称为类型占位符,表示一种引用类型好处:提高代码的重要性;防止类型转换异常,提高代码的安全性泛型类://泛型类:类名<T>,T是类型占位符,表示一种引用类型,如果编写多个使用逗号隔开public class MyGeneric<T>{ //使用泛型T(不能实例化) //创建变量 T t; .原创 2021-04-06 18:24:55 · 50 阅读 · 0 评论 -
List实现类
ArrayList(重点):数组结构实现,查询快,增删慢jdk1.2版本,运行效率快,线程不安全源码分析:默认容量大小:DEFAULT_CAPACITY = 10(如果没有向集合中添加任何元素容量为0,添加一个元素容量为10,每次扩容大小为原来的1.5倍)存放元素的数组:elementData实际的元素个数:size添加元素:add()//创建集合ArrayList arrayList = new ArrayList();//添加元素Student s1 = new S..原创 2021-04-06 17:31:22 · 63 阅读 · 0 评论 -
List子接口
特点:有序、有下标、元素可以重复方法:void add(int index, Object o) //在index位置插入对象oboolean addAll(int index, Collection c) //将一个集合中的元素添加到此集合中的index位置Object get(int index) //返回集合中指定位置的元素List subList(int fromIndex, int toIndex) //返回fromIndex和toIndex之间的集合元素//创建集合对象..原创 2021-04-06 17:29:50 · 78 阅读 · 0 评论 -
Collection接口
特点:代表一组任意类型的对象,无序、无下标、不可重复方法:boolean add(Object obj) //添加一个对象boolean addAll(Collection c) //将一个集合中的所有对象添加到此集合中void clear() //清空此集合中的所有对象boolean contains(Object o) //检查此集合中是否包含o对象boolean equals(Object o) //比较此集合是否与指定对象相等boolean isEmpty() //判断此集合..原创 2021-04-06 17:28:42 · 39 阅读 · 0 评论 -
集合
对象的容器,实现了对多个对象进行操作的常用方法,可实现数组的功能与数组的区别:数组长度固定,集合长度不固定数组可以存储基本类型和引用类型,集合只能存储引用类型位置:java.util.*...原创 2021-04-06 17:27:37 · 61 阅读 · 0 评论 -
System类
System系统类,主要用于获取系统的属性数据好其他操作,构造方法私有的方法名说明static void arraycopy(…)复制数组static long currentTimeMillis();获取当前系统时间,返回值是毫秒数static void gc();建议jvm赶快启动垃圾回收器回收垃圾static void exit(int status);退出jvm,如果参数是0表示正常退出,否则异常退出//arraycopy(源数组,源数组位置..原创 2021-04-05 16:46:03 · 47 阅读 · 0 评论 -
SimpleDateFormat类
SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的工具类进行格式化(日期 -> 文本)、解析(文本 -> 日期)常用的时间模式字母字母日期y年M月d日H小时m分钟s秒S毫秒//创建SimpleDateFormat对象SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//创建DateDa..原创 2021-04-05 16:45:26 · 40 阅读 · 0 评论 -
Calendar类
Calendar提供了获取或设置各种日历字段的方法构造方法protected Calendar():由于修饰符是protected,所以无法直接创建该对象其他方法方法名说明static Calendar getInstance()使用默认时区和区域获取日历void set(int year,int month,int date,int hourofday,int minute,int second)设置日历的年、月、日、时、分、秒int get(i..原创 2021-04-05 16:44:37 · 89 阅读 · 0 评论 -
Date类
Date表示特定的瞬间,精确到毫秒。Date类中大部分方法都已经被Calendar类中的方法所取代//今天的时间Date date1 = new Date();System.out.println(date1.toString());System.out.println(date1.tocLocaleString());//昨天的时间Date date2 = new Date(date1.getTime()-(60*60*21*1000));System.out.println(date.原创 2021-04-05 16:43:49 · 77 阅读 · 0 评论 -
BigDecimal类
精度更高,double和float都是存储的近似值位置:java.math包中作用:精确计算浮点数创建方式:BigDecimal bd = new BigDecimal(“1.0”);double d1 = 1.0;double d2 = 0.9;System.out.println(d1-d2); //0.09999999999999998//BigDecimal,大的浮点数精确计算BigDecimal bd1 = new BigDecimal("1.0");BigDe..原创 2021-04-05 16:43:06 · 55 阅读 · 0 评论 -
String类
字符串是常量,创建之后不可改变字符串字面值存储在字符串池中,可以共享String name = "hello"; //"hello"常量存在字符串池中name = "zhangsan"; //给字符串赋值时,并没有修改数据,而是重新开辟了一个空间,此时"hello"为垃圾String name2 = "zhangsan"; //"zhangsan"已存在,即直接共享给name2System.out.println(name == name2); //true//另外一种字符串创建方式St.原创 2021-04-05 16:41:37 · 58 阅读 · 1 评论 -
包装类
基本数据类型所对应的引用数据类型Object可统一所有的数据,包装类的默认值是null基本数据类型包装类型byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublebooleanBooleancharCharacter类型转换与装箱、拆箱基本数据类型转换成引用数据类型称之为装箱引用数据类型转换成基本数据类型称之为拆箱//jdk1.5之前//..原创 2021-04-03 17:49:57 · 48 阅读 · 0 评论 -
Object类
超类、基类,所有类直接或间接父类,位于继承树的最顶层getClass()方法public final Class<?> getClass(){}返回引用中存储的实际对象类型通常用于判断两个引用中实际存储对象类型是否一致public class Student{ private String name; private int age; public Student(){} public Student(String name.原创 2021-04-03 10:52:48 · 76 阅读 · 0 评论 -
异常
异常分类检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的,在编译时不能被简单忽略运行时异常:运行时异常是最可能被程序员避免的异常,在编译时可以被忽略错误:错误不是异常,而是脱离程序员控制的问题,错误在代码中通常被忽略,在编译时检查不到异常的体系结构Java把异常当作对象来处理,并定义了一个基类java.lang.Throwable作为所有异常的超类在Java API中已经定义了许多异常类,这些异常类分为两大类,错误Error和异常Exception..原创 2021-04-03 10:48:22 · 72 阅读 · 0 评论