`
skycity220
  • 浏览: 18668 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

JAVA学习io,net,线程

阅读更多
方法覆盖复习:修饰符(相同或更宽),返回值(相同或是父类返回类型的子类型),方法
名相同,参数列表相同,抛出的异常(不能抛出比父类方法更多的异常)
反射: java.lang.Class
        java.lang.reflect.Field
        java.lang.reflect.Method
        java.lang.reflect.Constructor
        java.lang.reflect.Array
//                   1.得到类对象
                     Class c = Class.forName("Student");
//                   2.通过类对象产生对象(调用无参的构造方法)
                     //Object obj = c.newInstance();
                     2.a 通过类对象找到相应的Constructor对象
//
                     Constructor cons =c.getConstructor(String.class,int.class);
                     2.b 通过Constructor对象得到对象
//
                     Object obj = cons.newInstance("zhangsan",20);
                     System.out.println(obj);
//                   3.通过类对象找到相应的Method对象
                     Method m1 = c.getDeclaredMethod("getAge");
//                   4.调用对象的方法。
                     Object age = m1.invoke(obj);
                     System.out.println(age);
                     Method m2 = c.getDeclaredMethod("study", String.class);
                     m2.invoke(obj, "corejava");
标注:
@Override   标注     给编译器看
@SuppressWarnings("unused")
@SuppressWarnings("unchecked")
@Deprecated过时,不推荐使用。。不删除是为了向后兼容
定义自己的标注:
  public @interface 标注名称{
           类型    属性()        default    默认值;
}
元数据:数据的数据
元标注:标注的标注
@Author(@Name(first=”Tony”,last=”Tan”))
标注属性类型 只能是8种基本类型,String.枚举类型,Class,注释标注类型,对应的一维
数组
import java.lang.annotation.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.CONSTRUCTOR;
@Retention(value=RUNTIME)//这样设置才能使用反射方式探查出来
@Target(value=)
public @interface Test {
                    String value()   default "No Parameter";
}
1定义注释:MyTest         String author String date
import java.lang.annotation.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import static java.lang.annotation.ElementType.METHOD;
@Retention(value=RUNTIME)
@Target(value=)
public @interface MyTest {
                    String author() default "itemMgr";
                    String date() default "2009-2-16";
}
2写一个类,使用MyTest注释                @MyTest(author="itemMgr",date="2009-2-10")
3通过反射调用某人写的方法;
          Class c = Class.forName("Util");
          Object obj = c.newInstance();
          //得到所有方法
          Method[] mm = c.getDeclaredMethods();
          for(Method m:mm){
          //判断方法是否有Test注释
          boolean b = m.isAnnotationPresent(Test.class);
          if(b){
           //得到注释
          Test t = m.getAnnotation(Test.class);
          //通过注释得到注释中的属性
          String param = t.value();
          //调用方法
          m.invoke(obj, param);
                                         }
这里实现了类似Junit的测试框架。当标注为test before after 等等,会相应调用方法
来测试类
线程:宏观上并行,微观上串行
第一种方式:extends Thread 继承   覆盖run()方法 .start()启动一个线程
currentThread() 当前线程
优先级只是一个参考。不要使用优先级来控制线程
第二种 方法:implements Runnable接口。实现run()方法
Thread(Runnable)
eclipse常用快捷键:
syso main   Alt+/ 主方法,打印语句
ctrl+1  错误提示操作
ctrl+/ 注释
ctrl+d删一行
ctrl+-> <- 切换编辑工作区
加载配置文件:java.util.Properties
          .load(InputStream)
          .getProperty(String key)
反射:
          File[] fs = cz.getDeclaredFields();
          for(Field f:fs){//得到属性名字          根据完全封装规范转换得到 get/set 方法名:
                     String attributeName = f.getName();
                       char c = attributeName.charAt(0);//获得属性第一个字母
                     c -= 32; //转成大写
          String mn = “set”+c+attributeName.substring(1);//构造 get/set 方法名
          }
线程三要素:cpu data ,code
产生线程的方式:a             extends Thread   覆盖 run 方法调用 Thread 的 start()
                  b    implements Runnable 接口,实现 run()方法
                     new Thread(runImpl) .start();
Thread.sleep()进入休眠
Thread.currentThread()当前执行线程
中断:work(){
          while(true){
                     if(flag == false){
                                throw new InterruptedException()
                     }
                     run
          }
}
try{
work()
}cathc(IterruptedException){}
同步代码块
public void run(){
while(tickets > 1){
synchronized(obj){
if(tickets<=1) break;
tickets --;
System.out.println(Thread.currentThread()+" : "+tickets);
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}}}}
synchronized 修饰方法 代码块
// synchronized 修饰静态方法,锁对象是类对象
会造成死锁
新特性:java.util.concurrent.locks
接口 Lock
    public void m() {
     lock.lock();  // block until condition holds
     try {
       // ... method body
     } finally {
       lock.unlock()
     }
   }
java.util.concurrent.atomic 原子操作
volatile 只能修饰实例变量。同步范围仅仅是变量级的
volatile boolean flag = false;
while(true){
             if(falg){
                        throws new InterruptedException()
             }
             work();
}
public void start(){
             flag = false;
}
public void cancel(){
             flag = true;
}
notify() notiyfAll() wait() 在 synchonized()代码中。
  synchronized(this){
  try {
notifyAll();
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
Thread.yield();//?该方法不一定能调用成功暂停当前正在执行的线程对象,并执行其他线程。其
它线程可能是当前线程
高级特性
executor 接口执行已提交的 Runnable 任务的对象。此接口提供一种将任务提交与每个任务将如何运行
的机制(包括线程使用的细节、调度等)分离开来的方法。通常使用 Executor 而不是显式地创建线程。例
如,可能会使用以下方法,而不是为一组任务中的每个任务调用 new
Thread(new(RunnableTask())).start():
  Executor executor = anExecutor;
  executor.execute(new RunnableTask1());
  executor.execute(new RunnableTask2());
接口回调: 调用接口中的方法实际上调用的是实现者的方法
线程池           ExecutorService
ExecutorService exec =Executors.newFixedThreadPool(2);
exec.submit(new ThreadA());
exec.submit(new ThreadB());
exec.shutdown();
Callable Future
1线程,三要素
2.如何产生线程
3synchronized
4wait.notify
Lock ReadWriteLock -> synchronzied
Executor/ExecutorService -> Thread
Callable/Future -> Runnable
Condition.await -> wait
Condition.signal ->notify
Io流      File
File f = new File("a.txt");
System.out.println(f.exists());//判断一文件是否存在
if(!f.exists()){
boolean b = f.createNewFile();//创建文件
System.out.println(b);
}
System.out.println(f.delete());//删除文件,成功 true
System.out.println(f.getAbsolutePath());//获得绝对路径
System.out.println(f.getPath());
System.out.println(File.separator);
System.out.println(f.isFile());
System.out.println(f.isDirectory());
System.out.println(f.isAbsolute());
//创建目录
File f = new File("dir");
System.out.println(f.mkdir());
针对FileFilter接口编程。(当接口没有给出实现时,都是需要用户自己实现接口或者用
匿名内部类)
class MyFilter implements FileFilter{
            public boolean accept(File pathname) {
                      String name = pathname.getName().trim();
                      if(name.endsWith(".txt"))
                      return true;
                      return false;}}
Input Stream & Output Stream
Byte Stream & Char Stream
Node Stream & Wrapper Stream
InputStream    读入 read()     读一个字节
read(byte[] b) b 是一个缓冲
byte[] buf = new byte[5];
while(true){
int len =in.read(buf,1,3);
if(len == -1) break;
System.out.println(len);
System.out.println(Arrays.toString(buf));
}
in.close();
OutputStream     写入write() 写入一个字节
包装流: DataInputStream DataOutputStream         中有一次性写读Int ,Short,Long.Double
等包装类型
            BufferedOutputStream BufferedInputStream 记得写入时要flush
byte[] b = new byte[100];一次性读 100 个字节
int len = 0;//是否读到文件末尾。。注意                          in = read(byte[])方法
while((len=in.read(b))!=-1){
}
in.close();


PipedOutputStream pout       = new PipedOutputStream();
PipedInputStream pin = new PipedInputStream();      连接管道流
pout.connect(pin);
ObjectInputStream & ObjectOutputStream 对象流
Serizlizable序列化接口。。可将一个对象写入文件或在网络上传输
序列化文件以 ACED 开头
序列化可以给一个对象加上标识(序列号)                          当修改对象类时,只要序列号一样,在文件
和网络上就能找到该对象。
transient    表此属性不序列,是一个临时属性                     8 大基本类型都实现了序列化接口
在序列化类中有引用类型,也需要保存时都要序列化
Serialiver 命令,可查看序列化                序列化不可在后面追加。因为在一个文件中 ACED 只能
出现一次
要追加只好读出来再追加后写进去
字节流完
字符流:Reader         Writer
        InputStreamReader      包装类,包装字节流 桥转换:字节流转换成字符流
     桥转换过程中可设定编码
           BufferedReader readLine()
           PrintWriter
           StringReader
           FileReader 直接读文件,不用桥转换
           BufferedWriter
           RandomAccessFile 随机访问文件
System.setOut(new PrintStream("a.txt"));//不输出在控制台,而输出到文件
System.out.println("Hello World");
System.out.println(System.out.getClass());
//InputStream in = System.in;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(true){
String s = br.readLine();
if(s.equals("exit")) break;
System.out.println(s);
}
JAVA图形界面
JFC Swing   AWT事件处理
Creating GUI    1:choosing A Container
          (JFrame Jdialog,JApplent,JPanel) JtabbedPane
               2:choosing A layout Manager
               3:Adding Components in the Containter
               4:Creating Event Handlers
事件监听原理:
import java.util.*;
public class TestGirl {
public static void main(String[] args) {
Girl g = new Girl("秋香");
Boy1 boy1 = new Boy1("xiegy");
g.addEmotionListener(boy1);
Boy2 boy2 = new Boy2("zhaojun");
g.addEmotionListener(boy2);
g.fire();
}
}
interface EmotionListener {
void whatCanIDoWhenGirlHappy(EmotionEvent e);
void whatCanIDoWhenGirlSad(EmotionEvent e);
}
//
////事件对象封装事件源
//class EmotionEvent{
// private Object source;//事件源
// public EmotionEvent(Object source){
// this.source = source;
// }
// public Object getSource() {
// return source;
// }
//
//}
//事件对象封装事件源
class EmotionEvent extends EventObject{
public EmotionEvent(Object source) {
super(source);
}
}
//事件源
class Girl {
private String name;
private List<EmotionListener> listeners = new
ArrayList<EmotionListener>();
public void addEmotionListener(EmotionListener listener){
listeners.add(listener);
}
public void removeEmotionListener(EmotionListener listener){
listeners.remove(listener);
}
public void fire(){
for(int i=1;i<=5;i++){
System.out.println("Day"+i);
if(i%2 == 0){
System.out.println(name+"说:今天
心情不好!");
for(EmotionListener e:listeners){
//所谓事件源向监听者发
出消息,即通过事件对象封装事件源
//然后以事件对象为参数
调用监听者的相应方法
EmotionEvent event =
new EmotionEvent(this);
e.whatCanIDoWhenGirlSad(event);
}
}else{
System.out.println(name+"说:今天
天气好,心情好!");
for(EmotionListener e:listeners){
EmotionEvent event =
new EmotionEvent(this);
e.whatCanIDoWhenGirlHappy(event);
}
}
}
}
public Girl(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
//事件处理者
class Boy1 implements EmotionListener {
private String name;
public Boy1(String name) {
this.name = name;
}
@Override
public void whatCanIDoWhenGirlHappy(EmotionEvent e) {
Girl g = (Girl)e.getSource();
System.out.println(name + "对"+g.getName()+"说:你开心我也挺开
心!");
}
@Override
public void whatCanIDoWhenGirlSad(EmotionEvent e) {
Girl g = (Girl)e.getSource();
System.out.println(name + "对"+g.getName()+"说:你EmotionEvent不
开心我也不开心!");
}
}
class Boy2 implements EmotionListener {
private String name;
public Boy2(String name) {
this.name = name;
}
@Override
public void whatCanIDoWhenGirlHappy(EmotionEvent e) {
Girl g = (Girl)e.getSource();
System.out.println(name + "对"+g.getName()+"说:你开心我倒不开
心!");
}
@Override
public void whatCanIDoWhenGirlSad(EmotionEvent e) {
Girl g = (Girl)e.getSource();
System.out.println(name + "对"+g.getName()+"说:你不开心我也开
心!");
}
}
private class MyActionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e){
jta.append(jtf.getText()+”\n”);
jtf.setText();
}
}
private class MyKeyListener extends KeyAdapter{
@Override
public void KeyPressed(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_ENTER){
jta.append(jtf.getText()+”\n”);
jtf.setText();
}
}
Java net 网络编程
端口0~65535
0~1024系统保留端口
IPV4 192.168.0.23 按位与
主机地址:0.0.1.23
网络地址:192.168.0.0
子网掩码:255.255.254.0
public class TcpServer {
public static void main(String[] args) {
ServerSocket ss = null;
try {
//1.得到ServerSocket
ss = new ServerSocket(8888);
System.out.println("Server start
...");
//2.等待客户端连接
Socket s = ss.accept();
//3.从Socket中得到输入输出流
InputStream in =
s.getInputStream();
DataInputStream din = new
DataInputStream(in);
String text = din.readUTF();
System.out.println("Server
Receive"+text);
OutputStream out =
s.getOutputStream();
DataOutputStream dout = new
DataOutputStream(out);
dout.writeUTF("你好,客户端");
dout.close();
din.close();
} catch (IOException e) {
e.printStackTrace();
}finally{
try{ss.close();}catch(IOException
e){e.printStackTrace();}
}
}
}
import java.io.*;
import java.net.*;
public class TcpClient {
public static void main(String[] args) {
Socket s = null;
try {
s= new Socket("localhost",8888);
OutputStream out =
s.getOutputStream();
DataOutputStream dout = new
DataOutputStream(out);
dout.writeUTF("你好,服务器");
InputStream in =
s.getInputStream();
DataInputStream din = new
DataInputStream(in);
String text = din.readUTF();
System.out.println("Client
Receive:"+text);
din.close();
dout.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
分享到:
评论

相关推荐

    IO和线程java输入输出 多线程

    Java中的IO(输入/输出)和线程是两个核心概念,它们在开发高效、响应性强的应用程序时起着至关重要的作用。输入/输出处理数据的传输,而多线程则涉及程序的并发执行。 首先,让我们深入理解Java的IO系统。Java.IO...

    使用JAVA.IO流线程的JAVA课设项目万年历记事本

    在Java编程语言中,IO(Input/Output)流和线程是两个重要的概念,它们在构建复杂的系统中扮演着至关重要的角色。在这个“万年历记事本”课设项目中,开发者结合了这两个概念来创建一个功能丰富的应用程序。下面我们...

    java线程+java IO操作

    Java线程和IO操作是Java编程中的核心概念,它们在构建高效、响应迅速的应用程序时起着至关重要的作用。在Java中,线程用于实现并发执行,而IO操作则涉及数据的读取和写入。这两者结合可以创建能够同时处理多个输入/...

    Java-Io流,练习

    通过运行这些示例,你可以直观地理解IO流的工作原理,并学习如何在实际项目中运用。 总结来说,Java的IO流是一个庞大且重要的主题,涵盖了数据的输入、输出、缓冲、转换等多个方面。对于初学者而言,理解和掌握IO流...

    java.io.Reader 和 java.io.InputStream 的区别

    ### Java.io.Reader与Java.io.InputStream的关键差异解析 在深入探讨`java.io.Reader`与`java.io.InputStream`的具体差异之前,我们首先需要理解这两者在Java I/O操作中的基础角色。`java.io.Reader`和`java.io....

    Java多线程.drawio

    Java多线程.drawio

    Java中Swing,IO,Thread,线程使用教程

    本文档将介绍 Java 语言中的图形界面(Swing)、输入输出流(IO)和线程(Thread)部分的知识点,并提供相应的程序源码和运行结果截图。 资源摘要信息 Swing Swing 是一个用于开发 Java 应用程序用户界面的开发...

    《JAVA_IO流学习总结》

    Java IO流是Java平台核心特性之一,它负责在程序与外部资源之间传输数据。这个概念在Java编程中至关重要,因为它提供了处理输入(读取)和输出(写入)的机制,无论是从键盘、文件、网络还是其他数据源。在本文中,...

    Java_IO完全总结

    Java IO系统主要包括两个包:`java.io`和`java.nio`(New IO),其中`java.io`提供了一系列基于流的I/O操作接口与实现类,而`java.nio`则提供了更高效的数据访问方式,如通道和缓冲区等。 Java IO系统的设计原则之...

    Java学习之IO总结及mina和netty

    这篇博客“Java学习之IO总结及mina和netty”探讨了Java IO的基础知识,并深入到两个高级网络通信框架——Mina和Netty。Mina和Netty都是基于NIO(非阻塞IO)的高性能网络应用框架,它们简化了复杂网络编程的实现。 *...

    java io 与java nio区别

    在Java IO模型中,当一个线程发起一个IO操作请求时,该线程会一直阻塞等待直到IO操作完成。这意味着如果一个线程正在执行一个读取操作,那么在此期间该线程无法执行其他任何任务,必须等到读取操作完成才能继续下...

    Java IO应届生培训讲义

    Java IO应届生培训讲义是一份面向刚毕业的大学生进行Java IO相关知识的培训资料,它涵盖了Java IO的基础知识、不同的IO模型以及Java中的BIO、NIO和AIO高级IO类库。下面详细解释这些知识点: 1. 用户空间和内核空间 ...

    IO流 javaio java 流

    Java中的IO流是Java核心库的重要组成部分,它用于在不同数据源之间传输数据。Java IO流分为两大类:字符流(Character Stream)和字节流(Byte Stream)。字符流处理单个字符,而字节流处理8位的字节序列。它们又...

    io流 多线程 实现上传下载 小程序 java

    自己写的 io流 多线程 实现上传下载 小程序 java

    javaIO学习课件 很详细的讲解

    总的来说,这个“javaIO学习课件”涵盖了Java I/O的基础到高级主题,包括流的类型、文件操作、线程间通信以及非阻塞I/O,是全面学习和提升Java I/O技能的宝贵资源。通过深入研究这些材料,开发者可以更好地理解和...

    java IO.chm

    《Java IO.chm》是一个关于Java输入/输出(IO)技术的压缩文件,其中包含了丰富的资料,适合开发者深入理解和学习Java IO系统。这篇详细的总结将围绕Java IO体系结构、核心类、流的概念、缓冲区、转换流、字符集、...

    javaIo操作的基础代码

    Java IO操作是Java编程中的重要组成部分,主要用于处理输入和输出数据。在Java中,IO操作涉及到文件、字节流、字符流以及管道流等多个概念。下面将详细解释这些知识点。 首先,我们来看“文件类”。在Java中,`java...

    java-demo:java学习笔记,包含多线程,java IO流,java 阻塞IO,非阻塞IO,netty demo

    在这个"java-demo"项目中,我们可以深入学习Java技术,特别是关于多线程、IO流以及两种不同的IO模型——阻塞IO(BIO)和非阻塞IO。此外,还涉及到Netty框架的应用,这是一个高性能、异步事件驱动的网络应用框架,常...

    java线程学习笔记

    Java 线程学习笔记 Java 线程创建有两种方法: 1. 继承 Thread 类,重写 run 方法:通过继承 Thread 类并重写 run 方法来创建线程,这种方法可以使线程具有自己的执行逻辑。 2. 实现 Runnable 接口:通过实现 ...

    java之io流实例

    Java中的IO流是Java语言处理输入输出操作的重要组成部分,它为数据传输提供了强大的支持。本文将深入探讨Java的IO流实例应用,旨在帮助开发者更好地理解和掌握这一关键概念。 IO流在Java中分为两大类:字符流...

Global site tag (gtag.js) - Google Analytics