【打卡】Java学习(五)

1.迭代器:Iterator,本身就是一个接口
代码:BS_190607/BasicIterator
迭代器提供了一个统一的接口来遍历Map,Set,List
JDK源码:重要的方法hasNext(),是否有下一个

2.collections:工具类,工具类不需要对象,直接用,Collections.sort() Math.PI
代码:BS_190607/BasicCollections
常用的方法有:sort()从小到大排序,字符串按照字母序;shuffle()随机排序;reverse()逆序排列;binarySearch()二分查找序列中有无指定的元素,有则返回下角标,没有则返回-1

3.JavaBean:使用JavaBean存储表格数据(分别使用list,map来遍历)
代码:BS_190607/BasicJavaBean
一个完整的JavaBean要有set,get方法,和一个空的构造函数

4.IO流:以程序为中心,->程序(输入流),程序->(输出流)

五个类三个接口:File(文件类),InputStream(字节输入流),OutputStream(字节输出流),Reader(字符输入流),Writer(字符输出流),Closeable(关闭流接口)通知操作系统你可以释放了,JVM无法调用Java的垃圾回收机制,Flushable(刷新流接口),Serializable(序列化接口)

分类:按流向:输入流(InputStream,Reader),输出流(OutputStream,Writer)
按功能:节点流(可以直接从数据源取数据),包装流(经过包装,提高了性能)
按数据:字符流(操作纯文本,能使用字符流的一定能使用字节流),字节流(视频,音频,直接操作字节,能使用字节流的不一定能使用字符流)

File,FileInputStream,FileOutputStream,FileReader都是存放在硬盘上的,这些文件JVM(Java虚拟机)无权访问,必须借助操作系统,使用完之后,要通知操作系统释放资源
然鹅,字节数组流不用关闭,应为它存放到内存中,使用完后,Java的垃圾回收机制会进行处理;任何东西都可转成字节数组,字节数组的容量不要太大

File对象可以构建一个文件,一个文件夹,这个文件/文件夹可以不存在

路径表示

// 路径表示方法一
String Path = "E:/Study/Image/ball.png";
// 路径表示方法二
String Path2 = "E:" + File.separator + "Study" + File.separator+ "Image" + File.separator + "ball.png";
//文件
System.getProperty("user.dir");//查看我当前工程的路径
xxx.getAbsolutedPath()//得到xxx的绝对路径
xxx.getName()//得到文件名
xxx.getPath()//给什么路径返回什么路径
xxx.getParent()//获取父路径,不存在的话,返回null
xxx.getParentFile().getName()//返回父对象的名称
//文件状态
xxx.exists()//是否存在
xxx.isFile()//是否是文件
xxx.isDirectory()//是否是文件夹
xxx.length()//返回的是文件的字节数,文件夹返回0
xxx.createNewFile()//创建文件不是文件夹,返回Boolean,不存在才创建,存在了返回false
xxx.delete()//删除,返回Boolean

注意:con,com3是操作系统的关键字,不能作为文件的名称

mkdir:创建要保障父目录存在
mkdirs:创建时没有父目录会创建出来

字符—>字节,叫编码encode;字节—>字符,叫解码 decode
常用的字符集:UTF-8(一个中文占3个字节), GBK

字节输入流:InputStream

package BS_190608;

/**
 * 字节输入流
 */
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

public class BasicIOtest {

	/**
	 * 1.创建流 2.选择流 3.操作 4.释放资源
	 * @param args
	 */
	public static void main(String[] args) {
		// 1.创建流
		File file = new File("test01.txt");
		// 2.选择流
		InputStream is = null;
		try {
			is = new FileInputStream(file);
			// 3.操作
			int temp;
			while ((temp = is.read()) != -1) {
				System.out.println((char) temp);
			}
			/**
			 * int data1 = is.read(); int data2 = is.read(); int data3 =
			 * is.read(); System.out.println((char) data1);
			 * System.out.println((char) data2); System.out.println((char)
			 * data3);
			 **/
			// 4.释放资源
			// is.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				if (null != is)
					is.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

字节数组输出流:OutputStream

package BS_190608;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class BasicOutStream {

	/**
	 * 字节输出流 1.创建源2.选择流3.操作4.释放资源
	 * @param Lona
	 */
	public static void main(String[] args) {
		// 1.创建源
		File src = new File("test02.txt");
		// 2.选择流
		OutputStream os = null;
		try {
			os = new FileOutputStream(src, true);// 加上true在文件夹后面追加内容
			// 3.操作(写出,写到文件里面去)
			String msg = "IO is so easy";
			byte[] datas = msg.getBytes();// 字符串--->字节数组(编码)
			os.write(datas, 0, datas.length);
			os.flush();// 刷新一下
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if (null != os) {
				// 4.释放资源
				try {
					os.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

字节数组输入流:

package BS_190608;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;

public class BasicArray {

	/**
	 * 字节数组输入流 1.创建源:源头是字节数组,不要太大 2.选择流 3.操作 4资源可以不用释放
	 * @param args
	 */
	public static void main(String[] args) {
		byte[] src = "talk is cheap show me the code".getBytes();// 字节数组
		InputStream is = null;
		try {
			is = new ByteArrayInputStream(src);
			// 操作
			byte[] flush = new byte[5];
			int len = -1;// 接受长度
			while ((len = is.read(flush)) != -1) {
				String str = new String(flush, 0, len);
				System.out.println(str);
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (null != is)
					is.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

字节数组输出流:

package BS_190608;

import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class BasicIOArray {

	/**
	 * 字节数组输出流 :ByteArrayOutputStream 1.创建源:内部维护2.选择流:不关联源3.操作4.释放资源:可以不用
	 * 这个流有特殊的东西和之前的有差别 //拿到这个数据:toByteArray
	 * @param Lona
	 */
	public static void main(String[] args) {
		// 1.创建流
		byte[] dest = null;
		// 2.选择流
		ByteArrayOutputStream baos = null;
		try {
			baos = new ByteArrayOutputStream();// 加上true在文件夹后面追加内容
			// 3.操作(写出,写到文件里面去)
			String msg = "show me decode";
			byte[] datas = msg.getBytes();// 字符串--->字节数组(编码)
			baos.write(datas, 0, datas.length);
			baos.flush();// 刷新一下
			// 获取数据
			dest = baos.toByteArray();
			System.out.println(dest.length + "----"
					+ new String(dest, 0, dest.length));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (null != baos) {
				// 4.释放资源
				try {
					baos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

5.多线程:高可用,高性能,高并发;真正的多线程具有多核CPU

程序是静态的概念,就是指代码;进程(是资源分配的单位)是CPU调度,是动态的概念;线程是指一个进程中开辟多条路径(调度和执行的单位)

main()称为主线程
线程的几种实现方式
1)Thread(尽量少用,Java是单一继承)
创建:创建一个类继承Thread,重写run方法
启动:创建子类对象,子类对象调用start方法(start是本地方法,我们看不到,它自己去找新的线程,本方法不保障立即运行,加入到调度器中去,看cpu时间片)
2) Runnable(尽量用这种)
创建:创建一个类实现Runnable接口,重写run方法
启动:创建实现类接口,创建代理类接口,调用start方法
3) Callable
Callable的call方法可以抛出异常,返回类型默认的是Object
重写call方法
创建执行任务
提交执行
获取结果
关闭服务

线程状态:运行,就绪,阻塞,新生,死亡
在这里插入图片描述
在这里插入图片描述
线程的新生状态:new一个对象的时候进入新生状态
线程的就绪状态:调用start方法时,yield将运行状态转成就绪态
线程的运行状态:CPU调度
线程的终止/死亡状态:1)次数达到,正常终止;2)外部干涉,加入标识(不要使用stop,destory,这两种方法不安全)
线程的阻塞状态:sleep方法:sleep(指定时间,单位毫秒);存在异常InterruptedException;sleep时间到达后进入就绪状态;可以模拟网络延时,倒计时;

package BS_190610;

public class BasicYield {

	/**
	 * yeild礼让线程,从运行状态到就绪状态
	 * @param args
	 */
	public static void main(String[] args) {
		MyYield td = new MyYield();
		new Thread(td, "a").start();
		new Thread(td, "b").start();
	}
}

class MyYield implements Runnable {
	@Override
	public void run() {
		System.out.println(Thread.currentThread().getName() + "--->start");
		Thread.yield();
		System.out.println(Thread.currentThread().getName() + "--->end");
	}
}

join()方法,插队线程,必须等他执行完,其他的线程才能执行;通过Thread对象来调用它

进入就绪状态:1)新生状态通过调用start();2)阻塞状态进入就绪态;3)运行状态调用yeild();4)jvm内部操作
进入阻塞状态:1)wait();2)sleep();3)join();4)read,write

线程的优先级:优先级不代表执行顺序,代表的是执行的概率;几个代表值NORM_PRIORITY:5;MIN_PRIORITY:1;MAX_PRIORITY:10;数值大小不能超过10
代码:BS_190610/BasitcThreadClass

线程的分类:用户线程和守护线程;系统默认的是用户线程,守护线程是为用户线程服务的,JVM虚拟机必须确保用户线程执行完毕,不需要等待守护线程执行完毕
代码:BS_190610/BasicBlessThread

线程常用的其他方法:1)isAlive()判断线程是否还活着;2)setName()给线程一个名字;3)getName()获取(代理)线程的名字;4)currentThread()获取当前正在运行的线程对象

线程同步:1)队列;2)锁synchronized(锁方法,锁块)
6.一个类它没有构造器有两种情况:1)内部有静态方法返回这个对象 2)它是一个静态的工具类,不需要对象

7.IP的作用:定位一个节点,路由,通信设备

InetAddress类的使用

		InetAddress inet = null;
		try {
			inet = InetAddress.getLocalHost(); // 使用getLocalHost()创建InetAddress对象
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}
		System.out.println(inet);//主机名/IP地址
		System.out.println(inet.getHostAddress());// IP地址
		System.out.println(inet.getHostName());// 主机名
		try {
			inet = InetAddress.getByName("www.baidu.com");
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}
		System.out.println(inet);//www.baidu.com/61.135.169.121,百度服务器的IP

公认的端口1024以下的
常用命令:

netstat -ano     //查看所有端口
netstat -ano | findstr "80"   //查看指定端口

URL类:

		URL url = new URL(
				"https://www.so.com/s?ie=utf-8&src=hao_360so_b&shb=1&hsid=1a2829372d1a5d38&q=查看指定端口的命令");

		System.out.println("获取协议:" + url.getProtocol());// https
		System.out.println("获取域名||IP:" + url.getHost());// www.so.com
		System.out.println("获取端口:" + url.getPort());// -1
		System.out.println("获取资源1:" + url.getFile());// 将uri和参数,锚都打印出来
		System.out.println("获取资源2:" + url.getPath());// 只打印uri

		System.out.println("获取参数:" + url.getQuery());
		System.out.println("获取锚点:" + url.getRef());// null
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值