Java语言(二)

 二  对象

    类实例化可生成对象,对象通过消息传递来进行交互。消息传递即激活指定的某个对象的方法以改变其状态或让它产生一定的行为。一个对象的生命周期包括三个阶段:生成、使用和消除。

   对象的清除
   当不存在对一个对象的引用时,该对象成为一个无用对象。Java的垃圾收集器自动扫描对象的动态内存区,把没有引用的对象作为垃圾收集起来并释放。
  System.gc( );  System.exit();//terminate the current JVM
  当系统内存用尽或调用System.gc( )要求垃圾回收时,垃圾回收线程与系统同步运行。

 

java语言中有三个典型的面向对象的特性:封装性、继承性和多态性。


   1. 封装性

        java语言中,对象就是对一组变量和相关方法的封装,其中变量表明了对象的状态,方法表明了对象具有的行为。通过对象的封装,实现了模块化和信息隐藏。通过对类的成员施以一定的访问权限,实现了类中成员的信息隐藏。

 

    ◇ java类中的限定词
  java语言中有四种不同的限定词,提供了四种不同的访问权限。
  1) private
      类中限定为private的成员,只能被这个类本身访问。
      如果一个类的构造方法声明为private,则其它类不能生成该类的一个实例。
  2) default
      类中不加任何访问权限限定的成员属于缺省的(default)访问状态:friend,可以被这个类本身和同一个包中的类所访问。
    3) protected
      类中限定为protected的成员,可以被这个类本身、它的子类(包括同一个包中以及不同包中的子类)和同一个包中的所有其他的类访问。
   4) public
     类中限定为public的成员,可以被所有的类访问。

 

   2. 继承性

        通过继承实现代码复用。Java中所有的类都是通过直接或间接地继承java.lang.Object类得到的。继承而得到的类称为子类,被继承的类称为父类。子类不能继承父类中访问权限为private的成员变量和方法。子类可以重写父类的方法,及命名与父类同名的成员变量。但Java不支持多重继承,即一个类从多个超类派生的能力。

      ◇ 成员变量的隐藏和方法的重写
  子类通过隐藏父类的成员变量和重写父类的方法,可以把父类的状态和行为改变为自身的状态和行为。
例如:
  class SuperClass{
    int x; …
    void setX( ){ x=0; } …
  }
  class SubClass extends SuperClass{
    int x;   //隐藏了父类的变量x
    …
    void setX( ) { //重写了父类的方法 setX()
    x=5; } ….
  }
  注意:子类中重写的方法和父类中被重写的方法要具有相同的名字,相同的参数表和相同的返回类型,只是函数体不同。
  ◇ super
  java中通过super来实现对父类成员的访问,super用来引用当前对象的父类。Super 的使用有三种情况:
  1)访问父类被隐藏的成员变量,如:
    super.variable;
  2)调用父类中被重写的方法,如:
    super.Method([paramlist]);
  3)调用父类的构造函数,如:
    super([paramlist]);

 

   3. 多态性

      在java语言中,多态性体现在两个方面:由方法重载实现的静态多态性(编译时多态)和方法重写实现的动态多态性(运行时多态)。
   1) 编译时多态
       在编译阶段,具体调用哪个被重载的方法,编译器会根据参数的不同来静态确定调用相应的方法。
   2) 运行时多态
     由于子类继承了父类所有的属性(私有的除外),所以子类对象可以作为父类对象使用。程序中凡是使用父类对象的地方,都可以用子类对象来代替。一个对象可以通过引用子类的实例来调用子类的方法。
  ◇ 重写方法的调用原则:java运行时系统根据调用该方法的实例,来决定调用哪个方法。对子类的一个实例,如果子类重写了父类的方法,则运行时系统调用子类的方法;如果子类继承了父类的方法(未重写),则运行时系统调用父类的方法。
在例3-1中,父类对象a引用的是子类的实例,所以,java运行时调用子类B的callme方法。

【例3-1】
  import java.io.*;
  class A{
     void callme( ) {
      System.out.println("Inside A's callme()method");
     }
  }
  class B extends A{
     void callme( ) {
      System.out.println("Inside B's callme() Method");
     }
  }
  public class Dispatch{
     public static void main(String args[]) {
      A a=new B();
      a.callme( );
     }
  }
