java基础面试题(1)

原文

1.jvm、jre、jdk

jvm是java虚拟机,java程序需要运行在虚拟机上所以java是跨平台运行的。
jvm+核心库类等于jre,有了jre之后java程序就可以运行了
jre+开发工具=jdk,有了jdk,程序人员就可以编辑java了

2.java和C++区别

相同点:java和C++都是面向对象,都有封装继承多态
不同点:

  1. java能够自动释放内存,C++不能
  2. java没有指针,C++有
  3. java的类是单继承的,C++的类是多继承的,但是java的接口可以多继承

3.java基础数据类型

  • 基本数据类型
  • 数值型
  • 整形 byte short int long int为4字节
  • 浮点型 float double float4字节
  • 字符型 char 只能表示一个字符
  • 布尔型 boolean
  • 引用数据类型
  • class
  • interface
  • 数组[]

4.round()

round()原理为四舍五入 在参数上加上0.5 向下取整 11.5+0.5=12 -11.5+0.5=-11

5.单精度、双精度(存疑)

暂时跳过

6.访问修饰符

private default protected public
private 当前类
default 当前类 同包
protected 当前类 同包 子类
public 当前类 同包 子类 其他包

7.短路符号

&与&& 左边是都要判断 右边是只要有一个不是 就直接结束
| 与|| 左边是都要判断 右边是只要有一个成功就成功

8.final

final可以修饰类、属性和方法
final修饰类的话表名类不可被继承
final修饰的方法不可被重写
final修饰的变量不可被改变,被final修饰的不可变的是变量的引用,而不是引用的指向的内容,引用指向的内容是可以改变的
最后一行的解释就是

final StringBuilder text = new StringBuilder("haha");
输出text的内容为haha
text.append("新的内容")
输出text的内容为haha新的内容

但是看其hashcode的话 没有改变
也就是说 对于final修饰的引用变量不可以被改变,但是引用变量所指的内容可以被改变

9.final finally finalize

final 可以修饰类 属性 方法,修饰类表示该类不可被继承,修饰该方法表示该方法不可被重写,修饰变量说明该变量不可被改变
finally常用于try catch 执行结束之后 继续执行一些操作 例如关闭资源
finalize是一个方法,属于Object的一个方法,和垃圾回收有关

10.this关键字

this是自身的一个对象,代表对象本身,可以理解成只想对象本身的一个指针
没有明白什么意思,以前用的很模糊,继续看
this有三种用法
1 普通的直接引用,this相当于指向当前对象本身。
这种什么意思,上一个实例

public class test {
    public int height = 10;
    public int weight = 20;

    public void show(){
        int total = this.height+this.weight;
        System.out.println(total);
    }
    public static void main(String[] args) {
        test zhangsan = new test();
        zhangsan.show();
    }
}

就是默认指向当前对象本身。
2 当成员变量与方法内部的变量重名时需要使用this
重名的意思是

	public int height = 10;
    public int weight = 20;
    public void show(int height){
        this.height=height;
    }

用this来区分成员变量和方法内部变量
3 引用本类的构造函数(应为构造函数的第一条语句)

/**
	* 使用this关键字引用构造方法
	*/
 
	public class ReferenceConstructor {
		int a;
		public ReferenceConstructor(){
			this(0);
		}
		public ReferenceConstructor(int a){
			this.a = a;
		}
	}

11.super

1 普通的直接引用,引用父类的成员
super.xxx
2 当父类成员变量和方法和子类成员变量和方法名称相同时,采用super确定父类的成员变量和方法
3 调用父类的某一个构造函数,应为构造函数中的第一条语句。

12.this和super的区别

super它引用当前对象的直接父类成员,this代表当前对象名
super调用父类的构造方法,this调用当前对象的构造方法
super()与this()均放在构造函数的第一条语句
this和super不能出现在同一个构造函数之中
this()和super()都是指的对象,所以不能出现在static环境中使用。
从本质来讲this是一个指针,而super是一个关键字

13.static

static的主要意义是创建独立于具体对象的域方法变量或方法,以致于即使没有创建对象,也能使用属性和调用方法。
static还有一个关键的作用是用来形成静态代码块来优化程序性能,static块可以置于类中的任何地方,类中有多个static块,在类初次被加载的时候会按照static块的顺序来执行每个static块,并且只会执行一次,第一次用进行初始化,分配空间,以后创建类的对象的时候不会重新分配,后面可以根据需要进行赋值。
被static修饰的变量或者方法是独立于该类的任何对象,这些对象被该类的所有对象共享。

注意事项:
静态只能访问静态,非静态可以访问非静态和静态。

14.流程控制语句

break 跳出总上一层循环
continue 跳出本次循环 进行下一次循环
return 结束当前的方法,直接返回。

15.面向对象特征

1 抽象
抽象就是将一类对象的共同特征提取出来构造类的过程,包括数据抽象和行为抽象两方面,抽象只关注对象有哪些属性和方法,而不关心这些细节是什么
2 封装
把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法。
3 继承
子类拥有父类非private的属性和方法
子类可以有自己的属性和方法,即子类可以对父类进行扩展。
子类可以用自己的方法实现父类的方法。
4 多态
java中有两种形式可以实现多态,继承(多个子类对同一方法的重写) 接口(实现接口并覆盖接口中的同一方法)
方法重载实现的是编译时的多态性(前绑定),方法重写实现的是运行时的多态性(后绑定)
实现多态需要做两件事
方法重写(子类继承父类并且重写父类中已有的或者抽象的方法)
对象造型(用父类型引用子类型对象,这样同样的引用调用同样的方法会根据子类对象的不同表现而表现出不同的行为)

