Java编程基础(三)

1.输入和输出 IO流

一张图看懂IO流
在这里插入图片描述

1.1字节流

针对字节输入输出的一系列流
JDK中 抽象类 InputStream和OutputStream 字节流的顶级父类
InputStream常用方法

  • int read()
  • int read(byte [] b) 输入流读取若干字节,保存到参b指定字节数组中
  • int read(byte [] b,int off,int len)
  • void close() 关闭输入流,释放流相关的系统资源

OutputStream常用方法

  • void write(int b)
  • void write(byte b)
  • void write(byte[] b,off,len)
  • void flush()
  • void close()

这两个抽象类提供一系列的和读写数据有关的方法,是抽象的,无实例化有不同的子类

InputStream 子类

  • ByteArrayInputStream
  • FileInputStream
  • FileterInputStream?BufferedInputStream,DataInputStream
  • PipedInputStream
  • SequenceInputStream
  • ObjectInputStream

OutputStream 子类

  • ByteArrayOutputStream
  • FileOutputStream
  • FukterOutputStream?BufferedOutputStream,PrintStream,DataOutputStream
  • PipedOutputStream
  • ObjectOutputStream

文件拷贝 输入输出成对存在 提高效率

  1. 字节流的缓冲区,定义一个字节数组作为缓冲数组
  2. 早就提供的BufferedInputStream和BufferedOutputStream

1.2字符输入流

一张图,不再迷糊
在这里插入图片描述

1.3字符输出流

在这里插入图片描述
字符文件实现复制 重要方法 readLine() 一次读取一行文本
字符文件实现复制关键代码如下

FileReader reader  = new FileReader("src.txt");
BufferedReader br = new BufferedReader(reader);
FileWriter writer = new FileWriter();
BufferedWriter bw = new BufferedWriter(writer);
String str ;
while((str=br.readLine())!=null){
 			bw.write(str);
			 bw.newLine();
 }//释放系统资源
 reader.close();
 writer.close();

2.File类

操作 1.创建 2.删除 3.重命名 4.存在 5.修改

2.1常用构造方法

  • File(String pathname)
  • File(String p,String c)
  • File(File p,String c)

2.2File类的常用方法

  1. boolean createNewFile()
  2. boolean delete()
  3. Stirng getName()
  4. String getPath()
  5. String getAbsolutePath()
  6. boolean exist()
  7. Long LastModified
  8. String [] List() 遍历
  9. File [] ListFiles() 删除递归

遍历目录 ,遍历目录指定文件(File类中重要重载List(FilenameFilter filter)方法) 关键代码

