Java基础
文章平均质量分 61
java相关的基础笔记
言叶.
一个还需要努力的rookie
展开
-
反射
1.2、反射Java反射机制概述静态vs动态语言动态语言是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。function f() { var x = "var a = 3; var b = 5; alert(a + b)" exal(x);//执行x里的这段代码}主要动态语言:Object-C、C#、JavaScript、PHP、Python原创 2021-03-25 20:04:58 · 133 阅读 · 0 评论 -
注解
注解与反射1.1、注解Annotation是从JDK5.0开始引入的新技术.Annotation的作用:不是程序本身,可以对程序作出解释,(这一点和注释(comment)没什么区别)==可以被其他程序(比如:编译器等)读取。Annotation的格式:注解是以“@注释名”在代码中存在的,还可以添加一些参数值,例如:@SuppressWarnings(value=“unchecked”).Annotation在哪里使用?可以附加在package, class,原创 2021-03-25 20:01:24 · 95 阅读 · 0 评论 -
网络编程
网络编程1.1、概述地球村:你在天津,你有一个英国的朋友,说一句话,就能听到信件:计算机网络:计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。网络编程的目的:无线电台…传播交流信息,数据交换。通信想要达到这个效果需要什么:如何让准确的定位网络上的一台主机 192.168.16.124:端口, 定位上这个计算机上的某个资源找到了这个主句,如何原创 2021-03-25 19:52:26 · 566 阅读 · 2 评论 -
线程池
背景:经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创建销毁、实现重复利用。类似生活中的公共交通工具。好处:提高响应速度(减少了创建新线程的时间)降低资源消耗(重复利用线程池中线程,不需要每次都创建)便于线程管理(…)corePooISize:核心池的大小maximumPoolSize:最大线程数keepAliveTime:线程没有任务时最多保持多长时间后会终止.原创 2021-03-12 12:51:41 · 45 阅读 · 0 评论 -
线程协作 - 生产者消费者模式
生产者消费者模式(问题)应用场景:生产者消费者问题假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费。如果仓库中没有产品,则生产者将产品放入仓库,否则停止生产并等待,直到仓库中的产品被消费者取走为止.如果仓库中放有产品,则消费者可以将产品取走消费,否则停止消费并等待,直到仓库中再次放入产品为止。分析:这是一个线程同步问题,生产者和消费者共享同一个资源,并且生产者和消费者之间相互依赖,互为条件。对于生产者,没有生产产品之前,要通知消费者等待,而生产了产原创 2021-03-12 12:50:55 · 126 阅读 · 0 评论 -
Lock锁 以及 synchronized与lock的比较
Lock(锁)Java5.0开始,通过显式定义同步锁对对象来实现同步。同步锁使用Lock对象充当java.util.concurrrnt.locks.Lock接口是控制多个线程对共享资源进行访问的工具。锁提供了对共享资源的独立访问,每次只能由一个进程对Lock对象加锁,线程开始访问共享资源之前应先获得Lock对象ReentrantLock(可重入锁)类实现了Lock,它拥有与synchronized相同的并发性和内存语义,在实现线程安全的控制中,比较常用的是ReentrantLock,可以显示加锁、释原创 2021-03-12 12:49:29 · 204 阅读 · 0 评论 -
死锁以及死锁的避免方式
死锁多个线程各自占有一些公共资源,并且互相等待其他线程占有的资源才能运行,而导致两个或者多个线程都在等待对方释放资源,都通知执行的情形。某一个同步块同时拥有”两个以上对象的锁“时,就可能发生死锁的问题//死锁:多个线程互相抱着对方需要的资源,然后形成僵持public class DeadLock { public static void main(String[] args) { Makeup g1 = new Makeup(0, "灰姑娘"); Makeup原创 2021-03-12 12:48:39 · 90 阅读 · 0 评论 -
并发问题以及三大不安全案例
并发并发:同一个对象被多个线程同时操作现实生活中,我们会遇到 “同一个资源,多个人想要使用”的问题,比如,食堂排队打饭,每个人都想吃饭,最天然的解决方法就是,排队,一个个来处理多线程问题时,多个线程访问同一个对象,并且某些线程还想修改这个对象。这时候我们就需要线程同步。线程同步其实就是一种等待机制,多个需要同时方位此对象的进程进入这个对象的等待池形成队列,等待前面线程使用完毕没下一个线程再使用队列 和 锁线程同步需要队列+锁 解决安全性由于同一进程的多个线程共享同一块存储空间,在带来方便的同时原创 2021-03-12 12:47:45 · 759 阅读 · 0 评论 -
线程状态及一些方法的使用
线程状态方法说明setPriority(int newPriority)更改线程的优先级static void sleep(long millis)在指定的毫秒数内让当前正在执行的线程休眠void join()等待该线程终止static void yieId()暂停当前正在执行的线程对象,并执行其他的线程void interrupt()中断线程,别用这个方式booelan isAlive()测试线程是否处于活动状态停止线程不推荐使原创 2021-03-10 22:51:41 · 237 阅读 · 0 评论 -
Lambda表达式
λ表达式:避免匿名内部类定义过多其实质属于函数式编程的概念(params) ->expression[表达式](params) ->statement[表达式](params) ->{statements}a -> System.out.println(“I like lambda --> ” + a);new Thread( ()-> System.out.println("多线程学习。。。。。")).start();为什么要使用λ表达式避免匿原创 2021-03-10 22:48:19 · 113 阅读 · 0 评论 -
静态代理模式
一个结婚案例来理解静态代理模式//静态代理模式总结 //真实对象和代理对象都要实现同一个接口 //代理对象要代理真实角色//好处: //代理对象可以做很多真实对象做不了的事情 //真实对象就专注做自己的事情public class StaticProxy { public static void main(String[] args) { You you = new You(); //Thread 代理了new Runna.原创 2021-03-08 22:39:18 · 61 阅读 · 0 评论 -
Runnable接口的并发问题 以及龟兔赛跑案例
初识别并发问题//多个线程同时操作同一个对象// 买火车票的例子 //发现问题:多个线程操作同一个资源的情况下,线程不安全,数据紊乱。public class TestThread04 implements Runnable{ //票的总数 private int ticketNum = 10; @Override public void run() { while (true){ //模拟延时原创 2021-03-08 21:52:47 · 158 阅读 · 0 评论 -
Runnable接口的实现以及图片的下载
实现Runnable接口//创建线程方式2:实现Runnable接口 重写run()方法 执行线程需要丢入runnable接口实现类,调用start()方法。public class TestThread03 implements Runnable{ @Override public void run() { //run方法线程体 for (int i = 0; i < 20; i++) { System.out.printl原创 2021-03-08 21:51:37 · 85 阅读 · 0 评论 -
线程的创建以及下载图片的方法
线程的创建三种创建的方法//创建线程方式一:继承Thread方法,重写run()方法,调用start开启线程//总结:注意,线程开启不一定立即执行,由cpu调度执行public class TestThread01 extends Thread{ @Override public void run() { //run方法线程体 for (int i = 0; i < 20; i++) { System.out.prin原创 2021-03-08 17:23:34 · 154 阅读 · 0 评论 -
开始多线程的学习
多线程初始概念普通方法调用和多线程Process与Thread进程与程序,程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程则是执行程序的一次执行过程,它是一个动态的概念。是系统资源分配的单位通常在一个进程种可以包含若干个线程,当然一个进程种至少有一个线程,不然没有存在的意义。线程是CPU调度和执行的单位。注意:很多多线程是模拟出来的,真正的多线程是指有多个cpu,即多核,如服务器。如果是模拟出来的多线程,即在一个cpu的情况下,在同一个时间点,cpu只能原创 2021-03-08 17:09:37 · 83 阅读 · 0 评论 -
Object类
Object类Object类是所有java类的根基类,也就意味着所有的java对象都拥有Object类的属性和方法。如果在类的声明中未使用extends关键子指明其父类,则默认继承Object类。toString()方法Object类中定义有public String toString()方法,其返回值是String类型。Object类中toString发放的源码为:public String toString() { return getClass().getName() + "@原创 2021-04-15 10:17:57 · 784 阅读 · 0 评论 -
八大排序
排序1、冒泡排序直接贴代码:自己写的 //冒泡排序 /*1.比较数组中,两个相邻的元素,如果第一个数比第二个数 大,我们就交换他们的位置 */ //2.每一次比较,都会产生出一个最大,或者最小的数字; //3.下一轮则可以少一次排序! //4.依次循环,直到结束 public static void main(String[] args) { int[] a = {1,2,3,5,4}; a = sort(a);原创 2021-02-18 21:25:53 · 70 阅读 · 0 评论 -
IO和Properties联合使用
IO和Properties联合使用IO流:文件的读和写。Properties:是一个Map集合,key和value都是String类型(反射机制的时候会用到)IO+Properties的联合使用。非常好的设计理念:以后经常改变的数据,可以单独写到一个文件中,使用程序动态读取。将来只需要修改这个文件的内容,java代码不需要改动,不需要重新编译,服务器也不需要重启。就可以拿到动态的信息。类似以上机制的这种文件被称为配置文件。并且当配置文件中的内容格式是:key=value的时候,我们把原创 2020-10-10 16:47:02 · 206 阅读 · 2 评论 -
序列化和反序列化
序列化和反序列化序列化(Serialize):java对象存储到文件中。将java对象的状态保存下来的过程。反序列化(DeSerialize):将硬盘上的数据重新恢复到内存当中,恢复成java对象。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CkWjo1pN-1602297457693)(E:\学习\Topora\IO流\1602256441312.png)]java.io.NotSerializableException 异常Student对象不支持序列化原创 2020-10-10 10:38:47 · 107 阅读 · 0 评论 -
目录的复制
复制目录public class FileCopy02 { public static void main(String[] args) { File srcFile = new File("E:\\学习"); File destFile = new File("D:\\delete"); CopyAll(srcFile, destFile); } private static void CopyAll(File srcFile,原创 2020-10-09 15:14:05 · 433 阅读 · 0 评论 -
java.io.File
java.io.FileFile类和四大家族没有关系,所以File类不能完成文件的读和写。File对象代表文件和目录名的抽象表示形式(有可能是一个文件,有可能是一个路径)C:\Driver 这是一个File对象C:\Driver\lan\Realtek\Readme.txt也是File对象File类中需要掌握的常用方法boolean exists()判断该File是否存在 File file = new File("D:\\file"); //判断Fi原创 2020-10-08 16:27:16 · 77 阅读 · 0 评论 -
标准的字节输出流 & 如何用它写一篇日志文件
java.io.printStream标准的字节输出流。默认输出到控制台 public static void main(String[] args) throws Exception { //联合起来写 System.out.println("hello world"); //分开写 PrintStream ps = System.out; ps.println("hello zhangsan");原创 2020-10-08 16:26:48 · 254 阅读 · 0 评论 -
数据专属的字节流DataInputStream & DataOutputStream
java.io.DataOutputStream//创建数据专属的字节输出流 DataOutputStream dos = new DataOutputStream(new FileOutputStream("data")); //写数据 byte b = 100; int i = 200; long l = 1000L; boolean sex =true; short s = 300;原创 2020-10-08 16:25:26 · 371 阅读 · 0 评论 -
带有缓冲区的字符流BufferedReader&BufferWriter
java.io.BufferedReader带有缓冲区的字符输入流。使用这个流的时候不需要自定义char数组,或者说不需要自定义byte数组,自带缓冲public static void main(String[] args) throws IOException { //当一个流的构造方法中需要一个流的时候,这个被传进来的流叫做:节点流。 //外部负责包装的这个流,叫做包装流,也叫处理流。 //在当前这个程序中,FileReader就是一个节点流。Bu原创 2020-10-08 16:23:06 · 426 阅读 · 1 评论 -
字符流以及字符流的复制
java.io.FileReader文件字符输入流,只能读取普通文本。读取文本内容时,比较方便,快捷。 FileReader reader = null; try { //创建文件字符输入流 reader = new FileReader("temp.txt"); //开始读 char[] chars = new char[4]; int readCou原创 2020-10-08 16:21:48 · 188 阅读 · 0 评论 -
java.io.FileOutputStream与文件复制
java.io.FileOutputStream文件字节输出流,负责写从内存到硬盘。一种构造方法会清空源文件一种追加内容 FileOutputStream fos = null; try { //output.txt不存在时会自动创建! //这种方式谨慎使用,这种方式会先将原文件清空,然后重新写入。 //fos = new FileOutputStream("output.txt");原创 2020-10-08 16:21:01 · 233 阅读 · 0 评论 -
java.io.FileInputStream
java.io.FileInputStream文件字节输入流,万能的,任何类型的文件都可以采用这个流来读。字节的方式,完成输入的操作,完成读的操作(硬盘—>内存)常用的方法int read() FileInputStream fis = null; try { //创建文件字节输入流对象 //以下都是采用了:绝对路径 //文件路径:E:\学习\Java\代码相关\基础语法\s原创 2020-10-08 16:19:48 · 1281 阅读 · 0 评论 -
IO流
什么是IOI:InputO:Output通过IO可以完成硬盘文件的读和写。IO流的分类有多种分类方式:按照流的方向:以内存作为参照物往内存中去,叫做输入(Input),或者叫做写(read)。往内存中出来,叫做输出(Output),或者叫做写(Write)。按照读取数据方式:有的流是按照字节的方式读取数据,一次读取1个字节byte,等同于一次读取8个二进制位。这种流是万能的,什么类型的流都能读取。包括:文本文件,图片,声音文件,视图文件,视频文件等…这种流称为字节流字节流原创 2020-10-08 16:18:38 · 82 阅读 · 0 评论 -
Collections类
Collections类public class Cat /*implements Comparable<Cat>*/ {//类继承Comparable接口 private String name; public Cat(String name) { this.name = name; } public Cat() { } public String getName() { return name;原创 2020-10-07 10:39:28 · 89 阅读 · 0 评论 -
Map集合
Mapjava.util.Map接口中常用的方法Map和Collection没有继承关系Map集合以key和value的方式存储数据时:键值对key和value都是引用数据类型。key和value都是存储对象的内存地址。key起到主导的地位,value是key的附属品常用方法V put(K key, V value) 向Map集合中添加键值对V get(Object key) 通过key 获取 valuevoid clear() 清空Map集合bool原创 2020-10-07 10:38:33 · 151 阅读 · 2 评论 -
Set集合
SetHashSet初探Set<String> strs = new HashSet<>(); strs.add("asdf"); strs.add("asdf"); strs.add("asdf"); strs.add("asdf"); strs.add("fdas"); strs.add("jmjm"); strs.add("jnjn"); fo原创 2020-10-07 10:35:50 · 196 阅读 · 0 评论 -
泛型概述以及集合的增强for
泛型概述JDK5.0之后出现的新特性:泛型泛型这种语法机制,只在程序的编译阶段起作用,只是给编译器参考的。(运行阶段泛型没用)优点:集合中存储的元素类型统一了。从集合中取出的元素类型是泛型指定的类型,不需要进行大量的“向下转型”!缺点:导致集合中存储的元素缺乏多样性大多数业务中,集合中元素的类型还是统一的。所以这种泛型特性被大家所认可。只是方便了一种类型 如果需要调用子类特有的方法还是需要转型的。 List<Animal> list =原创 2020-10-07 10:33:43 · 75 阅读 · 0 评论 -
ArrayList LinkedList Vector的知识点
List概述List集合存储元素的特点:有序可重复有序:List集合中的元素有下标。从零开始,以1递增。可重复:存储一个1,还可以再存储List继承了Collection,也就会有自己自带的方法List中特有的常用的方法:void add(int index, Object element) 往列表指定位置添加元素使用不多,对ArraysList来说效率太低(涉及到元素的移动)//创建list类型的集合 List myList = new ArrayList()原创 2020-10-07 10:28:12 · 142 阅读 · 0 评论 -
集合的遍历/迭代**
集合遍历/迭代专题**注意:以下遍历/迭代方式,是所有Collection通用的一种方式。在Map集合中不能使用Collection c = new HashSet(); //后面的集合无所谓,主要看前面的Collection接口,怎么遍历/迭代。 c.add("abc"); c.add("def"); c.add(100); c.add(new Object()); //对集合Collection进行遍历/迭代原创 2020-10-07 10:24:16 · 227 阅读 · 0 评论 -
Collection中常用的方法
Collection中常用的方法Collection中能存放什么元素?没有使用泛型之前,Collection中可以存储Object的所有子类型。使用了泛型之后,Collection中只能存储某个具体的类型。(集合中不能直接存储基本数据类型,也不能存java对象,知识存储对象的内存地址)Collection中的常用方法boolean add(Object e) 向集合中添加元素Collection c = new ArrayList(); c.add(1200)原创 2020-10-07 10:23:12 · 354 阅读 · 0 评论 -
什么是集合
集合什么是集合什么是集合数组就是集合,集合实际上就是一个容器,可以容纳其他类型的数据。集合是一个容器,是一个载体,可以一次容纳多个对象。实际开发中,Java连接数据库,数据库当中有10条记录,当把这10个数据查询出来,在java中会把这10条数据封装成10Java对象,然后将10个Java对象放到某一个对象当中,将集合传到前端,然后遍历集合,将一个数据一个数据展现出来。 比如 ,装10个苹果的购物袋,运输物资的飞机就是一个集合集合的存储集合中不能直接存储基本数据类型,集合也不能直接存原创 2020-10-07 10:22:27 · 2187 阅读 · 0 评论 -
枚举类
Enumpublic class EnumTest01 { public static void main(String[] args) { boolean result = divide(1, 0); System.out.println(result ? 1 :0); } public static boolean divide(int a, int b){ try { int c = a / b;原创 2020-10-07 10:17:33 · 51 阅读 · 0 评论 -
数字相关类
数字相关类数字的格式化(了解)java.text.DecimalFormat 专门负责数字格式化的数字的格式符号含义#代表任意数字,代表千分位.代表小数点0代表不够时补零 /* ###,###.## 代表加入千分位,并保留两位小数 */ DecimalFormat df = new DecimalFormat("###,###.##"); String s = df.format原创 2020-10-07 10:16:59 · 82 阅读 · 0 评论 -
随机数Random
Random一个用于生成随机数的类具体用法 //创建随机数对象 Random random = new Random(); //随机产生一个int类型取值范围内的数字。 int num1 = random.nextInt(); System.out.println(num1); //产生一个[0-100]之间的随机数 int num2 = random.nextInt(101);原创 2020-08-13 17:04:36 · 14938 阅读 · 1 评论 -
日期相关类
日期相关类日期的获取以及回转java.util.DateDate() 获取系统的当前时间(精确到毫秒)java.text.SimpleDateFormat 专门负责日期格式化的SimpleDateFormat()public class DateTest01 { public static void main(String[] args) throws ParseException {//要抛出一个异常 //获取系统的当前时间(精确到毫秒) //直接原创 2020-08-10 09:49:54 · 101 阅读 · 0 评论