📄 java6.txt
字号:
sd 0804 Javaday6 2008年6月18日Review:abstract 未实现 (抽象类可以修饰类,方法抽象类:无法被实例化,不能new+本类构造,但能new+子类抽象方法:没有方法体,不允许直接调用interface 接口看作一种特殊的抽象类接口没有构造,属性都是public static final,所有的方法都是public abstract子类中重写类 extends 类(单继承)类 implements 接口(多继承)接口 extends 接口(多继承)private 本类无修饰 本类 本包protected本类 本包 可被子类继承public 本类 本包(需导入) 子类 其他Objectfinalize 垃圾回收 JVM自动调用的方法clone()方法equals()比较对象是否相等 ==比较的是真实内存地址教室类作业:------------------------------------------------------------------------------------------package com.tarena.day06;public abstract class Person {//abstract抽象类 Person private String name;//封装属性 private int age; public Person(){} //最好写出无参构造 public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }------------------------------------------------------------------------------------------package com.tarena.day06;public class Student extends Person{//学生类继承Person父类 private int id;//子类属性 public int getId() { return id; } public void setId(int id) { this.id = id; }}------------------------------------------------------------------------------------------package com.tarena.day06;public class Teacher extends Person{//定Teachends类继承petsin类 private double sal; public double getSal() { return sal; } public void setSal(double sal) { this.sal = sal; }}------------------------------------------------------------------------------------------package com.tarena.day06;public class Admin extends Person{//网络管 private String adept; public String getAdept() { return adept; } public void setAdept(String adept) { this.adept = adept; } }------------------------------------------------------------------------------------------package com.tarena.day06;public final class ClassRoom {//final不可更改的教室类//没有必要产生子类,所以加上final private final Student[] stu;//属性 //数组 private static Teacher t; private static final Admin ADMIN = new Admin();//是常量 public ClassRoom(int i){ //确定人数 if(i>0){//判断 stu = new Student[i]; }else{ stu = null; } } public static Admin getADMIN() { return ADMIN; } public static Teacher getT() { return t; } public static void setT(Teacher t) { ClassRoom.t = t; } public static Admin getADMIN() {
return ADMIN;
} public Student[] getStu() { return stu; }} ------------------------------------------------------------------------------------------Java06toString 用String去描述一个对象------------------------------------------------------------------------------------------package com.tarena.day06.object;public class TestToString { @Override public String toString(){ //使用的时候最好重写toString return "这是一个测试类"; } public static void main(String[] args) { TestToString tts = new TestToString(); System.out.println(tts.toString()); System.out.println(tts); //打印对象的时候会自动调用对象的toString方法 System.out.println(tts + "abc"); //在打印一个对象的时候或字符串连接的时候会自动调用toString() }}输出结果:这是一个测试类这是一个测试类这是一个测试类abc------------------------------------------------------------------------------------------加法(+):两种解释:加法; 字符串连接: 1.加号两端都是数字或是可以转成数字(主要针对char)的时候都是按加法处理 2.只要一端是String 就按字符串连接处理 3.如果两端没有String,又不都是数字,那一定是非法的从语法上可以实现 equals和hashcode不一致,规范上应该是一致的int+"" 将int型转换成String类型如果想要把String类型转换成int 就要用到封装类**封装类(Wrapper): 基本类型的对象化Integer: 1.对象化基本类型2.把一个String转化成一个 int 常用的 static int parseInt(String) 将String字符串转换成int------------------------------------------------------------------------------------------package com.tarena.day06.object;public class TestInteger { public static void main(String[] args) { Integer i1 = new Integer(2); Integer i2 = new Integer("2"); //只有这两种效果 System.out.println(i1==i2); //new 了两次所以地址不一样,false System.out.println(i1.equals(i2));//equals被重写了,比较的是值,所以结果是true int temp = Integer.parseInt("24");//字符串转换成int,如果是"24a"就会报错,这不是数字格式(十进制) System.out.println(temp); Integer i3 = 128;//5.0新特性,自动装箱 Integer i4 = 128;//自动把int转换为Integer int i5 = i3 + i4; //自动解箱,把Integer转换成int,"+"两端是int型 int i6 = new Integer(128); //自动解箱 System.out.println(i3==i4);//filse//Integer池超过了容量,所以这时候就在堆中new了一个新的,所以地址值不同了,如果是 -128~127则为true System.out.println(i3.equals(i4));//equals被重写,所以比较的是值,这里是true System.out.println(i3==i6);//如果是自动装箱就是false,自动解箱就是true,这里发生的是自动解箱 //Integer i7 = null; //int i8 = i7;//自动解箱在对象为空的时候会失败,小心对象不能为空 double d = Double.parseDouble("24.34");//将字符串转换成Double类型 }}输出结果:falsetrue24 ------------------------------------------------------------------------------------------Integer 自动装箱池 只应用自动装箱的时候,这个池的大小是 -128~127,是以Integer[],长度是256,如果没有超过-128~127那就不会new ,如果超过了就会new 一个新的在堆中StringString 是一组不可改变的unicode字符序列, String应用了一种不变模式,一个String的值不可能改变的,可以改变的是指针,双引号的定义是字面值所有字面值都会放在常量池中------------------------------------------------------------------------------------------package com.tarena.day06.string;public class TestPool { public static void main(String[] args) { String s1 = new String("abc"); //在内存中生成一个对象 String s2 = new String("abc"); String s3 = "abc"; //在内存中生成两个对象 String s4 = "abc"; System.out.println(s1==s2); System.out.println(s1.equals(s2)); System.out.println(s3==s4); System.out.println(s3.equals(s4)); String s5 = s3 +"d";//对字符串进行连接(+)的时候,结果不在池里 String s6 = "abcd"; System.out.println(s5==s6);//s5不在池里,地址一定不同 System.out.println(s5.equals(s6));//比较内容,所以是true }}------------------------------------------------------------------------------------------String API构造:String(byte[], int int) String(String)方法:1.startswith()以...开始 endswith()以...结束2.equals() 比较 /length() 长度3.replaceall() 替换4.split(String)拆分5.substring() 截取6.indexOf() 查找7.toLowCase()/toUpperCase() 改变大小写8.trim() 首尾截空白9.matchs()匹配正则表达式10.byte[] new String String getBytes byte[]------------------------------------------------------------------------------------------package com.tarena.day06.string;public class TestString { public static void main(String[] args) { String s1 = "zhang,man,25"; String[] ss = s1.split(","); for (int i = 0; i < ss.length; i++) { System.out.println(ss[i]); } String s2 = " a b c "; //只去首尾5个空白 System.out.println(s2.trim().length()); String s3 = "abcdddabcdddabc"; //把所有abc的位置显示出来 int index = 0; for (int i = 0; i < s3.length(); i++) { index = s3.indexOf("abc",index); if(index==-1)break; System.out.println(index++); } }}输出结果:zhangman2550612------------------------------------------------------------------------------------------正则表达式:不仅仅为java服务,验证用户输入的合理性[ ] 在[]选一个( ) 在( )内的视为一个整体 如:(com)| (com.net)a-z a到z所有小写字母[a-z A-Z 0-9 _]字母,数字,下划线\ 转义字符| 或者\d 所有数字[0-9]\D 所有非数字\w 单词里拥有的字符\W 非单词字符[^ ] 中括号里如果有^ 代表非? 0-1个+ 1-n个* 0-n个{n} 正好n个{n,} >=n个{n,m} 大于等于n,小于等于m,双闭区间[n,m]正则以^ 开头 以$结尾 ------------------------------------------------------------------------------------------package com.tarena.day06.string;public class TestZz { public static void main(String[] args) { String name = "^[a-zA-Z0-9]{5,12}$"; //5-12位的字母数字下划线做用户名 String temp = "@zhang"; String zip = "\\d{6}"; // \\才是\ \d的时候可以不用^$ String temp1 = "100032"; String email = "^([a-zA-Z0-9_-])+[@]([a-zA-Z0-9_-|])+[.]((com)|(net)|(com.cn))$";//在中括号内的视为一个整体 String temp2 = "100086@sina.net"; if(temp.matches(name)){ System.out.println("输入正确"); }else{ System.out.println("输入错误"); } if(temp1.matches(zip)){ System.out.println("邮编输入正确"); }else{ System.out.println("邮编输入错误"); } if(temp2.matches(email)){ System.out.println("邮箱输入正确"); }else{ System.out.println("邮箱输入错误"); } }}输出结果:输入错误邮编输入正确邮箱输入正确------------------------------------------------------------------------------------------在String中与正则表达式相关的方法(如:split/replaceAll等),在遇到特殊字符串做参数的时候,注意转义------------------------------------------------------------------------------------------package com.tarena.day06.string;public class Test { public static void main(String[] args) { String te = "1$2$3$4"; String[] re = te.split("\\$"); for (int i = 0; i < re.length; i++) { System.out.println(re[i]); } String a = te.replaceAll("\\$",","); System.out.println(a); }}输出结果:12341,2,3,4------------------------------------------------------------------------------------------String的修改对于内存来说是非常大的开销,所以就有一组可以改变的unicode字符序列,就引入StringBuffer,但后来在5.0后被替换成StringBuilderStringBuffer支持多人并行操作,但是效率比较低StringBuilder多人并行操作会出错,但是效率比较高并行与串行并行:同时进行串行:一个接一个进行StringBuilder/Buffer1.构造:new 的时候传参是String类型的2.append insert replace delete3.反转:reverse() 容量:capacity()StringBuilder/StringBuffer调用方法时自身内容改变,而String调用方法的时候是不变的,想要改String除非重新赋值,否则无法修改------------------------------------------------------------------------------------------package com.tarena.day06.string;public class TestStringBuilder { public static void main(String[] args){ StringBuilder s1 = new StringBuilder("abc"); StringBuilder s3 = s1; //与s1指向同一个SrtingBuilder System.out.println(s1.length());//长度为3 System.out.println(s1.capacity());//容量是19 s1.append("d");//append追加到序列 s1.append("e"); StringBuilder s2 = s1.append("e"); System.out.println(s1.length());//长度变为5 System.out.println(s1.capacity()); //容量还是19,没有超过19,容量够用 System.out.println(s1==s2); System.out.println(s3); String str = new String("abc"); str = str.substring(1); System.out.println(str); }}输出结果:319619trueabcdeebc------------------------------------------------------------------------------------------作业:String temp = "zhang,man,25,zhang$163.net;li,man,26,li@rr$wang,lady,21,wang@sina.com";要求拆分出人员信息,验证人名和email是否符合要求,如果符合要求,放入对象中
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -