![](https://img-blog.csdnimg.cn/20190613075440693.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JAVA基础
JAVA基础笔记
兴帅_
我的博客大多是我学习过程中笔记部分中整理出来的,
以专栏的方式存放知识点,参考了很多大牛的资料。没有那么专业。没有个人情感。有些部分已经找不到出自何方。但我尊重知识整理的先驱们。salute!
展开
-
JAVA基础(反射概述)
1,反射概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意一个方法和属性; 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 要想解剖一个类,必须先要获取到该类的字节码文件对象。 而解剖使用的就是Class类中的方法,所以先要获取到每一个字节码文件对应...原创 2019-07-15 15:40:53 · 136 阅读 · 0 评论 -
JAVA基础(反射类加载器的概述和分类)
1,类加载器的概述 负责将.class文件加载到内存中,并为之生成对应的Class对象。虽然我们不需要关心类加载机制,但是了解这个机制我们就能更好的理解程序的运行。 2,类加载器的分类 Bootstrap ClassLoader 根类加载器 Extension ClassLoader 扩展类加载器 Sysetm ClassLoader 系统类加载器 ...原创 2019-07-15 15:40:21 · 126 阅读 · 0 评论 -
JAVA基础(反射类的加载概述和加载时机)
1,类的加载概述 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。 【1】加载 就是指将class文件读入内存,并为之创建一个Class对象。任何类被使用时系统都会建立一个Class对象。 【2】连接 验证 是否有正确的内部结构,并和其他类协调一致 准备 负责为类的静态成员分配内存,并设置...原创 2019-07-15 15:39:45 · 142 阅读 · 0 评论 -
JAVA基础(网络编程上传文件)
1,客户端向服务器上传文件import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintStream;impo...原创 2019-07-15 11:22:13 · 169 阅读 · 0 评论 -
JAVA基础(字符翻转)
1,字符翻转 客户端向服务器写字符串(键盘录入),服务器(多线程)将字符串反转后写回,客户端再次读取到是反转后的字符串 客户端:import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintStream;...原创 2019-07-15 11:21:07 · 337 阅读 · 0 评论 -
JAVA基础(TCP协议)
1,TCP协议【1】客户端(Android) 创建Socket连接服务端(指定ip地址,端口号)通过ip地址找对应的服务器 调用Socket的getInputStream()和getOutputStream()方法获取和服务端相连的IO流 输入流可以读取服务端输出流写出的数据 输出流可以写出数据到服务端的输入流 【2】服务端(JAVAEE) ...原创 2019-07-15 11:19:18 · 1336 阅读 · 0 评论 -
JAVA基础(UDP传输)
1,UDP传输【1】发送Send 创建DatagramSocket, 随机端口号 创建DatagramPacket, 指定数据, 长度, 地址, 端口 使用DatagramSocket发送DatagramPacket 关闭DatagramSocket 【2】接收Receive 创建DatagramSocket, 指定端口号 创建Da...原创 2019-07-15 11:14:21 · 5275 阅读 · 0 评论 -
JAVA基础(Socket通信)
1,Socket通信原理图解2,Socket套接字概述: 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。 通信的两端都有Socket。 网络通信其实就是Socket间的通信。 数据在两个Socket间通过IO流传输。 Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IP和...原创 2019-07-15 11:11:57 · 183 阅读 · 0 评论 -
JAVA基础(网络编程概述)
1,网络编程概述【1】计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 【2】网络编程 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。 2,网络编程三要素之IP概述 每个设备在网络中的唯一标识 每台...原创 2019-07-15 11:10:24 · 173 阅读 · 0 评论 -
JAVA基础(多线程程序实现的方式3)
1,多线程的实现方式:import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java....原创 2019-07-15 11:09:23 · 97 阅读 · 0 评论 -
JAVA基础(线程池的概述和使用)
1,线程池概述 程序启动一个新线程成本是比较高的,因为它涉及到要与操作系统进行交互。而使用线程池可以很好的提高性能,尤其是当程序中要创建大量生存期很短的线程时,更应该考虑使用线程池。线程池里的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态,等待下一个对象来使用。在JDK5之前,我们必须手动实现自己的线程池,从JDK5开始,Java内置支持线程池 2,内置线程池的...原创 2019-07-12 10:31:53 · 140 阅读 · 0 评论 -
JAVA基础(线程的五种状态))
1,线程的生命周期2,对应调用的顺序:新建,就绪,运行,阻塞,死亡原创 2019-07-12 10:29:52 · 108 阅读 · 0 评论 -
JAVA基础(线程组的概述和使用)
1,线程组概述【1】Java中使用ThreadGroup来表示线程组,它可以对一批线程进行分类管理,Java允许程序直接对线程组进行控制。【2】默认情况下,所有的线程都属于主线程组。 public final ThreadGroup getThreadGroup()//通过线程对象获取他所属于的组 public final String getName()//通过线程组对象...原创 2019-07-12 10:10:02 · 198 阅读 · 0 评论 -
JAVA基础(多线程JDK1.5的新特性互斥锁)
1,JDK1.5的新特性互斥锁【1】同步 使用ReentrantLock类的lock()和unlock()方法进行同步获取锁,和释放锁 【2】通信 使用ReentrantLock类的newCondition()方法可以获取Condition对象condition c1 = r.newc...原创 2019-07-12 09:55:47 · 131 阅读 · 0 评论 -
JAVA基础(多线程三个或三个以上间的线程通信)
1,多个线程通信的问题 notify()方法是随机唤醒一个线程 notifyAll()方法是唤醒所有线程 JDK5之前无法唤醒指定的一个线程 如果多个线程之间通信, 需要使用notifyAll()通知所有线程, 用while来反复判断条件 public class Demo2_NotifyAll {/*** @p...原创 2019-07-12 09:54:59 · 250 阅读 · 0 评论 -
JAVA基础(多线程两个线程间的通信)
1,什么时候需要通信 多个线程并发执行时, 在默认情况下CPU是随机切换线程的 如果我们希望他们有规律的执行, 就可以使用通信, 例如每个线程执行一次打印 2,怎么通信 如果希望线程等待, 就调用wait() 如果希望唤醒等待的线程, 就调用notify(); 这两个方法必须在同步代码中执行, 并且使用同步锁对象来调用 3,案例p...原创 2019-07-12 09:54:03 · 287 阅读 · 0 评论 -
JAVA基础(Timer)
1,Timer类:计时器(在指定时间,安排指定任务) 此类管理一个过期的计时器通知列表 2,常见方法:3,创建一个时间任务import java.util.Date;import java.util.Timer;import java.util.TimerTask;public class Demo3_Timer {...原创 2019-07-12 09:52:54 · 115 阅读 · 0 评论 -
JAVA基础(Runtime类-定时关机)
1,Runtime类 是一个单例类 2,常见方法:3,定时关机import java.io.IOException;public class Demo2_Runtime {/*** @param args* @throws IOException*/public static void ...原创 2019-07-12 09:48:14 · 249 阅读 · 0 评论 -
JAVA基础(多线程死锁)
1,死锁 多线程同步的时候, 如果同步代码嵌套, 使用相同锁, 就有可能出现死锁 尽量不要嵌套使用 public class Demo5_DeadLock {private static String s1 = "筷子左";private static String s2 = "筷子右";public static void main(St...原创 2019-07-12 09:47:34 · 142 阅读 · 0 评论 -
JAVA基础(多线程火车站卖票案例)
1,火车站卖票的例子用实现Runnable接口,public class Demo4_Ticket {/*** @param args* 火车站卖票的例子用实现Runnable接口*/public static void main(String[] args) {MyTicket mt = new ...原创 2019-07-12 09:46:13 · 339 阅读 · 0 评论 -
JAVA基础(线程安全问题)
1,线程安全问题 多线程并发操作同一数据时, 就有可能出现线程安全问题 2,解决: 使用同步技术可以解决这种问题, 把操作数据的代码进行同步, 不要多个线程一起操作 public class Demo3_Ticket {/*** 需求:铁路售票,一共100张,通过四个窗口卖完.*/public static void ...原创 2019-07-11 11:08:20 · 127 阅读 · 0 评论 -
JAVA基础(同步方法)
1,同步方法, 使用synchronized关键字修饰一个方法, 该方法中所有的代码都是同步的 public class Demo2_Synchronized {/*** @param args* 同步代码块*/public static void main(String[] args) {...原创 2019-07-11 11:07:36 · 116 阅读 · 0 评论 -
JAVA基础(同步代码块)
1.什么情况下需要同步 当多线程并发, 有多段代码同时执行时, 我们希望某一段代码执行的过程中CPU不要切换到其他线程工作. 这时就需要同步. 如果两段代码是同步的, 那么同一时间只能执行一段, 在一段代码没执行结束之前, 不会执行另外一段代码. 2,同步代码块 使用synchronized关键字加上一个锁对象来定义一段代码, 这就叫同步代码块 多个同步代...原创 2019-07-11 11:04:44 · 497 阅读 · 0 评论 -
JAVA基础(多线程设置线程的优先级)
1,设置线程的优先级 setPriority()设置线程的优先级 public class Demo7_Priority {public static void main(String[] args) {Thread t1 = new Thread(){public void run() {...原创 2019-07-11 11:02:47 · 476 阅读 · 1 评论 -
JAVA基础(礼让线程)
1,礼让线程 yield让出cpu public class Demo6_Yield {/*** yield让出cpu礼让线程*/public static void main(String[] args) {new MyThread().start();new MyThread()....原创 2019-07-11 11:00:56 · 211 阅读 · 0 评论 -
JAVA基础(加入线程)
1,加入线程, join(), 当前线程暂停, 等待指定的线程执行结束后, 当前线程再继续 join(int), 可以等待指定的毫秒之后继续 public class Demo5_Join {/*** @param args* join(), 当前线程暂停, 等待指定的线程执行结束后, 当前线程再继续*/p...原创 2019-07-11 10:57:16 · 160 阅读 · 0 评论 -
JAVA基础(守护线程)
1,守护线程 setDaemon(), 设置一个线程为守护线程, 该线程不会单独执行, 当其他非守护线程都执行结束后, 自动退出 public class Demo4_Daemon {public static void main(String[] args) {Thread t1 = new Thread() {publ...原创 2019-07-11 10:43:42 · 114 阅读 · 0 评论 -
JAVA基础(休眠线程)
1,休眠线程 Thread.sleep(毫秒,纳秒), 控制当前线程休眠若干毫秒 1秒= 1000毫秒 1秒 = 1000 * 1000 * 1000纳秒 1000000000 public class Demo3_Sleep {public static void main(String[] args) throws InterruptedExcep...原创 2019-07-11 10:43:08 · 2343 阅读 · 0 评论 -
JAVA基础(多线程获取当前线程的对象)
1,获取当前线程的对象 Thread.currentThread(), 主线程也可以获取 public class Demo2_CurrentThread {public static void main(String[] args) {new Thread() {public void run() {...原创 2019-07-11 10:27:54 · 1030 阅读 · 0 评论 -
JAVA基础(多线程获取名字和设置名字)
1,获取名字 通过getName()方法获取线程对象的名字 2,设置名字 通过setName构造函数可以传入String类型的名字 通过setName(String)方法可以设置线程对象的名字 public class Demo1_Name {public static void main(String[] args) {...原创 2019-07-11 10:27:21 · 1124 阅读 · 0 评论 -
JAVA基础(匿名内部类实现线程)
1,匿名内部类实现线程的两种方式,public class Demo4_Thread {public static void main(String[] args) {new Thread() {//1,继承Thread类public void run(...原创 2019-07-09 16:00:55 · 685 阅读 · 0 评论 -
JAVA基础(多线程实现方式)
1,多线程程序实现的方式1,【1】继承Thread 定义类继承Thread 重写run方法 把新线程要做的事写在run方法中 创建线程对象 开启新线程, 内部会自动执行run方法 public class Demo2_Thread {public static void main(String[] args) {...原创 2019-07-09 16:00:13 · 160 阅读 · 0 评论 -
JAVA基础(多线程概述)
1,线程的概述:【1】线程 是程序中的执行线程。Java 虚拟机允许应用程序并发地运行多个执行线程。 每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。每个线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建一个新 Thread 对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当且仅当创建线程是守护线程时,新线程才是守护程序。当 Java 虚拟...原创 2019-07-09 15:29:15 · 131 阅读 · 0 评论 -
JAVA基础(多线程引入)
1,什么是线程 线程是程序执行的一条路径, 一个进程中可以包含多条线程 多线程并发执行可以提高程序的效率, 可以同时完成多项工作 是程序中的执行线程。Java 虚拟机允许应用程序并发地运行多个执行线程。 2,多线程的应用场景 红蜘蛛同时共享屏幕给多个电脑 迅雷开启多条线程一起下载 QQ同时和多个人一起视频 服务器同时处理多个客户端请...原创 2019-07-09 15:28:19 · 112 阅读 · 0 评论 -
JAVA基础(Properties)
1,Properties的概述 Properties 类表示了一个持久的属性集。 Properties 可保存在流中或从流中加载。 属性列表中每个键及其对应值都是一个字符串。 Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值对的形式来保存属性集。不过Properties有特殊的地方,就是它的键和值都是字符串类型。 ...原创 2019-07-09 15:26:11 · 186 阅读 · 0 评论 -
JAVA基础(键盘录入的两种方法)
1,两种方式实现键盘录入 BufferedReader的readLine方法。 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 2,Scannerimport java.io.BufferedReader;import java.io.IOException;...原创 2019-07-09 15:23:53 · 1814 阅读 · 0 评论 -
JAVA基础(标准输入流)
1,什么是标准输入输出流( System.in是InputStream, 标准输入流, 默认可以从键盘输入读取字节数据 System.out是PrintStream, 标准输出流, 默认可以向Console中输出字符和字节数据 2,修改标准输入输出流 修改输入流: System.setIn(InputStream) 修改输出流: System.setOut...原创 2019-07-09 14:59:49 · 1645 阅读 · 0 评论 -
JAVA基础(打印流)
1,PrintStream打印流: 该流可以很方便的将对象的toString()结果输出, 并且自动加上换行, 而且可以使用自动刷出的模式 System.out就是一个PrintStream, 其默认向控制台输出信息 PrintStream ps = System.out;ps.println(97);...原创 2019-07-09 14:57:15 · 170 阅读 · 0 评论 -
JAVA基础(常用流数据输入输出流)
1,什么是数据输入输出流 DataInputStream, DataOutputStream可以按照基本数据类型大小读写数据 例如按Long大小写出一个数字, 写出时该数据占8字节. 读取的时候也可以按照Long类型读取, 一次读取8个字节. 2,使用方式import java.io.DataInputStream;import java.io.DataOutp...原创 2019-07-09 14:56:03 · 161 阅读 · 0 评论 -
JAVA基础(常用流序列号)
1,IO流添加id号【1】注意 要写出的对象必须实现Serializable接口才能被序列化 不用必须加id号报错的时候会有明显的提示 import java.io.Serializable;public class Person implements Serializable {private static final long serialVe...原创 2019-07-09 14:54:53 · 331 阅读 · 0 评论