Java进阶之路02-(数组.类)

文中要点:数组.类

数组:可以存储多个元素并且多个元素是同一种类型的容器;

数组的定义:
数据类型[ ] 数组名;

数据类型 数组名[ ];

举例:
  int[ ] a ; 定义了一个int类型的数组变量a;

   int a[ ] ;    定义了一个int类型变量a数组;

            (这两种方式的定义:虽然写法不一样,并且读法不一样,但是表达的效果一样,都是在定义一个数组,推荐使用第一种方式;)

数组的初始化:
   1)动态初始化:  给数组指定长度,数组中的元素值由系统默认给定;

  2)静态初始化:  给定数组中元素的值,数组的长度由系统给定;

                      (没有被初始化的数组是不能使用的!!!)

动态初始化:

          数据类型[] 数组名 = new 数据类型[数组长度] ;

                举例:

          int[ ] arr = new int[3] ;    //表示数组中含有三个变量;

          int[ ] arr2 = new int[2] ;

		/***
		 * 左边:
		 *     int[] :定义的是一个int类型的数组
		 *      arr  : 数组名称 
		 * 右边:
		 *      new :创建一个数组对象(它会在堆内存中存在)
		 *      int[] :当前int类型的数组
		 *      3:当前数组的长度是3
                 */

                          System.out.println(arr);   //输出数组名称;

                                //会出现如下:[I@70dea4e     //这是数组的地址,而不会输出数组的名称;

例:实现下列需求:

需求:
创建一个数组,先输出数组名称和它的元素值

给当前数组中的某些元素进行赋值,然后在输出数组名称和元素值

public class ArrayDemo2 {
public static void main(String[ ] args) {

//定义数组,动态初始化
int[] arr = new int[3] ;

//先输出数组名称和它的元素值
System.out.println(arr);//地址[I@70dea4e
System.out.println(arr[0]);//0
System.out.println(arr[1]);//0
System.out.println(arr[2]);//0

//进行赋值
arr[0] = 10 ;
arr[2] = 30 ;
System.out.println(arr);//[I@70dea4e
System.out.println(arr[0]);//10
System.out.println(arr[1]);//0
System.out.println(arr[2]);//30
  }
}

还可创建两个数组,将第一个数组名称赋值第二个数组名称,通过第二个数组的名称进行赋值,输出第一个数组的元素

例如:

int[] arr = new int[3] ;

System.out.println(arr[0]);
System.out.println(arr[1]);

System.out.println(arr[2]);//输出第一个数组的三个元素,默认为0;

int[ ] arr2 = arr ;
arr2[0] = 20 ;

arr2[2] = 10 ;

System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);//这样对第二个数组进行操作,输出第一个数组的三个元素,会出现20、0、10;

静态初始化:
指定出数组的元素,长度由系统给定
定义个数,不定义长度;
原始格式:
数据类型[ ] 数组名称 = new 数据类型[ ]{元素1,元素2,元素3....} ;
简写方式:
  数据类型[ ] 数组名称= {元素1,元素2,元素3..} ; 
 
 举例:
  int[ ] arr = new int[ ]{1,2,3} ;

   int[ ] arr = {1,2,3} ;

错误举例:

 int[ ] arr2 = new int[3]{1,2,3} ;

错误原因:动静结合  定义数组要么动态初始化,指定长度,要么静态初始化指定数组元素!

数组中经常会出现的异常:
  ArrayIndexOutOfBoundsException:数组角标越界异常;
出现的原因:访问了数组中不存在的索引值;
解决方案:观察数组中到底有索引值到多少;  数组长度-1
NullPointerException:空指针异常 (在实际开发中该异常是最多的)
  出现的原因:对象为null,而开发者还要去使用对象,就会出现问题

  解决方案:给某个对象进行非空判断,防止程序程序空指针异常

:

在Java中,函数被称为方法,而方法又被放在类中;使之便于调用;

有一个员工类:
   自己分析:
   成员变量 :员工编号  员工姓名 员工工资
   构造方法:无参/有参
   成员方法:setXXX/getXXX()

   work()...

构造方法作用:
   就是给对象进行进行初始化
  
  构造方法也属于一类的组成:
   成员变量
   构造方法
   成员方法
  构造方法:
   1)方法名和类名相同

   2)构造方法,连void都没有

成员方法作用:
   成员方法的分类:
   1)按照返回值划分
   void的形式:没有具体的返回值
   非void形式:有具体返回值
  2)按照参数进行划分
  空参

   有参

面试题:
  成员变量和局部变量的区别
   1)在类中位置不同
  成员变量:类中,方法外
   局部变量:方法声明上,或者再方法定义中
   2)在内存中的位置不同:
   成员变量:堆内存
   局部变量:栈内存
   3)生命周期不同:
   成员变量:成员变量是随着类的加载而加载,随着类的消失而消失
   局部变量:随着方法的调用而存在,随着方法调用完毕而消失
   4)初始化值不同
   成员变量:初始化由系统默认初始化,
    对于成员变量,可以不给初始化值,由系统给,然后显示初始化;

   局部变量:定义一个局部变量,必须进行初始化,如果不初始化,无法使用(在使用之前进行初始化)

static关键字:

多个对象对同一个变量进行共享,这个时候Java提供了一个关键字---static:  静态的(共享的)

   在方法区中:开辟一个静态区域: 都是静态标记

关于static关键字:
  1)静态随着类的加载而加载
   2)static优先于对象存在
  回想:main  public static void main(..){...}
  
   3)static共享数据,可以被多个对象进行共享
  举例: 饮水机(staticd的:共享的)
  水杯(不能共享的...)
  4)如果数据被静态修饰的,它可以被类名直接调用
   被静态修饰的方法: 类名.方法名()

  被静态修饰的变量: 类名.变量名;

private关键字:

private的用法:

   1)被private修饰的只能在本类访问
   2)可以通过公共的访问public 去间接访问

                         当前成员变量和局部变量名称一致的情况,遵循就近原则

private:体现的也是一种封装思想

Java的三大特征:封装.继承.多态

 封装:
   标准类的写法,将成员变量全部私有化,被private修饰的成员变量只能在本类中访问,可以通过公共的访问方法去访问成员变量













猜你喜欢

转载自blog.csdn.net/mulinghanxue/article/details/79935903
02-