Java 学习笔记(2015.7.20~24)
Java
day11
父类中使用public定义的方法,子类的访问权限必须是public
private定义的成员只能自己用
覆写方法时可以扩大权限,比如default>public ,不能缩小权限,会报错
private方法不能被子类继承,但是可以被父类的方法调用
声明成员变量,一般名字前加个m
抽象类中是可以定义构造方法的
在接口中的抽象方法必须定义为public权限,不写也是public
向上转型,父类指向子类
接口跟抽象类的异同
熟悉匿名内部类
接口由全局常量和抽象方法组成,所以
String AUTHOR = "Jensen";等价于public static final String AUTHOR = "Jensen";
void print();等价于public abstract void print();
String getInfo();等价于public abstract String getInfo();
Java允许一个接口继承多个接口:
interface 子接口 extends 父接口A,父接口B,...{ }对象 instanceof 类 返回boolean类型
抽象类 制作模板
接口 制定标准
设计模式 工厂模式
在接口和子类之间加入一个过渡端,通过此过渡端取得接口的实例化对象,一般都会称这个过渡端为工厂类。"orange".equals(className) 为什么在进行字符串判断时要把字符串常量写在前面?
答:这样做可以避免空指向异常,比如传入的值为null时
数组
数组可以看成是多个相同类型数据组合
数组变量属引用类型
一维数组
数组的声明
int[] a; // 建议使用这种
byte[] c;
int b[];
注意:
Java语言中声明数组时不能指定其长度
初始化
静态初始化
int b[] = new int[]{1,2,3,4,5};// 静态初始化
int[] c = {1,2,34,56,7};// 静态初始化
动态初始化
根据下标从数组中取值,下标:可以是整型常量或整型表达式
下标从0开始
在控制台打印数组中所有元素
每个数组都有一个属性length指明它的长度
排序:
冒泡排序 选择排序 插入排序 希尔排序
排序:
替换
if(a[i]>=a[j]){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
二维数组
二维数组可以看成以数组为元素的数组
声明
int[][] a
int b[][]
初始化
int b[][] =
{{1,2},{2,2,3,45,6},{2,3,6,7}};
int[][] c =
new int[][]{{1,2},{2,2,3,45,6},{2,3,6,7}};
二位数组初始化
先初始化高维
int[][] a = {{1,23,4},{1,3,4},{2222}};
day12
拆箱与装箱
int x = 30;Integer i = new Integer(x);//装箱int y = i.intValue();//拆箱
包装类的应用
包装类在实际中用的最多的是将字符串变为基本数据类型的操作,例如将一个全由数字组成的字符串变为一个int或float类型的数据。
String str1 = "30";String str2 = "30.3";int x = Integer.parseInt(str1);float f = Float.parseFloat(str2);
匿名内部类
接口本身是不能直接进行实例化的,所以在接口实例化后要有一个大括号,在其中编写具体的实现方法。
匿名字符串放在 data segment 里面
字符串,length() 方法
对象,length 属性
day13
1、常用类String
2、正则表达式
格式不用记
句点.表示单个字符
方括号[]表示可能出现字符集里的单个字符
括号()可表示多个字符
大括号{}表示次数
转义字符“\”
一般正则表达式是由通配符和固定字符组成
栗子:
字母 _ 数字 大于6小于10位
"\w{6,10}"邮箱:[email protected]
"\w+@\w+\.\w+"手机:以13 15 18 17 开头 11位
"[1][3578]\d{9}"
只要记住:
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
3、常用类 StringBuffer 代表可变的字符序列
String
StringBuffer
reverse()
注意:StringBuffer默认容量16;
如果传入的数据量大于当前容量
StringBuffer容量将发生变化 2*之前容量 + 2
day14
1、StringBuffer与StringBuilder的区别:
StringBuffer :同步 线程安全 效率较低
StringBuilder :异步 不安全 单线程效率高
2、基本数据类型包装类
基本数据类型 包装类 boolean Boolean byte Byte char Character short Short int Integer long Long float Float double Double Integer
public static int parseInt(String s)
public static Integer valueOf(String s)
java5.0之后有自动拆装箱功能,如下
Integer i = new Integer(100);int j = i + 100;// 自动拆箱int k = 100;Integer m = k; // 自动装箱
Character
isUpperCase(char ch) 判断字符是否是大写字母
isLowerCase(char ch) 判断字符是否是小写字母
isLetter(char ch) 判断字符是否是字母
isDigit(char ch) 判断字符是否是数字
3、Date、Calendar、DateFormat等与时间相关的类
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class Test { public static void main(String[] args) { // 创建日期格式对象 SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); try { Date date = format.parse("2011年11月11日 11:11:11"); System.out.println(date.getTime()); } catch (ParseException e) { e.printStackTrace(); } // 创建Calendar对象 Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR); System.out.println("year = " + year); int month = calendar.get(Calendar.MONTH); System.out.println("month = " + (month + 1)); int day = calendar.get(Calendar.DAY_OF_MONTH); System.out.println("day = " + day); } }
输出结果:
1320981071000 //从1970到该时间点的毫秒数
year = 2015 //打印今天的日期
month = 7
day = 25