FilenameFilter filter = new FilenameFilter(){
	public boolean accept(File dir,String name){
	File currentFile = new File(dir.name);
	if(currentFile.isFile()&&name.endwith(".txt")){
		return true;}else{
		return false;
		};
		if(file.exist()){
			String [] lists = file.List(filter);
			for(String name:lists){
			syso(name);
			} 

3.GUI 图形用户界面(AWT&Swing)

3.1AWT

一张图看懂结构
在这里插入图片描述

  • window(不依赖其他组件,独立存在的容器)
    1.Frame 窗口
    2.Dialog 对话框
  • panel 也是一个容器,只能存在其他容器中(window和子类),不单独存在

布局管理器 5种

  • FlowLayout() 流式布局管理器 添加位置从左到右放置(3个构造方法)

    1.FlowLayout() 默认居中水平垂直5个单位
    2.FlowLayout(int align) 自定义对齐
    3.FlowLayout(int align,int h,int u) 完全自定义

  • BorderLayOut 边界布局管理器
    东EAST,西WEST,南SOUTH,北NORTH,中CENTER
    改变容器时,NORTH和SOUTH高度不变,长度调整,WEST和EAST宽度不变,高度调整,CENTER自适应
    向容器中添加组件用方法add(组件,方式.位置)

  • GridLayout()网格布局管理器
    用纵横线将容器分为n行m列大小相等网格,与FlowLayout不同的是,组件自动占据网格的整个区域
    构造方法
    GridLayout()一行一列
    GridLayout(int rows,int cols)
    GridLayout(int rows,int cols,int hgap,int vgap)水平垂直间距
    组件相对位置最佳大小不随区域的缩放而改变,但组件大小会随之改变,忽略了组件的最佳大小,宽高相同

  • GridBagLayout()网格包布局管理器
    灵活且复杂,组件大小各不相同,一个组件可以跨多个网格
    步骤:
    1.创建GridBagLayout 容器采用这种
    GridBagLayout gd = new GridBagLayout();
    container.setLayout(gd);
    2.创建GridBagContrains对象(布局约束条件) 相关属性
    3.调用GirdBagLayout的setContrains()方法,建立布局,对象,受控组件 gd.setContraints(component ,c);
    4.容器中加组件
    container.add(component);

  • CardLayout() 卡片布局管理器
    常用方法:
    void first(container parent)
    void show(container p,String name)
    void next()
    void last()
    void previous()

  • 不使用布局管理器
    Window Frame Dialog 默认BorderLayout
    Panel 默认 FlowLayout

3.2AWT事件处理

  • 事件对象
  • 事件源(组件)
  • 监听器(Listener)
  • 事件处理器
    关系图:

事件适配器 extends WindowListener 有七个方法()空实现
需要指定的功能需要WindowAdapter
关键代码:

..main(){
	L;S;L;V;
	f.addWindowListener(new MyWindowListener);
	}
	}//class Test
	Class MyWindowListener extends WindowAdapter{
		public void window Closing(windowEvent e){
			Window w = (Window) e.getComponent();
			w.dispose();
		}
	}

用匿名内部类实现事件处理机制

main(String[] args){
Frame f = new Frame();
L;S;L;V;
Button btn = new Button("EXIT");
f.add(btn);//加载事件
btn.addMouseListener(new MouseAdapter(){
		public void mouseClicked(MouseEvent e){
		system.exit(0);}
		}
	)
}

常见事件分类
1.WindowEvent

  • WindowOpened 打开
  • WindowIconified 图标化
  • WindowDeiconified 取消图标化
  • WindowDeactived 停用
  • WindowClosing 正在关闭
  • WindowClosed 关闭
  • WindowActivated 激活

2.MouseEvent

  • MouseReleased 放开事件
  • MousePressed 搁下事件
  • MouseExited 移除按钮
  • MouseEntered 进入按钮
  • MouseClicked 完成单击

3.KeyEvent
实现keyListener接口,或者继承keyAdapter
4.ActionEvent 动作事件
实现ActionListener接口

3.3Swing

不依赖本地平台,跨平台,轻量级组件
大部分Swing类是JComponent类直接或间接类,是Container子类
在这里插入图片描述
JFrame是Swing组件中最常见的一个独立存在的顶级窗口,Jframe和Frame的最大区别就是Jframe提供了关闭窗口的功能,在程序中不用添加窗口监听器,只需要调用setDefaultCloseOperation()方法,然后将常量JFrame.EXIT_ON_CLOSE 作为参数传入。
JDialog是Swing中另外一个顶级窗口,它和Dialog一样表示对话窗口,两种模式:

  • 模态对话框
    处理当前对话框,继续
  • 非模态对话框
    同时处理

模态还是非模态,在创建JDialog对象为构造传入参数设置 or SetModal()方法
构造方法
JDialog(Frame owner) 非模态对话框 owner
JDialog(Frame owner,String title) 指定标题非模态对话框 owner
JDialog(Frame owner,boolean modal) 创建一个指定模式无标题对话框
中间容器

  • JPanel
    和AWT中的Panel使用方法一致,无边框,无法移动,用setLayout()

  • JScrollPane
    带滚动条的面板容器,只可添加一种组件,若将组件从Jpanel到JScrollPane中就可以添加多个组件
    组件 (Swing中)

  • 文本组件:JtextField,JtextArea,?JTextComponent

  • 按钮组件:JButton,JCheckBox,JRadioButton?AbstractButton

  • 菜单组件:下拉式菜单?JMeanBar(菜单栏),JMenu(菜单),JMenuItem(项) 弹出式菜单? Java中Swing组件用JPopUpMenu表示

  • JTable:表格多行多列,二维显示区

4.JDBC

Java数据库核心
在程序中有JDBC和具体的数据库驱动联系,用户不必与底层的数据的交互,代码通用性高
JDBC常用API 位于java.sql包中
在这里插入图片描述

4.1Driver接口 提供给数据库厂商使用

4.2DriverManager类 加载JDBC驱动并且创建与数据库的连接

4.3Connection 接口(Java程序和database联系)

4.4Statement 接口

4.5preparedStatement 接口

4.6ResultSet 接口

5.多线程

创建多线程两种方式,线程的生命周期,调度方式,同步代码块,同步方法
每一个运行的程序都是一个进程,一个进程还可以有多个执行单元同时运行,Java程序启动时,产生一个进程,进程默认创建线程,线程运行main()方法中的代码块

  • 创建线程
    1.继承java.lang包下的Thread类,覆写Thread类的run方法,在其中实现线程上的代码
public static void main(String[] args){
	MyThread myThread = new MyThread();
	myThread.start();//开启线程
	while(true){
		syso("Hello");
		
	}
}

class MyThread extends Thread{
	public void run(){
		while(true){
			syso("world");
		}
	}
}

单线程按代码调用顺序执行
多线程,main()方法和MyThread类中的run()方法可同时运行,互不影响

  • 实现Runable接口,创建多线程(出现原因:单继承,一个类一旦继承了某个父类就无法再继承Thread类)
public static void main(String[] args){
	//创建MyThread实例对象
	MyThread myThread = new MyThread(); 
	//创建线程对象
	Thread thread = new Thread(myThread);
	thread.start();//开启线程
	while(true){
		syso("Hello");
		
	}
}

class MyThread implements Runable{
	public void run(){
		while(true){
			syso("world");
		}
	}
}

5.1线程的生命周期及状态变化

在这里插入图片描述
运行到阻塞

  • 线程视图获取某个对象同步锁时 等
  • 线程调用了一个阻塞式的IO方法 等
  • 线程调用了某个对象wait()方法,modify()方法
  • 线程调用了Thread的sleep
  • 一个线程调用了另外一个线程join()

线程的优先级
static int MAX_PRIORITY (10)
static int NORM_PRIORITY (5)
static int MIN_PRIORITY (1)

线程休眠:sleep(long mills)
线程让步:yield()
线程插队:join()

5.2多线程同步

多线程并发执行可以提高程序效率,多个访问,安全问题
线程的安全问题就是多个线程同时处理共享资源而导致的
为了保证用于处理共享资源的代码在任何时候只能有一个线程访问

  • 同步代码块
public static void main(String[] args){
	TicketWindow tw = new TicketWindow();
	new Thread(tw,'1').start();
	new Thread(tw,'2').start();
}

class TicketWindow implements Runable{
	private int tickets = 10;
	Object lock = new Object();
	
	public void run(){
		while(true){
			synchronic(lock){
				Thread.sleep(10);//抛出异常
				if(tickets>0){
					syso(Thread.currentThread().getName());
				}else{
					break;
				}
				
			}
		}
	}
}
  • 同步方法
    在方法面前用synchronic修饰 相同的功能
public static void main(String[] args){
	TicketWindow tw = new TicketWindow();
	new Thread(tw,'1').start();
	new Thread(tw,'2').start();
}

class TicketWindow implements Runable{
	private int tickets = 10;
	Object lock = new Object();
	
	public void run(){
		while(true){
			sendTicket();
		}
	}
}

public synchronic void sendTicket(){
	Thread.sleep(10);//抛出异常
		if(tickets>0){
			syso(Thread.currentThread().getName());
			}else{
				system.exit(0);
			}
	}

同步代码块的锁是自己定义的任意类型的对象,同步方法是否也存在锁,答案是存在的,是当前调用该方法的对象(this指向的对象)
静态方法 同步方法 是所在的class对象

6.网络编程

6.1了解TCP/IP协议的特点

6.2掌握IP地址和端口号作用

6.3掌握UDP和TCP的通信方式

6.4掌握InetAddress 对象的使用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值