本文共 3010 字,大约阅读时间需要 10 分钟。
目录
Java中的char是Unicode编码。
Unicode编码占两个字节,就是16位,足够存储一个汉字。
1. 标准ASCII 只使用了7个bit,扩展的ASCII使用了8个bit
2. ASCII码包含一些特殊空字符,所以不能打印
3. 中文一般是GBK2312
这里需要理解的就是该线程是指的主线程等待子线程的终止。也就是在子线程调用了join()方法后面的代码,只有等到子线程结束了才能执行。
如:String str="abcaxc";
贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。结果就是匹配到:abcaxc(ab.*c)。
非贪婪匹配:就是匹配到结果就好,就少的匹配字符。结果就是匹配到:abc(ab*c)。
案例:
private static Pattern pattern1 = Pattern.compile("ab.*c");private static Pattern pattern2 = Pattern.compile("ab*c");public static void main(String[] args) { String str = "abcaxc"; Matcher matcher1 = pattern1.matcher(str); Matcher matcher2 = pattern2.matcher(str); if (matcher1.find()) { // abcaxc System.out.println(matcher1.group(0)); } if (matcher2.find()) { // abc System.out.println(matcher2.group(0)); }}
编程中如何区分两种模式
默认是贪婪模式;在量词后面直接加上一个问号?就是非贪婪模式。ab*?c
量词:{m,n}:m到n个
*:任意多个
+:一个到多个
?:0或一个
. 表示除\n之外的任意字符
* 表示匹配0-无穷
+ 表示匹配1-无穷
(?=Expression) 顺序环视,(?=\\()就是匹配左括号,\\表示转义
\d 匹配一个数字字符。等价于[0-9]。grep要加上-P,perl正则支持
\D 匹配一个非数字字符。等价于[^0-9]。grep要加上-P,perl正则支持
Properties继承自HashTable, Properties中的 store()方法把一个Properties对象的内容以一种可读的形式保存到一个文件中。load()方法正好相反,用来读取文件,并设定Properties对象来包含keys和values。
class Properties extends Hashtable
Properties类用来方便的读写配置文件,支持key-value形式和xml形式的配置文件,以key-value为例,Properties的load方法直接将文件读取到内存中并且以map形式来保存,用 getProperty("key")方法来取得对应的vaule值。
服务器端:ServerSocket提供的实例
ServerSocket server = new ServerSocket(端口号)
客户端:Socket提供的实例
Socket client = new Socket(IP地址,端口号)
线程调度分为协同式调度和抢占式调度,Java使用的是抢占式调度,也就是每个线程将由操作系统来分配执行时间,线程的切换不由线程本身来决定(协同式调度)。这就是平台独立的原因。
由于Servlet是单例的,当多个用户访问Servlet的时候,服务器会为每个用户创建一个线程。当多个用户并发访问Servlet共享资源的时候就会出现线程安全问题。
原则:
如果一个变量需要多个用户共享,则应当在访问该变量的时候,加同步机制synchronized (对象){}
如果一个变量不需要共享,则直接在 doGet() 或者 doPost()定义,这样不会存在线程安全问题
当容器启动时,会读取在webapps目录下所有的web应用中的web.xml文件,然后对 xml文件进行解析,并读取servlet注册信息。然后,将每个应用中注册的servlet类都进行加载,并通过反射的方式实例化。(有时候也是在第一次请求时实例化)
在servlet注册时加上 <load-on-startup>1</load-on-startup>,如果为正数,则在一开始就实例化,如果不写或为负数,则第一次请求实例化。
getClass(), hashCode(), equals(), clone(), toString(), notify(), notifyAll(), wait(), finalize()
Condition是在java 1.5中才出现的,它用来替代传统的Object的wait()、notify()实现线程间的协作,相比使用Object的wait()、notify(),使用Condition的await()、signal()这种方式实现线程间协作更加安全和高效。因此通常来说比较推荐使用Condition。
使用Contdition和Lock代替Object和Synchronized。
1. Contdition和Lock模板
lock.lock();try{ // wait 条件:一般都是使用while while(meet the condition){ condition.await(); } // 满足条件进行一系列操作 ... your operation otherCondition.signal()// otherCondition.signalAll()}catch(){}finally{ lock.unlock();}
2. Object和Synchronized
synchronized (lock){ while (meet the condition){ try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } // 满足条件进行一系列操作 ... your operation lock.notify();}
goto、const既是保留字也是关键字
3个特殊直接量(常量):true、false、null。
转载地址:http://fpqen.baihongyu.com/