Java面向对象基础课之三/0909号

来源:互联网 发布:博客互踩软件 编辑:程序博客网 时间:2024/05/17 00:03

                                            学习报告

1.今天的学习内容是:面向对象的基础及扩展知识

知识比较零散:

概念:对象是数据封装后的结果。(就是各个数据(类中元素的属性一致)组成一个对象来处理)

数据1(属性)     封装

数据2(属性)

数据3(属性)

2.变量的分类:

按照作用域划分:

局部变量:在方法或者语句块(如If语句)声明的变量。生命的周期只在定义该变量的{}之内。方法或者语句块一结束,局部变量消失。所以局部变量不能跨方法或者语句块使用。

成员变量(属性):在类中,方法外声明的变量,是一个对象的组成部分。随着对象的产生而产生,随着对象的消失而消失。虚拟机关闭时消失。

备注:一般情况下,使用变量时,尽量减少变量的作用范围,以便分配给变量的空间可以及时得到释放。

重点:如果我们想主动通知垃圾回收机制回收一个对象,只需要把该对象的引用类型的变量赋值为null,就会没有指针指向该地址,垃圾回收机制就会释放内存空间。

即一个对象没有任何引用,那么就符合垃圾回收机制(GC)回收的条件。

3.关于导包的问题:

l  在同一个包中,声明的类,可以直接相互调用,无需导包

l  在系统的一些包,例如在Java.lang.*之类的。System.out

l  除开此两类的包,类之间调用时,需要先导入对方的类所在的位置。

包的概念:包就像一个文件夹,

作用:

l  可以通过包组织相关的类。

l  可以通过包,做信息的隐藏。声明一个类时,不加Public时其他的类无法掉用,做到隐藏的效果。

关于public修饰符的几点解释:

l  不加public 时,声明一个类时,类名可以与文件名不一致,之前一直是加上Public,所以在编译的时候需要类名与文件名一致,否则会出现编译错误。现在不加public修饰,就可以不一致,编译不会出错。

l  不加public时,在一个类文件名中,可以写多个类,并且可以都通过编译,生成几个.class文件,但是我们执行编译文件时,需要选择我们需要执行哪个.class文件。

l  一个类声明为Public时,才可以跨包调用,否则不能。但是没有声明为Public时,可以在同一包的不同类调用,也可以早同一类中调用。

l  总结以上的意思:如果一个类声明为public ,要求类名与文件名一致,该类可以跨包使用。没有声明为public ,类名与文件名不一致,该类不能跨包使用。

4.关于静态变量与静态方法之间的用法解释:

       是否是静态的方法及变量:由public修饰词引导

静态方法与静态变量加载时机在对象之前。所以在静态方法(包括静态的main主函数)中不能使用this关键字,也不能直接调用成员变量和成员方法。0909号课堂代码/product代码解释

几点知识点延展:

Ø  静态方法中不能使用this关键字,但是可以在非静态方法中却可以使用,但不是必须要加,不加this关键字的效果一样。

Ø  静态的方法或者变量是不能直接调用的,但是可以先声明一个对象,使用对象.变量名(方法名) 的方式调用。

在静态方法在调用另外的静态方法时,用对象.方法名  调用时,系统会出现警告错误,这原因与静态方法中调用静态变量一样的道理。这时使用类名.变量名(方法名)调用,就会消除警告。

Ø  在非静态方法中,可以直接调用变量名,但是需要先赋值,不然会返回null值。

Ø  此部分的知识点见代码的解释:地址:0909号课堂代码/product代码解释

5.关于数据类型的几点总结:

   数据类型分为基本数据类型与引用数据类型。基本数据类型放具体的数据,而引用数据类型存放对象的地址。基本数据类型8种,4个整形,2个浮点型,boolean与char。

引用数据类型:接口,类(String 与class等其他的类,比如自定义的Student类),数组。引用类型的变量全部都是存放对象的地址。

6.关于垃圾回收机制的问题:

此种类型的题目,通过画图的形式,找到各个变量与对象之间的关系,从而从图上知悉哪些对象已经被系统执行垃圾回收。

上图中第4与7行代码执行后,会有对象进行了垃圾回收。

画出的过程图是如下:

类似手稿图在Java基础课本上册(70page)。

7.关于方法之间调用后,变量值变化几点练习:

此代码在:课上的代码0909包内

第一题:简单型

代码行:

public classTest_12 {

 

   public static voidmain(String[] args) {

      int x =8;

      Student s =new Student();

      s.grade=5;

      test(x,s);

      System.out.println(s.grade+"   "+x);

 

   }

   public static void test(intx,Student s){

   //test方法中,如果把静态修饰词static去掉,在main方法中无法调用

   //即静态的主方法无法调用非静态的方法。从方法的管控范围来看,

      s.grade =6;

      x =2;

     

   }

 

}

从此代码画出的草图:

自己的手稿在Java基础课上(69page)

复杂型:

代码行:

public classTest_13 {

 

   public static voidmain(String[] args) {

         intx =8;

        Student s1 =new Student();

        s1.grade=5;

        Student s2 =new Student();

        s2.grade=2;

         test(x,s1,s2);

        System.out.println(s1.grade+"   "+s2.grade+"   "+x);

 

      }

      public static voidtest(int a,Student b,Student c){

      //test方法中,如果把静态修饰词static去掉,在main方法中无法调用

      //即静态的主方法无法调用非静态的方法。从方法的管控范围来看,

        b.grade =6;

        c.grade =1;

        b=c;

        b.grade =7;

        c.grade =4;

        b=new Student();

        b.grade =10;

        c.grade =11;

        a =2;//画出草图,便于理解

 

   }

 

}

草图如下:

自己的手稿:

图片格式与大小问题,无法上传!需要时进入链接查看!

0 0
原创粉丝点击