zoukankan      html  css  js  c++  java
  • Java基础知识之基本概念

    1. Java语言有哪些优点?

      1.Java是纯面向对象的语言
      2.平台无关性。Java解释性语言,编译器对Java代码进行编译,生成字节码文件,然后由JVM(Java 虚拟机)上解释执行。
      3.Java提供了需要内置的类库。例如对多线程的支持。
      4.具有较好的安全性和健壮性。Java中提供了一个防止恶意代码攻击的安全机制。另外,还提供了异常处理,垃圾回收器等来保证程序的健壮性。
      5.提供了对Web应用开发的支持。例如Servlet,JSP可以用来开发Web应用程序。Socket,RMI可以用来开发分布式应用程序的类库。
      6.去除了C++语言中,难以理解、容易混淆的特性。如指针,头文件,多重继承等。
    2. Java与C/C++有什么异同

      1.Java为解释性语言。而C/C++为编译型语言,源代码经过编译和链接后生成可执行的二进制代码。
      2.Java为纯面向对象语言,C++兼具过程和面向过程编程的特点。
      3.Java没有指针的概念
      4.Java提供了垃圾回收器来实现垃圾的自动回收。C++语言中,需要开发人员去管理对内存的分配(包括申请与释放)。
      5.Java不支持运算符重载,没有预处理器,不提供goto语句(但在Java中goto是保留关键字),具有平台无关性。
    3. 为什么需要public static void main(String[] args)这个方法?

      ◦public static void main(String[] args)是java程序的入口方法,JVM在运行程序时,会先查找main()方法。通常来说,要执行一个类的方法,需要先实例化一个类的对象,通过这个对象来调用方法。
      鉴于此,main()的修饰符是public static ,静态方法,在程序加载时,便可以调用main方
    4. Java程序初始化的顺序是怎样的?

      ◦在Java语言中,当实例化对象时,对象所在类的所有成员变量首先要进行初始化,只有所有类成员变量完成初始化之后,才会调用对象所在类的构造函数创建对象。
      ◦执行顺序如下:父类静态变量,父类静态代码块,子类静态变量,子类静态代码块,父类非静态变量,父类非静态代码,父类构造函数,子类非静态变量,子类非静态代码块,子类构造函数。
    5. Java中的作用域有哪些?

      • 首先说明Java中不存在全局变量或全局函数
      • 在Java语言中,变量的类型分三种:成员变量,静态变量,局部变量。
        • 成员变量的作用范围与类的实例化对象的作用范围相同。成员变量也有4种作用域,对应的修饰符有public(所有可见),private(当前类可见),protected(当前类,同一个package,子类可见),default(当前类,同一package可见)
        • 静态变量,不依赖于特定的实例,而是被所有实例所共享,也就是说,只要一个类被加载,JVM就会给类的静态变量分配存储空间。
        • 局部变量的作用域,在它所在的花括号内。
      • 需要注意的是,public,private,protected,default只能用来修饰成员变量,不能修饰局部变量。private与protected不能用来修饰类,只有public,abstract,fianl能用来修饰类
    6. 什么是构造函数?

      • 构造函数是一直特殊的函数,用来在对象实例化时,初始化对象的成员变量。
      • 在Java语言中,构造函数有以下特点
        • 构造函数必须与类的名字相同,并且不能有返回值(返回值也不能是void)。
        • 每个类可以有多个构造函数。
        • 构造函数可以有0个、1个或者1个以上的参数。
        • 构造函数总是伴随new操作一起调用,且不能由程序的编写者直接调用,必须要由系统调用。
        • 构造函数的主要作用是完成对象的初始化工作
        • 构造函数不能被继承, 因此不能被覆盖,但是构造函数能够被重载,可以使用不同的参数个数或者参数类型来定义多个构造函数。
        • 当父类和子类都没有构造函数时,编译器会为父类和子类生成一个默认的无参数的构造函数。
        • 子类可以通过super关键词来显式地调用父类的构造函数。
    7. 为什么Java中有些接口没有任何方法?

      • 首先说一下接口,在java中由于不支持多重继承,java引入接口这一概念。接口是抽象方法定义的集合(也定义一些常量),是一种特殊的抽象类。接口中的成员的作用域修饰符都是public,接口中的常量值默认使用public static final修饰。
      • 在java语言中,有些接口内部没有声明任何方法,这类接口叫做标识接口。标识接口对实现它的类没有什么语义要求,仅仅充当一个标识的作用,用来表明实现它的类属于一个特定类型。Java类库中已存在的标识接口有Cloneable和Serializable等。在使用时经常用instanceof来判断实例对象的类型是否实现了一个给定的标识接口。
    8. Java中clone方法有什么作用?

      • Java语言取消了指针的概念,但这只是Java语言中没有明确提供指针的概念与用法,而实质上每个new语句返回的都是一个指针的引用。
      • 在实际编程中,经常会遇到从某个已有的对象A创建出另外一个与A具有相同状态的对象B,并且修改B不会影响到A的状态。这仅仅通过简单的赋值操作显然无法实现,而Java中提供了clone()方法来满足这个需求。
      • Java中所有类都默认继承Object类,而Object类中提供了一个clone()方法,这个方法的作用是返回一个Object对象的复制。这个复制函数返回的是一个新的对象而不是一个引用。
      • 使用clone()方法的步骤:
        • 实现clone的类首先需要继承Cloneable接口。Cloneable接口实质上是一个标识接口,没有任何接口方法
        • 在类中重写Object类中的clone()方法
        • 在clone方法中调用super.clone()。
        • 把浅复制的引用指向原型对象的新的克隆体。(当类中包含一些对象时,就需要用到深复制)
      • 浅复制仅仅复制所考虑的对象,深复制把复制的对象所引用的对象都复制了一遍。
      • Prototype(原型)模式中,就需要clone一个对象实例
    9. 什么是反射机制?

      • 反射机制是Java语言中一个非常重要的特性,它允许程序在运行时进行自我检查,也允许对其内部的成员进行操作。
      • 反射机制提供的功能主要有:得到一个对象所属的类;获取一个类的所有成员变量和方法;在运行时创建对象;在运行时调用对象的方法。
      • 在反射机制中,Class是一个非常重要的类。获取方法有三个:1)Class.forName("类的路径");2)类名.Class;3)实例.getClass()。
    10. 如何实现类似于C语言中函数指针的功能?

      • 回调函数,就是指函数先在某处注册,而它将在稍后某个需要的时候被调用
      • 回调函数一般用于截获消息,获取系统信息或处理异步事件。
      • 在Java中可以利用接口与类来实现同样的效果。
      • 策略模式 也是用到这样的思想。
      • 代码:
         1 interface IntCompare {
         2     public int cmp(int a, int b);
         3 }
         4 class Cmp1 implements IntCompare {
         5     public int cmp(int a, int b) {
         6         if (a > b)
         7             return 1;// a大于b
         8         else if (a < b)
         9             return -1;
        10         else
        11             return 0;
        12     }
        13 }
        14 class Cmp2 implements IntCompare {
        15     public int cmp(int a, int b) {
        16         if (a > b)
        17             return -1;
        18         else if (a < b)
        19             return 1;// a小于b
        20         else
        21             return 0;
        22     }
        23 }
        24 public class Test2018415 {
        25     public static void insertSort(int[] a, IntCompare cmp) {
        26         if (a != null) {
        27             for (int i = 1; i < a.length; i++) {
        28                 int temp = a[i];
        29                 int j = i;
        30                 if (cmp.cmp(a[j - 1], temp) == 1) {
        31                     while (j >= 1 && cmp.cmp(a[j - 1], temp) == 1) {
        32                         a[j] = a[j - 1];
        33                         j--;
        34                     }
        35                 }
        36                 a[j] = temp;
        37             }
        38         }
        39     }
        40     public static void main(String[] args) {
        41         int[] array1 = { 7, 3, 19, 40, 4, 7, 1 };
        42         insertSort(array1, new Cmp1());
        43         System.out.println("升序排序:");
        44         for (int i = 0; i < array1.length; i++) {
        45             System.out.print(array1[i] + " ");
        46         }
        47         System.out.println();
        48         int[] array2 = { 7, 3, 19, 40, 4, 7, 1 };
        49         insertSort(array2, new Cmp2());
        50         System.out.println("降序排序:");
        51         for (int i = 0; i < array2.length; i++) {
        52             System.out.print(array2[i] + " ");
        53         }
        54     }
        55 }

                

  • 相关阅读:
    js获取长度,根据编码获取长度
    springcloud(七,多个服务消费者配置,以及zuul网关案例)
    springcloud(六,多个服务提供者)
    springcloud(五,多个服务注册中心eureka)
    jquery根据选择器进行页面赋值,封装赋值方法
    让页面元素无法选中,不能全选
    取消绑定事件
    js设置元素指定时间隐藏
    js手动抛出异常
    php 之 数据访问 查询关键字 (0506)
  • 原文地址:https://www.cnblogs.com/weiziqiang/p/8835788.html
Copyright © 2011-2022 走看看