关键字
Java 中一些赋以特定的含义,并用做专门用途的单词称为关键字(keyword)。所有Java
关键字都是小写的,TRUE、FALSE、NULL 等都不是Java 关键字;goto 和const 虽然从未
被使用,但也作为Java 关键字保留。Java 的关键字如下:
访问控制:
private 私有的
protected 受保护的
public 公共的类、方法和变量修饰符:
abstract 声明抽象
class 类
extends 扩允,继承
final 终极,不可改变的
implements 实现
interface 接口
native 本地
new 新,创建
static 静态
strictfp 严格,精准
synchronized 线程,同步
transient 短暂
volatile 易失
程序控制语句:
break 跳出循环
continue 继续
return 返回
do 运行
while 循环
if 如果
else 反之
for 循环
instanceof 实例
switch 开关
case 返回开关里的结果
default 默认
错误处理:
catch 处理异常
finally 有没有异常都执行
throw 抛出一个异常对象
throws 声明一个异常可能被抛出
try 捕获异常
包相关:
import 引入
package 包
基本类型:
boolean 布尔型
byte 字节型
char 字符型
double 双精度
float 浮点
int 整型
long 长整型
short 短整型
null 空
true 真
false 假
变量引用:
super 父类,超类
this 本类
void 无返回值
字符串处理
AddSlashes: 字符串加入斜线。
bin2hex: 二进位转成十六进位。
Chop: 去除连续空白。
Chr: 返回序数值的字符。
chunk_split: 将字符串分成小段。
convert_cyr_string: 转换古斯拉夫字符串成其它字符串。
crypt: 将字符串用 DES 编码加密。
echo: 输出字符串。
explode: 切开字符串。
flush: 清出输出缓冲区。
get_meta_tags: 抽出文件所有 meta 标记的资料。
htmlspecialchars: 将特殊字符转成 HTML 格式。
htmlentities: 将所有的字符都转成 HTML 字符串。
implode: 将数组变成字符串。
join: 将数组变成字符串。
ltrim: 去除连续空白。
md5: 计算字符串的 MD5 哈稀。
nl2br: 将换行字符转成 <br>。
Ord: 返回字符的序数值。
parse_str: 解析 query 字符串成变量。
print: 输出字符串。
printf: 输出格式化字符串。
quoted_printable_decode: 将 qp 编码字符串转成 8 位字符串。
QuoteMeta: 加入引用符号。
rawurldecode: 从 URL 专用格式字符串还原成普通字符串。
rawurlencode: 将字符串编码成 URL 专用格式。
setlocale: 配置地域化信息。
similar_text: 计算字符串相似度。
soundex: 计算字符串的读音值
sprintf: 将字符串格式化。
strchr: 寻找第一个出现的字符。
strcmp: 字符串比较。
strcspn: 不同字符串的长度。
strip_tags: 去掉 HTML 及 PHP 的标记。
StripSlashes: 去掉反斜线字符。
strlen: 取得字符串长度。
strrpos: 寻找字符串中某字符最后出现处。
strpos: 寻找字符串中某字符最先出现处。
strrchr: 取得某字符最后出现处起的字符串。
strrev: 颠倒字符串。
strspn: 找出某字符串落在另一字符串遮罩的数目。
strstr: 返回字符串中某字符串开始处至结束的字符串。
strtok: 切开字符串。
strtolower: 字符串全转为小写。
strtoupper: 字符串全转为大写。
str_replace: 字符串取代。
strtr: 转换某些字符。
substr: 取部份字符串。
trim: 截去字符串首尾的空格。
ucfirst: 将字符串第一个字符改大写。
ucwords: 将字符串每个字第一个字母改大写。
接 口
Java 中接口可看做“纯粹的抽象类”。接口与类一样,有方法名、参数列表和返回类型。Java 接口的方法只能是抽象的,所以没有方法体。Java 接口不能有构造方法,接口的
方法都隐含public 和final。
创建接口时用 interface 来代替class,前面可以有public,如果不加访问权限,那么它
就是默认的包访问权限。接口中的方法默认为public。类实现接口要用implements 关键字。
创建一个接口的方法:
interface abcd{
定义参数;
例: static final double PI=3.14;
定义方法;
例:double area(); //没有方法体!!
}
实现一个接口的方法:
public class abc implements abcd{
一定要具体实现接口中的方法!(覆盖方法)
}
抽象类
Java 的抽象类是包含一种或多种抽象方法的类,不需要构造实例。定义抽象类后,其他类可以对它进行扩充并且通过实现其中的抽象方法,使抽象类具体化。
Java 抽象类有以下一些特点:
(1) 普通的Java 类也可以在class 前加abstract 声明为抽象,只不过此时的该类不可以
再实例化。
(2) 如果一个类里有一个以上的抽象方法,则该类必须声明为抽象类,该方法也必须
声明为抽象。
(3) 抽象类虽然不能被实例化,但抽象类可以有构造方法,以备继承类扩充。
例:
/* 文件名:AbstractDemo.java
* Copyright (C): 2009
* 功能:通过继承抽象类实现圆面积的计算
*/
abstract class Shape{
int x,y;
Shape (int a){x=a;}
Shape (int a,int b){x=a;y=b;}
abstract double area();
}
class Circle extends Shape{
Circle (int a){super(a);}
double area(){
return 3.14*(x*x);
}
}
public class AbstractDemo{
public static void main(String args[]){
Circle c=new Circle(5);
System.out.println(c.area());
}
多线程
在java语言中创建一个线程共有两种方式。
一种是实现Runnable接口,代码如下:
public class example(类名) implements(实现) Runnable{
public void run(){
…
}
}
Runnable接口中只定义了一个run()方法。
另一种是扩展Thread类,代码如下:
public class example extends Thread{
public void run(){
…
}
}
Thread类中定义的方法要用到构造器。
构造器列表如下:
public Thread() // 括号内为参数
public Thread(Runnable target)
public Thread(Runnable target,String name)
public Thread(,String name)
public Thread(ThreadGroup group,Runnable target)
public Thread(ThreadGroup group, Runnable target ,Runnable target)
public Thread(ThreadGroup group, String name)
参数说明:
Runnable target,当前线程启动时,其激发target中的run()方法。
String name线程名。
ThreadGroup group创建线程加入到的线程组。
方法列表如下:
public static int activeCount() //获取线程组中的当前活动线程数
public final void checkAaccess() //确定当前线程是否允许改变
public static Thread currentThread() //获取当前活动线程对象
public void destory() //撤销当前线程,但不进行任何善后清理工作
public final String getName() //获取线程名
public final int geiPriority() //获取线程的优先级
public final ThreadGroup getThreadGroup(0 //获取所属的线程组
public void interrupt() //中断线程
public static bollean interrupted() //判断当前线程是否被中断
public final bollean isAlive() //判断线程是否仍在运行
public final bollean isDaemon() //判断线程是否后台线程
public bollean isInterrupted() //判断线程是否被中断
public final void join() //等待线程终止
public final void join(long millis,int nanos) //等待线程终止,可指定等待时间
public void run() //线程的入口点
public final void setDaemon(boolean on) //将线程设置为后台线程,该方法必须在线程调用start()方法之前调用
public final void setName(String name) //设置线程的名称
public final void setPriority(int newPriority) //设置线程的优先级
public static void sleep(long mills) //挂起线程指定时间段,以毫秒为单位
public static void sleep(long mills,int nanos) //挂起线程指定时间段,以纳秒为单位
public void start() //启动线程
public static void yield() //暂停当前线程
网络编程
端口:
1~~1023 之间已经被系统占用!在定义自己的端口时,应该使用1024~~65535之间的任意端口号,以免发生端口冲突。
TCP 程序设基础
Java中的TCP网络程序设计是指利用Socket类编写通信程序。TCP程序设计的一个过程是:服务器的套接字等待客户机连接请求,并创建新的套接字,使其与客户机的套接字连接,而本身继续等待其他客户机的连接请求。
1.与IP相关的InetAddress类应用:
InetAddress类是与IP地址相关的类。利用此类可以获取IP地址、主机地址等信息。
InetAddress类的常用方法如下:
public static InetAddress getByName(String host): 获取与host相对应的InetAddress对象。
public String getHostAddress(): 返回主机地址的字符串表示。
public String getHostName(): 返回主机名的字符串表示。
public synchronized static InetAddress getLocalHost(): 返回本地主机的InetAddress对象。
例如:
import java.net.*;
/*
*创建一个InetAddress类对象IP
*通过getHostName方法获得主机名
*通过getHostAddress方法获得主机的IP地址
*通过getLocalHost().getHostAddress()方法获取本机的IP地址
*/
publicclass tcptest {
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
InetAddress ip=null; //创建对象
try{ //一定要获取异常!
ip=InetAddress.getByName("WIN-H3VDJ9FM01T");
//根据主机名实例化对象;
System.out.println("主机名:"+ip.getHostName());
//获取主机的名称;
System.out.println("主机IP地址:"+ip.getHostAddress());
//获取主机(服务器)的IP地址
System.out.println("本机IP地址:"+InetAddress.getLocalHost().getHostAddress());
//获取本地的IP地址;
}catch(Exception e){
System.out.println(e);
}
}
}
2.服务器套接字应用
ServerSocket类表示服务器套接字。服务器的套接字是通过指定的端口等待连接的套接字。服务器的套接字一次只可以与一个客户机的套接字连接,如果有多台客户机同时要求同服务器连接,那么服务器套接字会将请求的客户机的套接字存入队列中,然后,从中取一个连接一个。队列的默认大小为50.
ServerSocket类的常用构造函数有:
pblic ServerSocket(int port)
使用指定的端口创建服务器套接字。
public ServerSocket(int port,int backlog)
使用指定的端口创建服务器,backlog用来指定队列大小。
public ServerSocket(int port,int backlog,InetAddress bindAddr)
使用指定的IP地址、端口号及队列大小,创建服务器套接字。
ServerSocket类的主要常用方法有:
public Socket accept() :等待客户机连接,若连接,则创建一个套接字,并且将其返回。
public void close() :关闭服务器套接字。
public boolean isClosed() ;若服务器套接字成功关闭,则返回true。否则返回false。
public InetAddress getInetAddress() :返回与服务器套接字结合的IP地址。
public int getLocalPort() :获取服务器套接字等待的端口号。
public void bind(SocketAddress endpoint) :绑定于endpoint相对应的套接字地址(IP地址+端口号)。
public boolean isBound() :若服务器套接字已经与某个套接字地址连接绑定起来,则返回true;否则返回false。
3.套接字实现
Socket类表示套接字。使用Socket时,需要指定待连接服务器的IP地址及端口号。客户机创建了Socket对象后,将立即向指定的IP地址及端口号发起请求且尝试连接。于是,服务器套接字就会创建新的套接字对象,使其与客户端套接字连接起来。
Socket类的构造器有两个:
public Socket(String host,int port)
创建连接指定的服务器(主机名和端口号)的套接字
public Socket(InetAddress address,int port)
创建连接指定服务器的套接字。address表示IP地址对象,port是端口号。
Socket类的常用方法有:
public InetAddress getInetAddress():获取被连接的服务器的地址
public int getPort():获取端口号。
public InetAddress getLocalAddress():获取本地地址。
public int getLocalPort():获取本地端口号。
public Inputstream getInputStream():获取套接字的输入流。
public OutputStream getOutputStream():获取套接字的输出流。
public void bind(SocketAddress bindpoing):绑定指定的IP地址和端口号。
public boolean isBound():获取绑定状态。
public synchorized void close():关闭套接字。
public boolean isClosed():获取套接字是否关闭。
public boolean isConnected():获取套接字是否被连接
public void shutdownInput():关闭输入流。
public boolean isInputShutdown();返回输入流是否被关闭。
(1)服务器程序编写:
1)调用ServerSocket(int port)创建一个服务器端套接字,并绑定到指定端口。
2)调用accept(),监听连接请求,如客户端连接,则接受并返回通信套接字。
3)调用Socket类的getOutputStream()和getInputStream()获取输出流和输入流,开始网络数据的发送和接收。
4)最后关闭通信流套接字。
(2)客户端程序编写:
1)调用Socket()创建一个流套接字,并连接到服务器端。
2)调用Socket类的getOutputStream()和getInputStream()获取输出流和输入流,开始网络数据的发送和接收。
3)最后关闭通信流套接字。
例如:
服务器端:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.*;
// 1 服务器端
publicclass tcptest1 {
privatestatic BufferedReader reader1; //创建一个缓冲输入流
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
try{
ServerSocket server1=new ServerSocket(5012);
Socket soc;
soc=server1.accept();
//System.out.println(soc.getInputStream());
reader1=new BufferedReader(new InputStreamReader(soc.getInputStream()));
//获取套接字的数据输入流;
//System.out.println(reader1);
while(true){
System.out.println("客户机:"+reader1.readLine());
//接收客户端的数据流;
}
}catch(Exception e){
//System.out.println(e);
}
}
}
客户端:
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.*;
//1 客户端
public class test {
private static PrintWriter writer1;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Socket s=new Socket("127.0.0.1",5012);
writer1=new PrintWriter(s.getOutputStream(),true);
//获取输出流
for(int i=0;i<10;i++){
writer1.println("jiang "+i);
//向服务器发送字符串数据
}
//System.out.println(s.getOutputStream()+" jiang");
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
输出结果为:
UDP程序设计基础
编写UDP程序的步骤:
(1)接收端程序代码编写:
1)调用DatagramSocket(int port)创建一个数据报套接字,并且绑定到指定的端口上。
2)调用DatagramPacket(byte[] buf,int length),创建一个字节数组以接收UDP包。
3)调用DatagramSocket类的receive(),接收UDP包。
(2)关闭数据报套接字。
(3) 发送端程序编写:
1)调用DatagramSocket创建一个数据包套接字。
2)调用DatagramPacket(byte[] buf,int offset,int length,InetAddress address,int port),建立要发送的UDP包。
3)调用DatagramSocket类的send(),发送UDP包。
(4)关闭数据包套接字。
UDP不提供可靠的数据传输,TCP的目的是提供可靠的数据传输。