16.多态

多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时不确定,而是在程序运行期间才确定。
多态存在的三个必要条件:继承 重写 父类引用指向子类对象
继承 在多态中必须存在有继承关系的子类和父类
重写 子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法
向上转型 多态中将子类的引用赋给父类对象,只有这样该引用才能具备技能调用父类的方法和子类的方法。
具体代码可以看菜鸟教程的java多态

17.抽象类和接口对比

抽象类用来捕捉子类的通用特性,接口是抽象方法的集合。
从设计层面上来讲,抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。
相同点:接口和抽象类都不能实例化 都位于继承的顶端用于被其他类的实现和继承 都包含抽象方法子类都必须重写这些抽象方法。
不同点
abstract interface
抽象类的子类如果需要继承的话,如果子类不是抽象类,子类需要提供抽象类中所有声明的方法的实现。对于接口来说,子类采用implements来实现接口,子类需要提供接口中所有声明方法的实现。
抽象类可以有构造器,接口不能有构造器
抽象类中的方法可以使任意修饰符 接口中的方法默认修饰符是public 允许本类 本包 其他类进行调用,修饰符不能够是private或者protected
一个类只能继承一个抽象类,但是一个类可以实现多个接口
抽象类的字段声明可以是任意的,但是接口的字段声明默认是static和final

18.普通类和抽象类的不同

普通类不能包含抽象方法,抽象类可以
普通类能够直接实例化,抽象类不可以

19.java中定义一个不做事并且没有参数的构造方法的作用

在子类初始化的时候,如果父类中没有一个无参构造并且子类中也没有用super来调用父类中特定的构造结构的话,编译就会报错。
主要是帮子类进行初始化。

20.静态变量和实例变量的区别

静态变量不属于任何实例对象,属于类,所以内存中只有一份,在类的加载过程中jvm只为静态变量分配一次内存空间
每次创建对象的时候,会为每个对象分配成员变量内存空间,实例变量是属于实例对象的,在内存中创建几次对象就会有几份成员变量。

21.静态变量与普通变量的区别

静态变量被所有的对象共享,在内存中只有一个副本,他会在类初次加载的时候初始化,而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的的副本互不影响。

22.静态方法与实例方法。

调用静态方法可以是类名+方法也可以是对象+方法 而实例方法只有对象+方法这一种
也就是说 调用静态方法无需创建对象
静态方法在访问本类成员的时候,只能访问静态成员,不允许访问实例变量和实例方法,实例方法无此限制

23.什么是内部类

java中,将一个类放在另外一个类内部,内部类本身就是类的一个属性,与其他属性定义方式一致。
内部类可以分为四种:
成员内部类
局部内部类
匿名内部类
静态内部类

24.四种内部类

成员内部类
静态内部类:定义在类内部的静态类 可以访问外部类的所有的静态变量,而不可以访问外部类的非静态变量
创建方式:new 外部类.静态内部类()

成员内部类:定义在类内部的非静态类,可以访问外部类的静态变量和非静态变量
创建方式:外部类实例.成员内部类()

局部内部类:定义在方法内的类,定义在实例方法的局部类可以访问外部类所有的变量和方法,定义在静态方法的局部类只可以访问外部类的静态变量和方法。
创建方式:在对象方法中 new 内部类()

匿名内部类:匿名内部类就是内部中没有名字的类
匿名内部类必须继承一个抽象类或者实现一个接口
匿名内部类不能定义任何静态成员或者静态方法
当所在的方法的形参需要被匿名内部类使用时,必须声明为final
匿名内部类不能是抽象的,他必须要实现继承的类或者实现接口的所有抽象方法

25.重写和重载

重写发生在父子类中,方法名参数列表必须相同,返回值小于等于父类,抛出的异常小于等于父类,访问修饰符大于等于父类,
重载发生在同一个类之中,方法名相同,参数列表不同(数量不同,顺序不同,参数类型不同),与方法返回值和访问修饰符无关,即重载的方法不能够根据返回类型进行区分。

26.java方法参数

一个方法不修改一个基本数据类型的参数
一个方法可以改变一个对象参数的状态
一个方法不能够让对象参数引用一个新的对象

27.http返回码

200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - 服务不可用

28.反射

java反射机制是指在运行状态中,对于任何一个类都能知道这个类的所有属性和方法,对于任意一个对象都能够调用他的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能被称为java语言的反射机制。
举例应用:jdbc连接数据库通过Class.forName()通过反射加载数据库的驱动程序 spring通过xml配置模式装在bean的过程(将程序内所有xml活properties配置文件加载入内存中 java类里面解析xml或properties里面的内容 得到对应实体类的字节码字符串以及相关的属性信息 根据反射机制根据这个字符串获得某个类的class实例)

java获取反射的三种方法
通过new对象实现反射机制 通过路径实现反射机制 通过类名实现反射机制

public class Student {
    private int id;
    String name;
    protected boolean sex;
    public float score;
}
public class Get {
    //获取反射机制三种方式
    public static void main(String[] args) throws ClassNotFoundException {
        //方式一(通过建立对象)
        Student stu = new Student();
        Class classobj1 = stu.getClass();
        System.out.println(classobj1.getName());
        //方式二(所在通过路径-相对路径)
        Class classobj2 = Class.forName("fanshe.Student");
        System.out.println(classobj2.getName());
        //方式三(通过类名)
        Class classobj3 = Student.class;
        System.out.println(classobj3.getName());
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值