多维数组:
二维数组举例: java中二维数组不必是规则矩阵形式
int[][] a={{1,2},{2,3},{3,4,5}}
int[][] a=new int[3][];
a[0]=new int[10];
a[1]=new int[9];
a[2]=new int[8];
数组的拷贝:::
system类里定义了一个arraycopy方法。
JAVA数组的复制是引用传递,而并不是其他语言的值传递。
这里介绍java数组复制的4种方式极其问题:
第一种方式利用for循环:
int[] a={1,2,4,6};
int length=a.length;
int[] b=new int[length];
for (int i = 0; i < length; i++) {
b[i]=a[i];
}
第二种方式直接赋值:
int[] array1={1,2,4,6};
int[] array2=a;
这里把array1数组的值复制给array2,如果你这样去运行,就会发现此时两个数组的值是一样的。这是传递的是引用(也就是地址),之后改变其中一个数组另一个也会跟着变化。
第三种方式:
利用Arrays自带的copyof
int copy[] = Arrays.copyOf(a, a.length);
第四种方式:
这里再介绍一下System.arraycopy这个函数,从JAVA API中找了一段。大家看一下。
public static voidarraycopy(Object src, int srcPos, Object dest, int destPos, int length)从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。从src引用的源数组到dest引用的目标数组,数组组件的一个子序列被复制下来。被复制的组件的编号等于length参数。源数组中位置在srcPos到srcPos+length-1之间的组件被分别复制到目标数组中的destPos到destPos+length-1位置。
打印数组::::::::::::::java.util包可以好好研究一下。int a[]={1,3}; java.util.Arrays.toString(a);
数组排序:Arrays.sort(a)
二分查找法:Arrays.binarySearch(a,12)
增加for循环:for(int i:a){}
常用类,包装类:
字符串相关类:String,StringBuffer,StringBuilder
时间处理相关类:Date,DateFormat,SimpleDateFormat,Calendar
自动拆箱与自动装箱:即:Integer i=100, int a=new Integer(100);
缓存处理:
Integer a=1234;
Integer b=1234;
System.out.println(a==b); 一会为true,一会为false。原因是:[-128,127]之间的数,仍然是当作基本数据类型来处理。
时间处理相类类::::::
Date时间类:java.util.Date 它的对象表示一个特定的瞬间。精确到毫秒。
JAVA中的时间说白了也是数字,是从1970年1月1号0点开始到某个时刻的毫秒数,类型是long。
//很多方法都遗弃了
Date t=new Date();
long t1=System.currentTimeMillis();
long t3=t.getTime();
//getTime,setTime没有被遗弃
t.setTime(t1);
//equals方法写的非常秒
public boolean equals(Object o){
return o instanceof Date && getTime()==((Date)o).getTime();
}
//跟日期,年月日相关的计算都丢给一个类Calendar
Date类的核心就是那个数.long值。
可以把源码看看,但是也要适度,做什么事都要适度,都不要过度。
时间和字符串的相互转换:DateFormat,SimpleDateFormat
DateFormat df=new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");//抽象类\
Date d=new Date();
out.println(df.format(d)); //将时间对象格式化成字符串
String string="1977-7-7 10:23:15";
DateFormat df2=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date=df2.parse(string);
Calendar类::::::
人们对于时间的认识是:某年某月某日,计算机是long类型的数字。通过Calendar在二者之间搭起桥梁。
GregorianCalendar是Calendar的一个具体实现子类,注意:月份:1月是0,2月是1,星期:周日是1,周一是2
因为月份和星期的问题非常恼火,因为1月是0,周日是1.可以考虑其它包.
Calendar c=new GregorianCalendar();
c.set(2001, 0, 10, 12, 30);
c.setTime(new Date());
Date date=c.getTime();
out.print(date);
//日期计算
c.add(Calendar.YEAR, 10);
可视化日历:
java可视化日历的实现实例源代码,日期操作练习题,接收键盘输入,设置当前日期,求出当月最大的天数,java calendar的应用介绍。java输出当前日历的原理。
package bw123.com;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;
/**
* 可视化日历程序
* @author dell
*
*/
public class Rili {
public static void main(String[] args) {
System.out.println(“请输入日期(按照格式:2030-3-10):”);
Scanner scanner = new Scanner(System.in);
String temp = scanner.nextLine();//读取用户键盘输入的一行字符串
DateFormat format = new SimpleDateFormat(“yyyy-MM-dd”);//设置日期的时间格式
try {
Date date = format.parse(temp);//将时间字符串转换为long类型的时间原型
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);//设置当前的时间
int day = calendar.get(Calendar.DATE);
calendar.set(Calendar.DATE, 1);
int maxDate = calendar.getActualMaximum(Calendar.DATE);//获取当月最大的日期数
System.out.println(“日\t一\t二\t三\t四\t五\t六”);//打印星期数
for(int i=1;i<calendar.get(Calendar.DAY_OF_WEEK);i++){//假如第一天不是星期一,那么就在这天前输出相应的空格数
System.out.print(‘\t’);
}
for(int i=1;i<=maxDate;i++){
if(i==day){
System.out.print(“*”);//在当前日期前输出*号
}
System.out.print(i+”\t”);
int w = calendar.get(Calendar.DAY_OF_WEEK);
if(w==Calendar.SATURDAY){//每周星期六换行
System.out.print(‘\n’);
}
calendar.add(Calendar.DATE, 1);
}
} catch (ParseException e) {
e.printStackTrace();
}
}
}
//递归打印目录结构
static void printFile(File f,int level){
for(int i=0;i<level;i++){
out.print("-");
}
out.print(f.getName());
if(f.isDirectory()){
File[] files=f.listFiles();
for(File temp:files){
printFile(temp, level+1);
}
}
}
异常机制:
try-catch-finally-return执行顺序:
在没有抛异常的情况下:先把try中执行完,然后finally中,然后try中的return语句。
抛出异常的情况下,try-catch-finally-catch中的return。
如果finally中的return语句,则全部执完毕。所以finally中一般不要加return语句。
方法重写中声明异常原则,包含如下意思:
父类没有声明异常,子类也不能。不可抛出原有方法抛出异常的父类或上层类。抛出的异常类型的数目不可比原有的还多。