java基础<四>

时间:2021-08-23 16:16:50

多维数组:

二维数组举例: java中二维数组不必是规则矩阵形式

int[][] a={{1,2},{2,3},{3,4,5}}  

java基础<四>

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参数。源数组中位置在srcPossrcPos+length-1之间的组件被分别复制到目标数组中的destPosdestPos+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]之间的数,仍然是当作基本数据类型来处理。
时间处理相类类::::::

java基础<四>

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();
}

}
}

File类::文件操作:::::

//递归打印目录结构
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语句。

方法重写中声明异常原则,包含如下意思:

父类没有声明异常,子类也不能。不可抛出原有方法抛出异常的父类或上层类。抛出的异常类型的数目不可比原有的还多。