文章目录
知识总结
- 1.异常
- 异常的定义
- 异常的分类
- 异常的原理
- 异常的常用方法
- 异常的处理
- 异常的自定义
- 2.包装类
- 包装类的基础
- 装箱拆箱
模板设计模式
- 模板设计模式:实现一个功能的时候分成两部分,将确定的部分由当前的类实现,不确定的部分交给子类实现子类的实现的结果又会反过来影响确定的部分.
- 求一个程序运行的时间
- 1.开始时间
- 2.程序运行的过程
- 3.结束时间
public class Test {
public static void main(String[] args) {
ZiTest zi = new ZiTest();
System.out.println(zi.getTime());
}
}
abstract class FuTest{
//创建抽象方法
public abstract void function();
public long getTime() {
// * 1.开始时间
long startTime = System.nanoTime();//获取的是系统时间,单位是纳秒,1纳秒 = 1*10^-9秒
// * 2.程序运行的过程
function();
// * 3.结束时间
long endTime = System.nanoTime();
return endTime- startTime;
}
}
class ZiTest extends FuTest{
public void function() {
for(int i = 0; i < 100; i++) {
System.out.println("i"+i);
}
}
}
字符串
- 字符串:java将字符串直接面向对象了,形成的类就是字符串类,表示方法""
- 分类:
- 不可变字符串:String,这里说的是字符串本身没有发生变化,与引用无关
- 可变字符串:StringBuffer/Stringbuilder,这里说的是字符串本身可以改变,与引用无关
- 注意;可变字符串和不可变字符串的直接父类都是Object,他们之间是兄弟,没有任何关系
不可变字符串
- 不可变字符串本身可以认为是常量
- 字符串常量的保存位置:常量区,可以认为字符串是堆区中一块儿特殊区域
- 字符串常量的特点:同一个名字的字符串常量在内存中只允许存在一个(只占用一块内存)
public class Test {
public static void main(String[] args) {
/*
* 当执行s1的时候,回到常量区找到叫1000phone的字符串,如果有直接让s1保存他的地址,如果没有,会在常量区开辟一块儿
* 空间存1000phone,
* 执行s2是同理s1
* 执行s3时,由于进行了new,一定会在堆中开辟一块儿空间,而1000phone是作为参数传给了对象,保存在了对象的一个String
* 类型的成员变量内,所以直接判断s1和s3不相同
* 执行s4同理s3
*/
String s1 = "1000phone";
String s2 = "1000phone";
String s3 = new String("1000phone");
String s4 = new String("1000phone");
System.out.println(s1 == s2);//true
System.out.println(s1 == s3);//false
System.out.println(s1 == s4);//false
//说明字符串重写了equals方法,重新定义了比较的规则,规则变成如果是直接的两个字符串比较,就比较地址
//如果是比较的字符串对象,就去比较对象内部的属性的地址。
System.out.println(s1.equals(s2));//true
System.out.println(s1.equals(s3));//true
//综上:以后大家进行字符串比较的时候,尽量使用equals
}
}
常用方法
public class Demo4 {
public static void main(String[] args) throws UnsupportedEncodingException {
//String
String s = "1000phone";
//1.判断:
//判断是否包含一个子字符串
//boolean contains(CharSequence s)
System.out.println(s.contains("1000"));
//判断两个字符串的内容是否相同
//boolean equals(Object anObject)
System.out.println(s.equals("1000Phone"));
//忽略大小写判断两个字符串的内容是否相同
//boolean equalsIgnoreCase(String anotherString)
System.out.println(s.equalsIgnoreCase("1000Phone"));
//判断是否以某字符串开头
//boolean startsWith(String prefix)
System.out.println(s.startsWith("1000"));
//判断是否以某字符串结尾
//boolean endsWith(String suffix)
System.out.println(s.endsWith("e"));
//2.转换:将字符数组转换成字符串
char[] arr = {'a','d','y','g'};
//1:使用构造方法
//String(char[] value)
//String(char[] value, int offset, int count) 将指定个数的字符转换成字符串,offset:是起始点 count:是字符个数
String s2 = new String(arr);
System.out.println(s2);
String s3 = new String(arr,0,2);
//2:使用静态方法
//static String copyValueOf(char[] data)
//static String copyValueOf(char[] data, int offset, int count)
//将字符串转成字符数组
//char[] toCharArray()
char[] arr1 = s.toCharArray();
for (char c : arr1) {
System.out.println("value"+c);
}
//将字节数组转成字符串
byte[] arr2 = {97,98,99,100};
//String(byte[] bytes)
String s4 = new String(arr2);
System.out.println(s4);
//String(byte[] bytes, int offset, int length)
s4 = new String(arr2,0,2);
//String(byte[] bytes, String charsetName)//使用指定的编码将字节数组转换成字符串
byte[] arr3 = {-60,-29,-70,-61};
s4 = new String(arr3,"GBK");
System.out.println(s4);
//将字符串转成字节数组
//byte[] getBytes()//这里使用的是默认字符集,
byte[] arr4 = s4.getBytes();
for (byte b : arr4) {
System.out.println(b);
}
// System.out.println("你好".getBytes("GBK"));
//将基本数据类型转换成字符串
//String.valueOf()
String s5 = String.valueOf(false);
System.out.println(s5+1);
//3.替换:
//String replace(char oldChar, char newChar)
String s6 = s.replace("1000", "****");
System.out.println(s6+" "+s);//s的值还是100phone,说明字符串是常量,本身不会发生改变
//子串:
//String substring(int beginIndex) 取值包括当前位置
System.out.println(s.substring(4));
//String substring(int beginIndex, int endIndex) //包含起始位置,不包含结束位置,到结束位置的前一位
System.out.println(s.substring(4, 6));
//转换,去除空格,比较:
//大小写转换
//String toUpperCase()
String s7 = s.toUpperCase();
System.out.println(" "+s);
System.out.println(s7);
//String toLowerCase()
s7 = s.toLowerCase();
System.out.println(s7);
//将字符串两端的空格去掉,注意中间的空格不会去掉
String s8 = " hello ";
s8 = s8.trim();
System.out.println(s8+"ok");
//String trim()
//按字典顺序比较两个字符串
/*
* 什么叫字典顺序:
* 按照ASCII表去比较当前的两个字符串,,ASCII大的被认为是大字符
* 规则:从左边第一个字符开始比较
* 如果当前字符不相同,直接认为ASCII大的字符串是大字符串,后面的字符停止比较
* 当前的字符比较的具体规则:使用前面的字符减去后面的字福,返回的是差值,如果是负数,说明前面的字符串小于后面的,
* 如果是0,说明两个字符串相等,
* 如果是正数,说明前面的字符大于后面的
*/
//int compareTo(String anotherString)
System.out.println(s.compareTo("1000phone"));
//4.切割: String[] split(String)
/*
* 1.再被切的字符串中,刀要存在
* 2.刀不会被当作被切后的内容
* 3.字符串中出现并排的刀,切出的是空格
* 4.使用空去切,得到的是所有单独的字符
*
*/
String s9 = "studdent";
String[] strings = s9.split("d");
for (String string : strings) {
System.out.println(string);
}
}
}
可变字符串
- 可变字符串:(字符串缓冲区)
- StringBuffer:(jbk1.0)是考虑线程安全的,因为它本身是线程安全的
- StringBuilder:(jdk1.5)不需要考虑线程安全的,因为它本身是线程不安全的,
- 在不考虑线程安全的情况下,尽量使用StringBuilder,因为效率高,速度快
常用方法
StringBuffer和Stringbuilder方法相同,这里一StringBuffer举例
public class Test {
public static void main(String[] args) {
// StringBuffer:
//1.存储:
//StringBuffer append(boolean b) 从最后插入
//创建空的可变字符串
StringBuffer stringBuffer1 = new StringBuffer();
stringBuffer1.append("1000");
stringBuffer1.append("phone");
System.out.println(stringBuffer1);
//StringBuffer insert(int offset, boolean b) 从指定位置插入
System.out.println(stringBuffer1.insert(4, "bingbing"));
//2.删除:
//StringBuffer delete(int start, int end)
System.out.println(stringBuffer1.delete(4, 12));
//StringBuffer deleteCharAt(int index)
//System.out.println(stringBuffer1.deleteCharAt(0));
//3.修改:
//StringBuffer replace(int start, int end, String str) 替换指定的子字符串
System.out.println(stringBuffer1.replace(0, 4, "bingbing"));
System.out.println();
//void setCharAt(int index, char ch) 修改一个字符
//4.获取:
//char charAt(int index)
System.out.println(stringBuffer1.charAt(0));
//int indexOf(String str)从左到右查
System.out.println(stringBuffer1.indexOf("b"));
//int indexOf(String str, int fromIndex)从指定位置从左到右
System.out.println(stringBuffer1.indexOf("bing",2));
//int lastIndexOf(String str)
System.out.println(stringBuffer1.lastIndexOf("b"));
//返回指定子字符串(从右边开始计数)在此字符串第一次出现时的索引
//int lastIndexOf(String str, int fromIndex)
//返回指定子字符串(从右边开始计数,范围:当前指定的位置-0)在此字符串第一次出现时的索引
//int length()
//返回长度(字符数)。
System.out.println(stringBuffer1.length());
//5.反转:
//StringBuffer reverse()
System.out.println(stringBuffer1.reverse());
}
}
网址的简单介绍![在这里插入图片描述](https://img-blog.csdn.net/20181004170753988?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjQ3ODY0MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
- 学习网址:http://www.baidu.com:80/aadsfsf/sfs?name=bingbing&age=18
- 首先学习客户端服务器
- 网址的功能:实现客户端与服务器端的通信
- 协议:是制定一个统一的规范
- http协议:超文本传输协议,实现的是网络间的通信的一个通信规则
- huttps协议:安全的http协议—可以省略,默认是http协议
- 域名/IP:标记网络上的唯一一台主机 可以简化写:baidu
- 端口号:标记同一台主机上的某一个服务器 [0,65536]—可以省略,默认80
- 资源路径:可以省
- 查询条件:可以省