您的位置:首页 > 编程语言 > Java开发

2017 - 10 -14 java基础

2017-10-15 20:19 246 查看
1 java程序为了提高程序的效率,就对数据进行了不同的空间分配。

  具体划分为五个内存空间

  栈:存放的是局部变量

  堆:存放的是所有new出来的东西

  方法区:(类的方法,静态等)

  本地方法区:(和系统相关)

  寄存器:(CPU使用)

  局部变量:在方法定义中或者方法声明上的变量都称为局部变量

  int[] arr = new int[3]

  System.out.println(arr);//地址值

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

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

  System.out.println(arr[2]);// 0

     栈                           堆

                               new int[3]

 int[] arr  <-------  0x0001(地址)

                                  0  0

                                  1  0

                                  2  0 

堆内存的特点:

A:每一个new出来的东西都有地址值

B:每个变量都有默认值

     byte,short,int,long 0

     float,double  0.0

     char '\u00000'

     boolean false

     引用类型 null
C:使用完毕就变成了垃圾,但是并没有立即回收。会在垃圾回收器空闲的时候回收。

栈内存的数据用完就释放掉。例如:



 int a = 100;

 System.out.println(a);

}

2  数组动态初始化和静态初始化

  动态:

  int[] arr = new int[3];

  arr[0] = 1;

  静态:

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

  简化后:

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

3 数组操作的两个常见小问题  

  编译时不报错,运行报错

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

  System.out.println(arr[3]);

  //(ArrayIndexOutOfBoundsExceptin)数组索引越界异常越界

  //原因:访问了不存在的索引

  arr = null;

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

  //(NullPointerException)空指针异常

  //原因:数组已经不再指向堆内存了,而你还用数组名去访问元素

  作用:请自己把所用的场景Exception结尾的问题总结一下,以后遇到就记录下来。

4 二维数组

  A:

  int[][] arr = new int[3][4];

  arr[1][1] = 100;

  B:

  int[][] arr = new int[2][];

  arr[0] = new int[1];

  arr[1] = new int[2];

  arr[2] = new int[3];

  arr[1][1] = 100;

  C:

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

5 一个对象的内存图



6 成员变量和局部变量的区别

  A:位置不同

    成员变量:在类中方法外

    局部变量:在方法定义中或者方法声明上

  B:内存中的位置不同

    成员变量:在堆内存

    局部变量:在栈内存

  C:生命周期不同

   成员变量:随着对象的创建而存在,随着对象的消失而消失

   局部变量:随着方法的调用而存在,随着方法的调用完毕而消失

  D:初始化时不同

   成员变量:有默认初始化值

   局部变量:没有默认初始化值,必须定义,赋值,然后才能使用

  注意事项:

       局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用就近原则。

  class Variable{

    //成员变量

    int num = 10;

    //int num; //0

    public void show(){

     //int num2 = 20;//局部变量

     //可能尚未初始化变量num2

     //int num2; 没有默认值

       int num2 = 20;

       System.out.println(num2);

       int num = 100;  

       System.out.println(num); // 100  采用就近原则

      }

}

7  匿名对象

   就是没有名字的对象

   匿名对象的应用场景:

   A:调用方法,仅仅只调用一次的时候。

       注意:调用多次的时候,不适合。

       那么,这种匿名对象调用有什么好处吗?

         1.匿名对象调用完毕就是垃圾,可以被垃圾回收器回收。

   B:匿名对象可以作为实际参数传递

   

   //带名字的对象

   Student s = new Student;

   s.show();

   s.show();

   //匿名对象

   //new Student()

   //匿名对象调用方法

   new Student().show();

   new Student().show();// 这里其实是重新创建了一个新的对象

   //匿名对象作为实际参数传递

   StudentDemo sd = new StudentDemo();

   //Student ss = new Student();

   //sd.method(ss);//这里的s是一个实际参数

   //匿名对象

   sd.method(new Student());

   //再来一个

   new StudentDemo().method(new Student());

8 static

  (所以感觉作用两点,成员变量和成员方法)

  (成员变量  被对象共享)

  (成员方法  即不用建立对象而调用类的方法)

    (可以修饰内部类,但主类不能)

    (静态方法只能访问静态成员)

    (静态方法不能被重写,静态变量是变量不是常量,可以被改变,对所有对象都有影响)

   (目前看到的修饰:变量(成员变量和局部变量)、方法、代码块、内部类 )

  针对多个对象有共同的这样的成员变量,java提供了static 

  static的特点:(它可以修饰成员变量,也可以修饰成员方法)

    A:随着类的加载而加载

      回想main方法。。。

    B:优先于对象存在

    C:被类的所有对象共享

        举例:我们班上的学生应该共用一个班级编号

          如果某个成员变量是所有对象共享的没那么它就应该定义为静态的

    D:可以通过类名调用

         其实它本身也可以通过对象名调用

    静态修饰的内容一般我们称其为:与类相关的,类成员

9 main方法的格式讲解

  public static void main(String[] args)

  public:公共的,访问权限是最大的,由于main方法是被jvm调用,所以权限要够大

  static:静态的,不需要创建对象,通过类名就可以,方便jvm的调用

  void:因为我们曾经说过,方法的返回值是返回给调用者的,而main方法是被jvm调用,返回给jvm没有意义

  main:是一个常见的方法入口,(我)见过的语言都是以main为入口

  String[] args:这是一个字符串数组,值去哪里了?

        这个东西到底有什么用?怎么给值?

          这个东西早起是为了接受键盘录入的数据的

         java MainDemo hello world

   http://blog.csdn.net/yxmaomao1991/article/details/50507177
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: