java反射03-查看方法修饰符
修饰符通过反射可以获取类的修饰符,主要方法: Class.getModifiers() 返回一个用于描述Field、Method和Constructor的修饰符的整形数值,该数值代表的含义可通过Modifier这个类分析。Modifier 类它提供了有关Field、Method和Constructor等的访问修饰符的信息,主要的方法有:toString(int modifiers);返回: 整形数值modifiers代表的修饰符的字符串;
查看类修饰符使用 String.class 来验证一下:
123456789101112131415161718import java.lang.reflect.Modifier;/** * 获取类的修改符 * * @author liu kai * @since 2015-11-23 14:48 */public class ModifierTest { public static void main(String[] args) { Class cl = String.class; Strin ...
java反射02-使用Class对象
简述使用反射万事第一步,获取 Class 类。获取Class对象的方式:
Class.forName()
Class.class
Class.getClass()
获取Class对象如何取得操作类的Class对象,常用的有三种方式:使用Class的静态方法来获取一个要被反射的对象。
1.调用Class.forName();
123public void test() { Class cls = Class.forName("com.test.Person");}
2.使用类的.class字节文件
123public void test() { Class<?> cls = String.class}
3.调用对象的getClass方法
1234public void test() { String str = "abc"; Class<?> cls = str.getClass();}
验证相同类型class是一个对象代码验证不同 class 获 ...
java反射01-简述
简述理解意义:反射的意义是在于改变程序运行时的状态。比如我在程序没运行之前,我不知道我需要什么对象,但是我想在程序运行的过程中去动态的说我想要什么东西,这时可以通过反射去实现。通过反射可以调用运行时类的指定方法和属性。任何一个类对反射来说结构都是暴露的。java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。
反射需要四个类实现一些常用的功能:
Class
Field
Medthod
Constrator
使用反射机制要遵循以下三步:
获取要操作的类的Class对象
通过拿到这个Class对象,就可以拿到类的属性和方法
可以通过上面拿到的属性和方法去操作属性和方法
反射有什么用通过反射API可以获取任何,是任何在运行时的对象和属性。
反射的功能:
构建对象
在运行时操作对象属性、方法、构造器
生成动态代理
Class 对象使用反射第一步,获取Class对象。拿到Class对象才能接着往下操作。Java 类在运行的时候,某个类 ...
socket02 ServerSocket 服务端与客户端连接
ServerSocket 服务端是运行的服务端的ServerSocket。socket方式是点对点的属于TCP。
建立服务端频骤
建立端口并指定服务器IP
使用 accpet 方法接收连接,阻塞式方法
使用流通信
代码实现
建立服务器,建立通道对象
接收数据
发送数据
阻塞式的意思是,如果没有连接,就会一直等待。所以在while里面是一直处于等待状态。
1234567891011121314151617181920212223242526272829303132333435363738import java.io.BufferedWriter;import java.io.DataInputStream;import java.io.IOException;import java.io.OutputStreamWriter;import java.net.ServerSocket;import java.net.Socket;public class SocketServer { public static void main(String[] args) th ...
socket01 原理和简述
原理网络之间的通信,说穿了还是网络流在通信。客户端跟服务器之间建立的管道,就叫scoket。
套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。
网络通信的三要素
IP
端口
协议
网络编程也需要输入流和输出流进行交互,交互步骤:
使用ServerSocket 指定端口,地址为本机。
使用accept 接收客户端连接。
发送数据(流)。
注意:1024以下端口保留给系统。
TCP/UDP
TCP:像打电话,双向的,建产连接的。数据安全,不易丢失。点对点。
UDP:像发知信,单向的,非面向连接。数据不安全,易丢失。
scoket 的由来Socket 最初是加利福尼亚大学Berkeley分校为Unix系统开发的网络通信接口。后来随着TCP/IP网络的发展,Socket成为最为通用的应用程序接口,也是在Internet上进行应用开发最为通用的API。
Windows系统流行起来之后,由 Microsoft 联合 ...
juc10-线程中断interrupt
interrupt作用
1.对运行中的线程,仅设置了一个停止的标记,但程序照常运行。2.对阻塞中的线程,该线程会抛出InterruptedException异常。
interrupt方法用于中断线程。调用该方法的线程的状态为将被置为"中断"状态。interrupt方法只能打上一个停止标记(改变状态),不能终止一个正在运行的线程,还需要加入一个判断才停止线程。
interrupt方法的使用效果并不像 for+break 语句那样,马上就停止循环。调用interrupt方法是在当前线程中打了一个停止标志,并不是真的停止线程。
三个主要API1.interrupt() :中间当前线程,实际并不是马上执行;2.interrupted(): 获取前线程的interrupt状态,关置重置interrupt状态为false,即未打interrupt状态 ;3.isInterrupted(): 获取前线程的interrupt状态,不重置;
看个小例子,子线程中断自己
12345678910111213141516171819202122232425262728/** * 主动中断线 ...
juc08-守护线程
守护线程所谓守护线程可以理解为后台线程,用户线程理解为前台线程,那么后台线程依赖前台线程。当前台线程远行结束后,后台线程自动结束,不管后台线程是不是无限循环。守护线程地位比用户线程底,用户线程退出后,就会随JVM线程退出,而不管工作是否完成!!!
java中有两种线程:
用户线程(User Thread)
守护线程(Daemon Thread)比如GC垃圾回收线程,这个线程具有最低的优先级。
两者几乎没有区别,唯一的不同之处就在于虚拟机的离开:
如果用户线程全部退出离开,只剩下守护线程,虚拟机就会退出。如果还有至少一个用户线程,那么虚拟机就不会退出。
别急大白话在下面。
守护线程有什么用守护线程的目的是守护其他线程、守护其他线程、守护其他线程!!!守护线程的目的就是:为其他线程服务的线程。所以守护线程需要有被守护的线程!!!
说这么多,跟普通线程到底有什么区别,不还是一个用户创建的线程?区别在于:
用户线程退出,守护线程立即结束这个和普通线程可不一样,一般情况下,普通线程在main线程结整后,依然会运行直到任务结束,可以自行实验。守护线程不一样,只要用户线程退出,就立马退出,不管 ...
juc07 创建线程
创建线程JAVA中线程被封装成Thread对象。JDK API中有对Thread的说明,连创建方式都有。自定义线程有两种方式:
继承Thread
实现Runable接口
从打印结果是否是不同线程运行来验证多线程执行。主线程代码在main方法中,自定义线程方法代码在run方法中。
两种创建方式的区别:
Thread 的代码是存在子类当中;
Runable方式的代码是的实现接口的子类当中,还避免了单继承的问题。
一、继承 Thread 方式这种方式最简单,需要三个步骤:
继承 Thread 类
重写 run 方法,run方法要看成一个入口点。
调用 start 方法来执行自定义线程
实现代码:
123456789101112131415161718192021public class TestThread extends Thread { //1.继承Thread @Override public void run() { //2.重写run方法 //super.run(); for (int i = 0; i < 100; i ...
juc06-BLOCKED状态
前言java线程模型中有5种线程状态。五种状态之间可以进行转换。
强调一下 BLOCKED 状态跟 I/O 的阻塞是不同的,它不是一般意义上的阻塞,而是特指被 synchronized 块阻塞,即是跟线程同步有关的一个状态。
BLOCKED(阻塞)简单定义为:
A thread that is blocked waiting for a monitor lock is in this state.一个正在阻塞等待一个监视器锁的线程处于这一状态。
两种阻塞的情况:
第一种:
A thread in the blocked state is waiting for a monitor lock to enter a synchronized block/method.一个处于 blocked 状态的线程正在等待一个监视器锁以进入一个同步的块或方法。
第二种:
A thread in the blocked state is waiting for a monitor lock to reenter a synchronized block/method after calling ...
并发线程和进程的区别
在开销方面每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。
所处环境在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)
内存分配方面系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源。
包含关系没有线程的进程可以看做是单线程的,如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。
进程示例12345678910111213141516import java.io.IOException;public class ProcessDemo { //在Java中如何开启一个进程:运行记事本程序 public static void mai ...