java基础回顾

187 阅读5分钟
  1. Java的原始数据类型包括(布尔型 boolean)、(字节型 byte)、(短整型 short )、( 整型 int)、( 长整型long)、(浮点型 float)、(双精度型 double)、( 字符型 char )。

  2. JDK是 Java 语言的软件开发工具包 ,编写java程序的编辑器使用的是( eclipse )。jvm是java的虚拟机;jre是java的运行环境;特点:免费 ,开源,跨平台,面向对象;

  3. 控制台输出语句( System.out.println(" "); )。

  4. 若在一个Java文件中使用另一个包下的类,则需要在当前文件中( 导包import相应的类)。

  5. Java的代码风格:包名使用驼峰式写英文字母,类名的命名要首字母大写

  6. Java中,条件判断的语句包括( if... else if ..else )和( switch...case...default )。

  7. Java中,循环语句有( while )、( do...while )、( for )。

  8. break的作用是( 跳出本层循环 )continue的作用是( 跳出本次循环

  9. Java中求随机数的代码是

    double temp=Math.random();
    

    对小数四舍五入的代码是

    static int round(float a);
    
  10. int a = 2; int b = a++; int c = ++a; 则b等于( 2 ) c等于( 3 )

  11. int a = 9; a += 5 ; a等于( 9 )

  12. String name = 5!=2?"张三":"李四"; name的值为(“张三” )

  13. 下列代码输出结果是 2(因为case之后没有break,所以会依次从上到下运行)

    case 8 --> h=59

    case 9 --> h=61

    case 10 --> h=64

    default --> h=64/32=2

    public static void main(String[] args) {  
    int i = 24, j = 32, h = 58;   
    switch (j - i) { 
      case 7:    h++;   
      case 8:    h++;   
      case 9:    h += 2;   
      case 10:   h += 3;   
      default:   h /= j;  
    }    
    System.out.println(h);   
    }  
    
  14. "hahha".equals(s)中前面的字符串"haha"是活的,后面的s字符串是死的

  15. switch (变量){case1: break; default: break;}

    switch(变量){
    	case 值:
    		break;
    	case 值:
    		break;
    	case 值:
    		break;
    	default:
    		break;	
    }
    
  16. break \ continue \ 三元运算符

    break 跳出本层循环

    continue 跳出本次循环

    三元运算符: 等同于 if else 作用就是简写 if else的 a>b?"ha":"hello";

  17. for循环嵌套 外层的for 决定是行 里层的for 决定的列

 for(int i=0;i<2;i++) {
 	for(int j=0;j<2;j++) {
 		System.out.print("*");
 	}
 	System.out.println();
 }
 //输出结果:
 **
 **
  1. 两种遍历数组的方法

    普通for循环 for(int i=0;i<arr.length;i++){ }

    增强for循环 for(数据中的每一项:遍历的数据){ }

    例:for(int a:arr) { System.out.println(a); }

  2. 利用Arrays的快速排序

    Arrays.sort(arr);

    public class Demo {
        public static void main(String[] args) {
            int[] arr = {1, 3, 2, 67, 5, 4, 8};
            Arrays.sort(arr);
            for (int i : arr) {
                System.out.println(i);
                //输出结果:1,2,3,4,5,8,67
            }
        }
    }
    
  3. 数组

    数组的最大索引 = arr.length-1

    索引从0开始 (角标 下标)

    堆区开辟一个新的空间

    如果直接打印数组 打印的是地址值

    数组中有默认值

    数值类型默认值
    int0
    float0.0
    booleanfalse
    Stringnull
  4. 方法

    定义方法好处:

    • 可以将功能进行封装:

    • 便于对该功能的复用

    • 方法只有被调用才能被执行

    • 提高了代码的复用性

    • 函数中只能调用函数,不能定义函数

  5. 三种排序

    • 冒泡排序!!!(升序)

      • 对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或 最大的元素“浮”到顶端,最终达到完全有序
      package com.java4;
      
      public class BubbleSort {//冒泡排序
      
          public static void main(String[] args) {
              int[] arr = {1, 2, 3, 5, 34, 4};
              sort(arr);
              for (int i : arr) {
                  System.out.print(i+" ");
              }
          }
      
      
          public static void sort(int array[]) {
              //i表示第几轮“冒泡”,j 表示“走访”到的元素索引。
              // 每一轮“冒泡”中,j 需要从列表开头“走访”到 array.length - 1 的位置。
              for (int i = 0; i < array.length - 1; i++) {
                  for (int j = 0; j < array.length - 1 - i; j++) {
                      if (array[j] > array[j + 1]) {
                          int temp = array[j];
                          array[j] = array[j + 1];
                          array[j + 1] = temp;
                      }
                  }
              }
          }
      }
    
    • 选择排序升序

      • 是最简单直观的一种算法 基本思想为每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止。
     public class selectSort {
         public static void main(String[] args) {
             int arr[] = {2, 4, 56, 67, 234, 36, 6, 8, 769};
             for (int i = 0; i < arr.length - 1; i++) {
                 int min = i;
                 for (int j = i + 1; j < arr.length; j++) {
                     if (arr[min] > arr[j]) {
                         min = j;
                     }
                 }
                 if (min != i) {
                     int temp = arr[min];
                     arr[min] = arr[i];
                     arr[i] = temp;
                 }
     
                 }
             for (int k : arr) {
                 System.out.print(k + " ");
             }
         }
     
    
    • 插入排序

      public class insertSort {
          public static void main(String[] args) {
              int[] a = { 5, 4, 2, 4, 9, 1 };
              for (int i = 1; i < a.length; i++) {
                  for (int j = i; j > 0; j--) {
                      if (a[j] < a[j - 1]) {
                          int temp = a[j - 1];
                          a[j - 1] = a[j];
                          a[j] = temp;
                      } else
                          break;
                  }
      
              }
              // 遍历数组
              for (int i : a) {
                  System.out.print(i+" ");
              }
          }
      }
    
  6. 类和对象的关系是什么?

    二者的关系:类是对象的抽象化描述,这些对象具有相同的特征和动作(属性和方法)。 对象是类的具体实例。

  7. 成员变量和局部变量的区别?

    • 1.生命周期 局部变量随着方法的调用而创建,随着方法的消失而消失; 成员变量随着对象的创建而创建,随着对象的消失而消失
    • 2.位置 局部变量写在方法里,或声明在方法上的参数列表里 成员变量写在方法外,类里
    • 3.默认值 成员变量有默认值 局部变量没有默认值
    • 4.内存 成员变量存储在堆内存 局部变量存储在栈内存
  8. 构造方法和普通方法的区别

    • 格式不同:构造方法没有返回值,不用void表示;普通方法必须有返回值类型表示,没有返回值用void标识

    • 命名不同:构造方法名字必须和类名相同。 普通方法名字可以是类名(不规范)。

    • 调用不同:构造方法被关键字new调用,调用一次就创建一个对象,构造方法不能被对象调用。 普通方法只能被对象调用,一个对象可以调用多次普通方法。

    • 是否有默认:一个类如果没有定义构造方法,默认有一个无参数的构造方法。 普通方法没有默认

  9. 面向对象的三大特征:封装,继承,多态

    • 封装:将类的属性变为私有属性后,外界不能对类内部的私有属性进行访问,而通过set()赋值、get()访问的方式叫封装,解决了数据安全问题。public、protected、private等访问权限。
    • 继承:一个类可以继承另一个类,继承的类则具备了被继承类的所有成员变量及方法。解决了代码复用问题,同时让类之间产生了关系,为“多态”提供了前提。
    • 多态:一个引用在不同情况下的多种状态就是多态,解决了功能扩展问题。方法重写就是多态的一个实现,同一个方法不同的实现。
  10. 父类和子类:有继承关系的两个类称为父类和子类。子类继承父类,父类派生子类。Java是单一继承。

  11.  子类继承父类后:

    • 子类可以拥有父类的全部属性和自定义方法。

    • 子类可以重写(override)从父类继承下来的自定义方法,重写时可以使用super.父方法()调用父类中的自定义方法。子类的重写的方法必须和父类方法名字相同、参数相同、返回值相同。注意:如果子类重写了父类的方法,子类重写的方法的权限必须大于或等于父类被重写的方法。说明:重载(overload)

    • 子类可以新增自己独有的属性和方法。

    • 子类不能继承父类的构造方法。(因为子类有子类的构造方法,new的时候已经指明),虽然不能继承,但是能调用父类的构造方法,子类的构造方法在调用时,会自动的执行父类默认的构造方法(见程序3)。子类的构造方法中可以使用super(),手动指定父类中构造方法(见程序4)。

  12.  Java中的继承是单一继承,即一个父类可以有多个子类,一个子类只能有一个父类,不支持多继承。但java支持多重继承,及B extends A,C extends B 。在Java中只允许单一继承,C++可以多继承(继承多个父类)

  13. super关键字

-  super.方法名();调用父类的自定义方法,写在子类的自定义方法中。
-  super();调用父类的默认构造构造方法,默认构造方法是隐式的。

-  super(*,*):如果父类中不存在默认构造方法,则必须显式的调用有参的构造方法

- 无论是显式的还是隐式的,super()必须写在子类构造方法的第一行

31.  方法重载(overload)和方法重写(override)有什么区别?

   -  位置:重载要求同类中的同名方法(举例Math.round()方法)

      重写要求不同类中的同名方法(不同类要求有继承关系的两个类)

    - 格式:重载要求方法名相同,参数个数或参数类型不同,与返回值无关

         重写要求方法名相同,参数个数、参数类型相同,返回值相同

32. 多态:

  • 定义:一个引用在不同情况下的多种状态就是多态。方法重载就是多态的一个实现,同一个方法不同的实现。

  • 前提:“继承”、“重写”。

  • 特征:a.父类有,子类没有->调用父类

    b.父类有,子类重写->调用子类

    c.父类无,子类有->编译失败

    d.父类只能调用自己的成员变量

  • 优点:a. 如修改程序,只需修改右侧即可;左侧引用类型、引用名称无需改变

b. 如有参数传递,形参指定为父类类型,则实参可以为任意子类类型,提高了程序的扩展性

  1. final关键字
  • 修饰属性:最终属性,不能被修改(赋值)声明的同时必须被初始化,使用的过程中不能被修改值
  • 修饰方法:最终方法,不能被子类重写
  • 修饰类:最终类,不允许被继承
  • 修饰对象:对象的内容能够改变,对象的地址无法修改
  1. 抽象类和普通类的异同?
  • 抽象类的存在时为了被继承,不能实例化,而普通类存在是为了实例化一个对象

  • 抽象类的子类必须重写抽象类中的抽象方法,而普通类可以选择重写父类的方法,也可以直接调用父类的方法

  • 抽象类必须用abstract来修饰,普通类则不用

  • 普通类和抽象类都可以含有普通成员属性和普通方法

  • 普通类和抽象类都可以继承别的类或者被别的类继承

  • 普通类和抽象类的属性和方法都可以通过子类对象来调用

  1. 抽象类和接口的异同?

不同点:

1. 关键字不同:

 ① 继承抽象类的关键字是extends,而实现接口的关键字是implements;

 ② 定义抽象类的关键字是abstract class,而定义接口的关键字是interface;

2. 权限修饰不同:抽象方法可以有publicprotecteddefault这些修饰符(缺省情况下默认为public),而接口方法只能是public ;

3. 抽象类中可以有构造方法,而接口中不能有构造方法;

4. 抽象类中既可以有抽象方法也可以有普通方法,接口中只能有抽象方法;

5. 抽象类中增加方法可以不影响子类,而接口中增加方法通常都影响子类。

6. 抽象类中的变量可以是普通变量,接口里定义的变量只能是公共的静态的常量;

7. 抽象方法可以继承单个类和实现多个接口,接口可以多继承接口;

相同点:

1. 都可以被继承

2. 都不能被实例化

3. 都可以包含方法声明

4. 派生类必须实现未实现的方法不同点:

详情点这