当前位置:   article > 正文

Java数组讲解(数组,字符串数组,多态数组)_java解析数组字符串

java解析数组字符串

数组的定义

  • 数组是相同类型数据的有序集合。
  • 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。
  • 其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。

数组的四个基本特点

其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。

其元素必须是相同类型,不允许出现混合类型。

数组中的元素可以是任何数据类型,包括基本类型和引用类型。

数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。

数组的声明与创建

  1. dataType[ ] arrayRefVar = new dataType[ arraySize];
  2. dataType[ ][ ] arrayRefVar = new dataType[ arraySize][ arraySize];

数组的引用

  1. public class Main {
  2. public static void main(String[] args) {
  3. int[] a = {1, 2, 3};
  4. a[0] = 0;
  5. for(int i : a) {
  6. System.out.println(i); //这里会输出什么?
  7. }
  8. }
  9. }
  1. public class Main {
  2. public static void main(String[] args) {
  3. String[] names = {"ABC", "XYZ", "zoo"};
  4. String s = names[1];
  5. names[1] = "cat";
  6. System.out.println(s); // s是"XYZ"还是"cat"?
  7. for(String i : names) {
  8. System.out.println(i); //这里会输出什么?
  9. }
  10. }
  11. }

结论:输出"ABC" "cat"  "zoo"。分析见下。

注意数组是引用类型,并且数组大小不可变。我们观察下面的代码:

  1. public class Main {
  2. public static void main(String[] args) {
  3. // 5位同学的成绩:
  4. int[] ns;
  5. ns = new int[] { 68, 79, 91, 85, 62 };
  6. System.out.println(ns.length); // 5
  7. ns = new int[] { 1, 2, 3 };
  8. System.out.println(ns.length); // 3
  9. }
  10. }

本例中,ns指向了新的内存地址,其本身(原地址)被垃圾回收机制回收。(可能是吧,我是垃圾,并不清楚)

字符串数组

如果数组元素不是基本类型,而是一个引用类型,那么,修改数组元素会有哪些不同?

字符串是引用类型,因此我们先定义一个字符串数组:

字符串数组存放的是 各字符串常量的 地址!

String[] names = { "ABC", "XYZ", "zoo" };

思考下面这个例子(从引用的指向分析):

思考下面这个例子:

  1. public class Example{
  2. String str=new String("tarena");
  3. char[]ch={'a','b','c'};
  4. public static void main(String args[]){
  5. Example ex=new Example();
  6. ex.change(ex.str,ex.ch);
  7. System.out.print(ex.str+" and ");
  8. System.out.print(ex.ch);
  9. }
  10. public void change(String str,char ch[]){
  11. //引用类型变量,传递的是地址,属于引用传递。
  12. str="test ok";
  13. ch[0]='g';
  14. }
  15. }

 

多态数组

数组的定义类型为父类类型,里面保存的多态元素为子类类型。

  1. public class Person {
  2. public static void main(String[] args) {
  3. Person[] person = new Person[4];
  4. person[0] = new Person("jack",20);
  5. person[1] = new Person("lucy",10);
  6. person[2] = new Student("mary",8,2000);
  7. person[3] = new Teacher("hsp",20,88888);
  8. for(Person p : person) {
  9. System.out.println(p);
  10. }
  11. }
  12. protected String name;
  13. protected int age;
  14. public Person(String name, int age) {
  15. this.name = name;
  16. this.age = age;
  17. }
  18. @Override
  19. public String toString() {
  20. return "Person{" +
  21. "name='" + name + '\'' +
  22. ", age=" + age +
  23. '}';
  24. }
  25. }
  26. class Student extends Person{
  27. private double salary;
  28. public Student(String name, int age, double salary) {
  29. super(name, age);
  30. this.salary = salary;
  31. }
  32. @Override
  33. public String toString() {
  34. return "Student{" +
  35. "name='" + name + '\'' +
  36. ", age=" + age +
  37. ", salary=" + salary +
  38. '}';
  39. }
  40. }
  41. class Teacher extends Person{
  42. private double salary;
  43. public Teacher(String name, int age, double salary) {
  44. super(name, age);
  45. this.salary = salary;
  46. }
  47. @Override
  48. public String toString() {
  49. return "Teacher{" +
  50. "name='" + name + '\'' +
  51. ", age=" + age +
  52. ", salary=" + salary +
  53. '}';
  54. }
  55. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/730046
推荐阅读
相关标签
  

闽ICP备14008679号