JAVASE的常见面试题(上)

  1. 类的描述
    1. 一个源文件中可以有多个类,在编译之后每个类生成对应的.class文件
    2. 一个类中只能有一个主函数
    3. 一个源文件中只能有一个公开类,文件中如果有公开类,文件的名称必须和类名保持一致,包括大小写
  2. 变量的定义流程
    1. 先声明,再赋值
      语法:数据类型 变量名;变量名=值;
      例:int money; money=20;
    2. 声明并赋值
      语法:数据类型 变量名=值;
      例:int age=20;
    3. 同时声明多个变量并赋值
      语法:数据类型 ,变量名1,变量名2=值
  3. 数据类型
    数据类型:基本数据类型,引用数据类型
    1. byte 1字节 取值范围 -128~127
    2. short 2字节 取值范围 -32768~32767
    3. int 4字节 取值范围 -2147483648~2147483647
    4. long 8字节
    5. float 4字节
    6. double 8字节
    7. boolean 1字节
    8. char 2字节
  4. if和switch区别
    1. if用于判断区间值
    2. switch用于等值判断
  5. 局部变量
    1. 概念:定义在函数中,必须先赋值再使用。
    2. 作用范围:定义行到所在代码块结束
    3. 命名冲突:多个变量,作用范围重合的情况下不能重名。
  6. java中3个循环的区别?
    1. while ,for首次有入口条件,先判断再执行,适用于循环次数不明确的情况。
    2. do…while:没有入口条件,先执行再判断,适用于循环次数不明确的情况。
    3. for 比while语法更清晰,可读性更高。
  7. break和continue的区别
    1. break用在swith和循环中,表示结束switch和结束当前循环
    2. cintinue:用在循环中;表示跳出本次循环,继续执行下次循环。
  8. return的用法
    1. 应用在返回值类型为void函数中。
      语法:return;//表示结束当前函数,直接回到调用位置。
    2. 应用在返回值类型除了void以外的函数中
      语法;return value;//表示结束当前函数,并伴有一个结果返回到调用位置。
  9. 数组的扩容
    1. 使用循环依次复制
         int arr[]=new int[10];
        System.out.println(arr.length);
        int newArry[]=new int[arr.length*2];
        for(int i=0;i<arr.length;i++){
            newArry[i]=arr[i];
        }
        arr=newArry;
        System.out.println(arr.length);
  1. system.arrycopy(原数组名,原数组起始,新数组名,新数组起始,复制的长度)
  2. java.util.Arrays.copyof(原数组名称,新数组长度)
    注意:函数会返回一个新数组,新数组的数据类型和原数组一致。
  3. 可变长参数
    概念:定义在函数上,可以接受多个相同类型的数据,使用方法和数组一样。
    语法:数据类型 …形参名
    注意:一个函数中只能存在一个可变长参数,并且必须在形参列表的最后。
  4. 数组的排序
    1. 冒泡排序
      概念:相邻两个元素,两两进行比较,互换位置
for(int i=0;i<arr.length-1;i++){
			for(int j=0;j<arr.length-1-i;j++){
				int temp;
				if(arr[j]>arr[j+1]){
					temp=arr[j];
				    arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
			}
		}
  1. 选择排序
    概念:固定值与每一个值做比较,互换位置
for(int i=0;i<arr.length-1;i++){
			for(int j=i;j<arr.length-1;j++){
				int temp;
				if(arr[j]>arr[j+1]){
					temp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
			}
		}
  1. 实例变量

在这里插入图片描述
13. 对象的创建过程
1. 开辟对象空间
2. 初始化属性
3. 执行构造方法中的代码
4. 声明同类型的引用进行接收。

  1. 不可被继承的
    1. 构造方法
    2. private 修饰的属性和方法。
    3. 父子类不在同一个package中,使用default修饰的属性和方法
  2. 访问修饰符 在这里插入图片描述
  3. overload和overide的区别?
    1. 重载(overload):一个类中定义多个相同名称的方法。
      要求: 1.方法名相同 2:参数类别不同(类型、个数、顺序)3:与访问修饰和返回值类型无关。
    2. 覆盖(override):父类方法无法满足子类的需要,需要进行覆盖。
      要求: 1:返回值类型,方法名,形参列表和父类完全一致。2:修饰符合父类相同或比父类更宽。
  4. 多态
    1. 概念:父类引用指向子类对象
      注:1:父类引用只能调用父类中所定义的属性和方法,子类独有的属性和方法父类不能调用 。2:二者必须存在继承关系。
    2. 多态的应用
      1. 父类引用应用在形式参数上,能够接收本类类型+所有子类类型
      2. 父类类型应用在返回值类型上,能够返回本类类型+所有子类类型
        好处:降低耦合性;屏蔽子类间的差异
  5. 静态(static)
    1. 概念:
      1. 静态可以修饰属性和方法。
      2. 修饰属性我们称为静态属性(类属性),修饰方法称为静态方法(类方法)
      3. 静态成员是全类所有对象共享的成员,只有一份,不因创建多个而产生多分。
      4. 静态成员应该使用类名访问。
    2. 特点
      1. 静态方法可以直接访问静态成员。
      2. 静态方法不能直接访问非静态成员,可以通过创建对象进行访问。
      3. 静态方法可以被继承,没有覆盖,没有多态。
    3. 抽象类
      1. 作用:为子类提供共性属性和方法;可以声明引用,强制使用多态。
      2. 特点:
        1. 抽象类不能创建对象,可以声明引用。
        2. 抽象类中不一定有抽象方法,而又抽象方法的一定是抽象类。
        3. 继承下,子类必须覆盖父类中抽象方法,否则子类声明为抽象类。
        4. 抽象方法:只有方法声明,没有方法实现。
    4. final可修饰的
      1. 类:表示最终类,不能被继承。
      2. 方法:表示最终方法,不能被覆盖。
      3. 变量:变量为常量,只能赋值一次。
        局部变量:显示初始化。
        实例变量:显示初始化,动态代码块,构造方法。
        静态变量:显示初始化,静态代码块。
        基本数据类型变量:值不可变。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值