◇ 方法重写时应遵循的原则:
  1)改写后的方法不能比被重写的方法有更严格的访问权限(可以相同)。
  2)改写后的方法不能比重写的方法产生更多的例外。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 下面是一个实现 Java 分查找的代码:public class BinarySearch { public static int binarySearch(int[] array, int target) { int left = 0; int right = array.length - 1; while (left <= right) { int mid = (left + right) / 2; if (array[mid] == target) { return mid; } else if (array[mid] < target) { left = mid + 1; } else { right = mid - 1; } } return -1; }} ### 回答2: 以下是Java语言分查找代码示例: public class BinarySearch { public static int binarySearch(int[] array, int target) { int left = 0; int right = array.length - 1; while (left <= right) { int mid = left + (right - left) / 2; // 如果中间元素等于目标值,则返回该索引 if (array[mid] == target) { return mid; } // 如果中间元素大于目标值,在左半部分继续查找 if (array[mid] > target) { right = mid - 1; } // 如果中间元素小于目标值,在右半部分继续查找 if (array[mid] < target) { left = mid + 1; } } // 如果没有找到目标值,则返回-1表示未找到 return -1; } public static void main(String[] args) { int[] array = {1, 3, 5, 7, 9, 11, 13}; int target = 7; int index = binarySearch(array, target); System.out.println("目标值在数组中的索引位置为:" + index); } } 这段代码实现了一个分查找算法。通过设定左边界和右边界,每次取中间位置的元素进行比较,如果中间元素等于目标值,则返回该索引;如果中间元素大于目标值,则在左半部分继续查找;如果中间元素小于目标值,则在右半部分继续查找。重复这个过程,直到找到目标值或者左边界大于右边界为止。如果没有找到目标值,则返回-1表示未找到。 在该代码示例中,数组中的元素已经按升序排列。首先定义左右边界为数组的首尾元素的索引,然后在while循环中进行查找操作。循环内部通过计算中间位置的索引,比较中间元素与目标值的大小,更新左右边界的值。最终返回目标值在数组中的索引位置。在主函数中调用binarySearch方法,将目标数组和目标值作为参数传入,并输出返回结果。 ### 回答3: Java语言中的分查找算法可以通过以下代码实现: ```java public class BinarySearch { public static int binarySearch(int[] arr, int target) { int left = 0; int right = arr.length - 1; while (left <= right) { int mid = left + (right - left) / 2; // 计算中间位置 if (arr[mid] == target) { return mid; // 目标值在中间位置,直接返回该位置 } else if (arr[mid] < target) { left = mid + 1; // 目标值在中间位置的右侧,更新左边界 } else { right = mid - 1; // 目标值在中间位置的左侧,更新右边界 } } return -1; // 遍历完整个数组仍未找到目标值,返回-1表示未找到 } public static void main(String[] args) { int[] array = {1, 3, 5, 7, 9, 11}; int target = 7; int result = binarySearch(array, target); if (result == -1) { System.out.println("目标值不存在"); } else { System.out.println("目标值在数组中的索引位置为:" + result); } } } ``` 以上代码中的`binarySearch`方法接收一个已经排好序的整数数组`arr`和一个目标值`target`作为参数。该方法使用了迭代的方式进行分查找,通过循环控制左边界`left`小于等于右边界`right`。在每一次循环中,计算出中间位置`mid`,并将目标值与`arr[mid]`进行比较。若两者相等,则直接返回中间位置`mid`,若目标值小于`arr[mid]`,则说明目标值在中间位置的左侧,更新右边界为`mid - 1`;若目标值大于`arr[mid]`,则说明目标值在中间位置的右侧,更新左边界为`mid + 1`。当循环结束时,若仍然未找到目标值,则返回-1表示未找到。 在`main`方法中,定义一个整数数组`array`和目标值`target`,调用`binarySearch`方法进行分查找,并根据返回值结果进行输出。若返回值为-1,则表示目标值不存在于数组中,否则输出目标值在数组中的索引位置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值