25.1.3
java数组:
dataType[] arrayRefVar //推荐写法
//int[] mylist
//或
dataType arrayRefVar[]
//int mylist[]
创建数组对象:
arrayRefVar = new dataType[arraySize];
dataType[] arrayRefVar = new dataType[arraySize];
for-each循环:
java for-each循环,会类比于python for i in range array:这里的i不是指数组的下表,而是“数组”内的内容。如:hello,world!我们的循环i第一个表示的是h。
Java的for each循环就是如此。
for(type element: array)
{
System.out.println(element);
}
double[] array={1.0,5.3,6.7}
for (double i :array){
System.out.println(i);
}
//输出1.0 5.3 6.7
数组在函数的应用:
- 作为存入参数
- 作为返回参数
//假设我们要做对数组里的数字都加一。
public static int[] ArrayAddOne(int[] array) {
for (int i :array){
i=i+1;
}
return array
}
//其中第一个int[]是我们返回数值的类型,是一个int数组。
//第二个int[],表示传入一个int数组。这个数组被我们命名为array。
//ArrayAddOne是我们要调用的方法名。
多维数组:
type[][] typeName = new type[typeLength1][typeLength2];
//String[][] str = new String[3][4];
数组小测试:
class TestIt { public static void main ( String[] args ) { int[] myArray = {1, 2, 3, 4, 5}; //定义数组 ChangeIt.doIt( myArray ); //调用class类中的doIt方法, for(int j=0; j<myArray.length; j++) //遍历数组输出 System.out.print( myArray[j] + " " ); } } class ChangeIt { static void doIt( int[] z ) { z = null ; //将z指向null。 } }结果输出:
- 1 2 3 4 5
class LowHighSwap { static void doIt( int[] z ) //这里对数组的修改,直接影响数组对象的结果 { int temp = z[z.length-1];//第一个位置和最后一个位置互换数值 z[z.length-1] = z[0]; z[0] = temp; } } class TestIt { public static void main( String[] args ) //效果和上题差不多 { int[] myArray = {1, 2, 3, 4, 5}; LowHighSwap.doIt(myArray); for (int i = 0; i < myArray.length; i++) { System.out.print(myArray[i] + " "); } } }5 2 3 4 1
int [] ar = {1,2,3,4,5};ar[4]值为多少 //第一个位置下表为0
- 5
int [] ar = {1,2,3,4,5,6};数组ar的大小是 : //算数组内的数据个数即可
- 6
class ChangeIt { static void doIt( int[] z ) { int[] A = z; //这里对A进行赋值,其实两个指向的对象都是最开始的对象myArray A[0] = 99; //这里赋值就是对myArray进行修改。 } } class TestIt { public static void main( String[] args ) //和第一题差不多的思路 { int[] myArray = {1, 2, 3, 4, 5}; ChangeIt.doIt(myArray); for (int i = 0; i < myArray.length; i++) { System.out.print(myArray[i] + " "); } } }结果:
99 2 3 4 5
float [] nums = {1.1f,2.2f,3.3f};以下哪个循环将在一个单独的行中显示此数组中的所有数字 :
for (int i =0; i < 3; i++) System.out.print( nums[i]);
//nums数组长度为3,下标分别为0,1,2,故到<3,刚好结束循环
void blur(char[] z, String st) { if(z.length < st.length()) return; //比较两个的长度如何,希望st的长度小于或者等于z for (int i = 0; i < st.length(); i++) { //赋值 z[i] = st.charAt(i); } }下面这个方法实现什么功能 ?
如果数组中有足够的空间,则会将字符串中的字符逐个复制到数组中。
哪一个选项可以在索引处找到名为 ar 的数组中的最后一个值?
ar.length - 1 //数组起始是0
数组是一个?
相同的数据类型,值可相同,也可不同 //数组内数据类型一样,其他可不一样
double[] rats = {1.2, 3.4, 5.6}; routine( rats );Java 使用按值调用。 以下方法调用传递给程序的值是多少 ?
- rats 数组的引用
int[] arr = new int[9]; System.out.println(arr[9]);以下代码的输出是什么 ?
- 错误,因为索引超出范围 //数组末尾应该是length-1
byte[] values = new byte[x];以下数组最高索引值是多少 ?
- x-1 //上题同理
以下程序段的输出是什么 ?
int[] num7 = {1, 3, 5, 2, 8, 9, 5, 0}; int x7 = num7[0]; for (int i = 0; i <= num7.length-1; i++) //循环比较数组内的大小,最小的会被赋值到x7上 { if(num7[i] < x7) { x7 = num7[i]; } } System.out.println(x7);
- 0
以下数组的长度是?
int[] grades = new int[4];
- 4
以下代码打印到控制台的数字是多少 ?
int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9}; for (int i = 0; i < 8; i++) { //从下标0打印到下标7,则从1打印到8 System.out.println(numbers[i]); }
- 1-8
日期时间:
Date类的包
//创建对象Date()此方法可以以当前的时间创建对象
//Date(long millisec) 该参数是从 1970 年 1 月 1 日起的毫秒数。
//参考自菜鸟教程https://www.runoob.com/java/java-date-time.html
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
// 初始化 Date 对象
Date date = new Date();
// 使用 toString() 函数显示日期时间
System.out.println(date.toString());
}
}
日期的比较
- 使用 getTime() 方法获取两个日期(自1970年1月1日经历的毫秒数值),然后比较这两个值。
- 使用方法 before(),after() 和 equals()。例如,一个月的12号比18号早,则 new Date(99, 2, 12).before(new Date (99, 2, 18)) 返回true。
- 使用 compareTo() 方法,它是由 Comparable 接口定义的,Date 类实现了这个接口。
使用 SimpleDateFormat 格式化日期
import java.util.*;
import java.text.*;
public class DateDemo {
public static void main(String[] args) {
Date dNow = new Date( ); //创建当前时间的对象
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");//想要输出的格式
System.out.println("当前时间为: " + ft.format(dNow));
}
}
方法
修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
...
return 返回值;
}
方法可以使我们写的代码更简洁,也有利于我们维护
方法的调用
Java 支持两种调用方法的方式,根据方法是否返回值来选择。
当程序调用一个方法时,程序的控制权交给了被调用的方法。当被调用方法的返回语句执行或者到达方法体闭括号时候交还控制权给程序。(这个跟汇编语言、计算机组成原理有关)可以不深究。
整体使用的简单例子
上例中我们在add中加入了两个int a,int b 我们要严格按照方法内需要传的参数进行书写。
方法的重载
拿上例来说就是我们的方法名字都叫add,但我们方法内的参数可以换,我们可以换成浮点数相加如:
public static double add(double a, double b) { return a + b; }
可变参数
有时我们不知道我们具体有多少个数据,如果一个一个写方法太过麻烦,因此我们可以使用可变参数(注意:可变参数需要写在最后面),只需要在我们需要多个参数的参数类型后面加入...即可
以上例add为例
构造方法
本质上还是方法,不过他的作用是在我们创建对象时用来初始化对象的属性。
构造方法的类型
- 无参构造方法(默认的方法)
- 有参构造方法
无参构造方法:
不需要参数。
有参构造方法:
调用有参构造方法时,可以为对象的属性进行初始化。如:下面的人有name(名字)和age(年龄)等等的属性。
public class Person {
String name;
int age;public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
构造方法的重载
本质上的目的:就是我们初始化对象的时候可以选择对哪些属性赋值,哪些可以等等再由我们操作赋值。
构造方法的this关键字:
public Person(String name, int age) {
this.name = name; // this.name 表示类的属性
this.age = age;
}