-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
一,GUI
GUI:GraphicalUser Interface,即图形用户界面,用于计算机与用户交互的一种方式。
计算机与用户交互的两种方式:GUI和CL。
java也将这种界面封装为对象,其中的对象都放在了两个包中:java.Awt包和javax.Swing包。
继承关系图
布局管理器
1,布局:容器中的组件排列方式
2,常见的布局管理器:
1)FlowLayout:流式布局管理器。从左向右排列,是Panel默认的布局管理器
2)BorderLayout:边界式布局管理器,东南西北中的排列方式,是Frame的默认布局管理器。如果窗体中只有一个组件,将会覆盖整个窗体。
3)GridLayout:网格式布局管理器,规则的矩阵
4)CardLayout:卡片式布局管理器,即选项卡
5)GridBayLayout:网格包布局管理器,非规则矩阵
窗体创建过程
创建Frame窗体:
Frame f = new Frame("my Frame");//可设置标题,即窗体名字
对窗体进行基本设置:如大小,位置,布局等:
f.setSize(int wight,int hight);//窗体大小设置
f.setLocation(int x,int y);//窗体显示位置设置,横纵坐标
f.setBounds(int x,int y,int wight,int hight),也可以直接用这个方法对大小和位置设置
f.setLayout(Layout layout),参数为指定的布局管理器,如FlowLayout
定义组件:
如Button b = new Button(“my Button”);//可设置组件的名称
将组件通过窗体的add方法添加到窗体中:
f.add(b);//将按钮组件添加进窗体
显示窗体:
f.setVisible(boolean b);//通过设置参数是true还是false是否显示窗体
事件监听机制
步骤:
1)确定事件源(容器或组件)。通过事件源对象的addXXXListener()方法将监听器注册到该事件源上。该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。
2)一般用匿名内部类来表示。在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。事件触发后会把事件打包成对象传递给该变量。(其中包括事件源对象。通过getSource()或者,getComponent()获取。)
示例:
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
菜单:Menu
先创建菜单条,再创建菜单,每一个菜单中建立菜单项。也可以菜单添加到菜单中,作为子菜单。通过Frame的setMenuBar()方法,将菜单添加到Frame中。
二,网络编程
网络通信三要素:IP地址,端口号,传输协议
IP地址:java中对应的是InetAddress类,存在于java.net包中。
端口号:
a,用于标识进程的逻辑地址,不用进程的标识。
b,有效端口:0 ~65535,系统使用或保留的端口是:0~ 1024。
传输协议:
即通信规则,包含TCP和UDP协议
UDP
是面向无连接,明确了对方的端口,无论在不在网上,只管传输,不在就会丢失数据。只求速度,应用于网络视频会议和聊天等应用程序中。
协议特点:
a、面向无连接,即将数据及源和目的封装成数据包中,不建立链接的发送
b、每个数据包的大小限制在64K之内
c、因无连接,是不可靠的协议
d、不建立连接,速度快。
TCP
是面向连接的,必须连接成功才能传输数据,应用于下载等程序上
协议特点:
a、面向连接,在建立连接后,形成传输数据的通道
b、在连接中进行大数据量的传输
c、通过三次握手完成连接,是可靠的协议
d、必须建立连接,效率稍慢
三次握手:第一次本方发送请求,第二次对方确认连接,第三次本方再次确认连接成功。
Socket
Socket就是为网络服务提供的一种机制,通信的两端都有Socket,网络通信其实就是Socket间的通信,数据在两个Socket间通过IO传输。
UDP传输
通过类DatagramSocket
方法:
1)创建 UDPSocket发送服务对象:
DatagramSocket(),不指定端口。DatagramSocket(int port),指定端口。
2)发送:void send(DatagramPacket p)
3)接收:void receive(DatagramPacket p)
送端与接收端是两个独立的运行程序。
在发送端,要在数据包对象中明确目的地IP及端口。
在接收端,要指定监听的端口。
示例:发送端
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
class UDPSend
{
public static void main(String[] args) throws Exception
{
DatagramSocket ds = new DatagramSocket(8000);//1,创建udp服务
//2,确定数据,并封装成数据包。DatagramPacket(byte[] buf, int length, InetAddress address, int port)
byte[] buf = "黑马程序员".getBytes();
DatagramPacket dp =
new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.254"),10000);
ds.send(dp);//3,通过socket服务,通过send方法将数据包发送出去。
ds.close();//4,关闭资源。
}
}
接收端:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
class UDPReceive
{
public static void main(String[] args) throws Exception
{
DatagramSocket ds = new DatagramSocket(10000);//1.创建udp socket,建立端点。
while(true)
{
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);//2.定义数据包,用于存储数据。
ds.receive(dp);//3.阻塞式方法,通过服务的receive方法将收到数据存入数据包中。
//4.通过数据包的方法获取其中的数据。
String ip = dp.getAddress().getHostAddress();
String data = new String(dp.getData(),0,dp.getLength());
int port = dp.getPort();
System.out.println(ip+"::"+data+"::"+port);
}
}
}
TCP传输
1、TCP分客户端和服务端。客户端对应的对象是Socket,服务端对应的对象是ServerSocket。
方法:
创建客户端对象:
Socket():创建空参数的客户端对象,一般用于服务端接收数据
Socket(String host,int port),指定要接收的IP地址和端口号
创建服务端对象:ServerSocket(int port):指定接收的客户端的端口
Socket accept():监听并接受到此套接字的连接
void shutdownInput():此套接字的输入流至于“流的末尾”
void shutdownOutput():禁用此套接字的输出流
InputStream getInputStream():返回此套接字的输入流,Socket对象调用
OutputStream getOutputStream():返回套接字的输出流,Socket对象调用
示例:客户端
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
class services {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket sk = new Socket("zero-pc",9555);//建立服务
FileInputStream fis = new FileInputStream("E:\\mytext.java");//读取文件
OutputStream out = sk.getOutputStream();//写入到网络输出流。
byte[] by = new byte[1024];
int lens=0;
while((lens=fis.read(by))!=-1)
{
out.write(by,0,lens);
}
sk.shutdownOutput(); // 相当于发送结束标记-1。
InputStream in = sk.getInputStream();//读取服务端信息
byte[] bu = new byte[1024];
int len =in.read(bu);//阻塞式方法。
System.out.println(new String(bu, 0, len));
fis.close();
sk.close();
}
}
服务端:
class service2 {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(9555);//建立服务
Socket s = ss.accept();//获取客户端对象
//读取网络输入流 并写入数据库。
String add = s.getInetAddress().getHostAddress();//获取地址
System.out.println(add+"已连接");
InputStream in =s.getInputStream();
FileOutputStream fos = new FileOutputStream("E:\\copy.java");
byte[] buf = new byte[1024];
int lens = 0;
while((lens= in.read(buf))!=-1)//阻塞方法 等待-1标记。
{
fos.write(buf, 0, lens);
}
OutputStream out = s.getOutputStream();//返回信息
out.write("上传成功".getBytes());
ss.close();//关闭资源。
s.close();
fos.close();
}
}
三,正则表达式
正则表达式:符合一定规则的表达式。
作用:用于专门操作字符串。
特点:用于一些特定的符号来表示一些代码操作,这样可以简化书写。所以学习正则表达式,就是在学习一些特殊符号的使用。
好处:可以简化对字符串的复杂操作。
弊端:符合定义越多,正则越长,阅读性越差。
常用符号:
[a-zA-Z] a到 z或 A 到 Z,两头的字母包括在内(范围)
\D 非数字: [^0-9]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n次
X{n,} X,至少 n次
X{n,m} X,至少 n次,但是不超过 m 次
具体功能
主要有四种具体功能:匹配、切割、替换和获取匹配:String类中的booleanmatches(String regex)方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。
切割:String类中的String[]split(String regex)方法。
替换: String replaceAll(String regex,String replacement)方法。如果regex中有定义组(),可以在第二参数中通过$符号获取正则表达式中的已有的组。
获取:将字符串中的符合规则的子串取出。
操作步骤:
1,将正则表达式封装成对象。
2,让正则对象和要操作的字符串相关联。
3,关联后,获取正则匹配引擎。
4,通过引擎对符合规则的子串进行操作,比如取出。
获取示例:
import java.util.regex.*;
public class reges_demo {
public static void main(String[] args)
{
String str="gherh98-17-10sggsdg iuih 78-14-36grgrg";
String regex="\\d{2}-\\d{2}-\\d{2}";<span style="font-family: Arial, Helvetica, sans-serif;">//规则</span>
Pattern p=Pattern.compile(regex);//将规则封装成对象。
Matcher m=p.matcher(str);//获取匹配器对象
while(m.find())//匹配查找子串
{
System.out.println(m.group());//获取子串
}
}
}