一维数组
1、数组
- java语言中的数组是一种引用数据类型
- 1.数组实际上是一个容器,可以容纳多个元素(同类型数据的集合)。
- 2.可以存储基本数据类型,也可以存储引用数据类型。
- 3.因为是引用类型,数组对象是堆内存当中的。
- 4.数组中如果存储的是“java”对象的话,实际上是对象的引用(内存地址)。
- 5.数组一旦创建,java中规定,长度不可变。
- 分类:
- 1.一维数组(运用较多)
- 2.二维数组
- 3.多维数组
- 6.所有java数组对象都有length属性,用于获取数组中元素的个数。
2、数组在内存的存储
-
1.数组在内存方面存储时,数组中的元素内存地址(每个元素有规则的挨着排列)是连续的。内存地址连续是数组存储元素的特点。数组实际上是简单的一种数据结构。
-
2.所有数组都是拿“第一个小方框的内存地址”作为整个数组的内存地址。即就是第一个元素的内存地址。
-
3.数组中的每一个元素都是有下标的,第一个元素下标为0,最后一个length-1。存取的时候,都需要对下标进行处理。
-
4.一维数组的优点和缺点:
-
优点:查询某个下标元素效率极高。
- 每个元素内存地址在空间存储上是连续的。
- 每个元素类型相同,占用空间大小一致。
- 知道一个元素内存地址,知道每一个元素占用空间大小,又知道下标,所以通过一个数学表达式可以计算出某个下表元素的内存地址。直接通过内存地址定位元素,所以数组的检索效率最高。6.
- 存储100个元素,和存储100万个元素,检索方面效率是相同的。因为不是一个一个查找得到,而是通过数学表达式计算出来的。
-
缺点:
-
-
由于为了保证数组中每个元素内存地址连续,所以数组上随机删除增加元素时候效率较低。因为随机删除元素会涉及到后面元素统一向前或者向后的位移的操作。
-
不能存储大量数据。
因为很难找到一块很大的连续的内存空间。
-
对于数组最后一个元素的增、删是没有影响的。
-
-
-
5.声明定义一维数组
- 语法格式:
int | int[] arr |
---|---|
String | String[] arr |
boolean | boolean[] arr |
double | double[] arr |
-
6.一维数组初始化
-
public class Test{ public static void main(String[] args){ int[] a = {1,3,5,7,9} int[] b = new int[6]; for(int i=0;i<a.length;i++) { System.out.println(a[i]); }//从前到后 for(int i = a.length-1;i>=0;i++){ System.out.println(a[i]); } } }
-
-
7.创建数组时:确定数组元素:静态初始化
- 不确定元素:动态初始化(先给空间,后期赋值)
3、main方法上面的"String[] args"
-
1.jvm负责调用main方法,jvm调用main方法时会自动传一个String数组。
-
2.args.length 默认值是0.说明数组长度是0.说明传过来一个东西,里面没有任何数据。
- String[] str = new String[0];
- String[] str1 = { };
this
-
1、this 是一个关键字,全部小写。
-
2、this 是什么,内存方面是什么样的?
- 一个对象一个this
- this 是一个变量,一个引用。this 保存当前对象的内存地址,指向自身。严格意义来说,this 代表的就是当前对象。this存储在堆内存当中对象的内部。
- this 只能使用在实例方法中,谁调用这个实例方法,this 就指向谁。
- this. 大部分情况下可以省略。
- this 代表当前对象,静态方法中没有对象。
-
3、设计一个日期类,每个日期对象都可以描述年月日信息。
class Date{ private int year; private int month; private int day; public Date(){ } public Date(int x,int y,int z){ year = x; month = y; day = z; } public int getYear(){ return year; } public void setYear(int nian){ year = nian; } }
-
设计一个男人类,每个类都有身份证号、姓名、性别、女人。反之。
class Man{ String idCard; String name; static boolean sex = true; Woman w1; }
class Woman{ String idCard; String name; static boolean sex = false; Man m1; }
设计一个银行账户类
class Account{ String name; int password; double money; }
-
4、this
-
this 只能使用在实例方法中,不能使用在静态方法中。
-
this 关键字大部分情况下都可以省略,什么时候不能省略呢?
- 在实例方法中,为了区分局部变量和实例变量。
-
this 的用法:
-
除了使用在实例方法中,还可以用在构造方法中。
-
新语法:通过当前的构造方法去调用另一个本类的构造方法,语法格式如下:
this(实际参数列表);
public Student{ String name; int nov; public Student(){ this("张三",1); } public Student(String name,int nov){ this.name = name; this.nov = nov; } }
通过一个构造方法1去调用另一个构造方法2,但必须在同一个类中。
注意:this();只能出现在构造方法的第一行。必须是构造器的第一个语句,调用的 必须位于同一个类下。
-
-
-
**结论:所有实例相关的,都是先创建对象,通过“引用.”访问。
-
所有类相关的,都是采用"类名."来访问的。
}
}
通过一个构造方法1去调用另一个构造方法2,但必须在同一个类中。 注意:this();只能出现在构造方法的第一行。必须是构造器的第一个语句,调用的 必须位于同一个类下。
-
-
**结论:所有实例相关的,都是先创建对象,通过“引用.”访问。
- 所有类相关的,都是采用"类名."来访问的。
-
只要负责调用的方法a和方法b位于同一个类中,那么this.可以省略,类名. 也可以省略。