天天看点

Java基础面试题---------------概念-----------------谈谈面向对象的思想JDK1.5之后的三大版本JDK、JRE、JVM的关系什么是跨平台?原理是什么?Java语言的特点-------------基本语法---------------数据类型编码访问符运算符关键字-----------面向对象---------------疑问:

---------------概念-----------------

谈谈面向对象的思想

​ 面向对象是一种编程思想,在面临问题时跟面向过程的区别是:面向对象关注使用什么工具去解决,而面向过程是关注解决问题本身。就好比面向对象是“调用者”,面向过程是执行者。例如:编写一个生成随机数的函数,面向对象回去调用random方法,而面向过程会去编写一个生成随机数的方法。

​ 面向对象由三大特性:封装,继承,多态;

封装:

把类的数据声明为私有的,提供特定的方法去访问,就比如公有方法调用私有属性;

继承:

一个类可以去继承一个类,被继承的类是父类,另一个类是子类,子类拥有父类的方法,这样就实现了代码的复用,避免了重复的代码,并且可以重写和覆盖父类的方法。Java只有单继承,没有想C++的多继承。但是Java中的接口可以多重实现。

多态:

发生在子类继承父类中,重写父类的方法可以使同名的方法产生不同的结果,即一个操作产生多种状态。

重写的规则:同名方法,不同参数类型、参数个数、参数。。。、重写方法区分度要够,不同的返回值类型不能算是重写。

1、面向对象的编程语言

2、吸收了C++的优点,摒弃了C++难以理解的多继承、指针等概念,所以Java语言具有功能强大和简单两大特性。

3、极好的实现了面向对象理论,使得程序员以优雅的方式进行复杂编程。

JDK1.5之后的三大版本

JavaSE(标准版):

​ 允许开发和部署在桌面、服务器、嵌入式环境和实时环境的Java应用程序。它包含了支持JavaWeb服务开发的类,为JavaEE、JavaMe提供了基础。

JavaEE(企业版)

帮助开发和部署可移植性、健壮、可伸缩性、安全的服务端应用程序。

JavaME(微型版)

为移动设备、嵌入式设备上运行的应用程序提供健壮且灵活的环境。

JDK、JRE、JVM的关系

JDK(Java Development Kit,Java开发工具包)

提供给Java开发人员使用的,包含了Java的开发工具,包含了JRE,所以它是提供了Java的开发环境和运行环境的。

包含了编译Java源文件的编译器,调试和分析工具。

JRE(Java Runtime Environment,Java运行环境)

包含了JVM和Java程序需要的核心类等

JVM(Java Virtual Machine,Java运行虚拟机)

JVM是跨平台的核心,但是JVM本身并不是跨平台的,即不同平台有不同的JVM;不同的平台需要安装不同的JVM

提供了执行字节码(.class)的能力

Java基础面试题---------------概念-----------------谈谈面向对象的思想JDK1.5之后的三大版本JDK、JRE、JVM的关系什么是跨平台?原理是什么?Java语言的特点-------------基本语法---------------数据类型编码访问符运算符关键字-----------面向对象---------------疑问:

注意:

如果只是运行Java程序,只需要安装JRE即可。

什么是跨平台?原理是什么?

**跨平台:**Java程序经过编译,一次编译,就可以在多个系统平台运行。

**原理:**Java程序是通过JVM在系统上运行的,即不同的平台只要安装了对应的虚拟机,就可以运行Java程序。

Java语言的特点

1、简单易学(Java语言的语法与C语言和C++语言很接近)
2、面向对象(封装,继承,多态):

​ Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。

3、与平台无关(通过JVM实现了平台无关性)
4、支持网络编程并且很方便(Java本身就是简化了网络编程)
5、支持多线程(多线程机制使应用程序可以同时运行多个不同的线程,执行不同的任务)
6、健壮性
  • Java语言的强类型机制:强类型指的是程序中表达的任何对象所从属的类型都必须能在编译时刻确定。它可以通过类型检查机制在编译过程中发现许多容易被人忽视的错误,从而保证软件的质量,使得大规模的软件集成为可能。
  • 异常处理:java把c++里面很多警告变成错误 ,这样设计的原则是为了让劣质代码不能写出来

    健壮性程序,1/9是核心代码 2/9是注释 **2/3是处理可能的异常。**就好比,某米手机系统经常出Bug,这样让人怎么使用?

    健壮性

  • 垃圾的自动收集:程序员不用去关注垃圾的回收,只需专注去写代码就可

​ 等等…

6、安全性
7、**Java语言全面支持动态绑定,**而C++语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。

动态绑定(运行时绑定、后期绑定):

编译时类型:该对象编译后在文件里的类型,也就是指对象声明时的类型

运行时类型:程序运行时动态指定的类型,也就是对象定义时的类型

如果编译时类型与运行时类型不一致就会发生运行时动态绑定。

//这编译时类型和运行时类型不一致,这是就会出现动态绑定;
//重写的方法在调用时,会动态绑定(即运行时绑定)到具体对象的类型上。
Fruit fruit = new Apple();
fruit.say();
           
Apple fruit = new Apple();//编译时类型和运行时类型一致
fruit.say();
           

静态绑定(前期绑定、编译时绑定):

​ 在程序执行前方法已经被绑定(也就是说在编译过程中就已经知道这个方法到底是哪个类中的方法),此时由 编译器或其它连接程序实现。例如:C。

​ 针对java简单的可以理解为程序编译期的绑定;这里特别说明一点,java当中的方法只有final,static,private和构造方法是前期绑定

总结:

​ 有方法调用、变量访问在编译时都会绑定到一个具体的对象上,但部分重写的方法在调用时会涉及到动态绑定。

动态绑定

Java的静态绑定和动态绑定

Java方法重写与重载、动态绑定和静态绑定的区别

-------------基本语法---------------

数据类型

Java基础面试题---------------概念-----------------谈谈面向对象的思想JDK1.5之后的三大版本JDK、JRE、JVM的关系什么是跨平台?原理是什么?Java语言的特点-------------基本语法---------------数据类型编码访问符运算符关键字-----------面向对象---------------疑问:

Java是强类型语言,每一种数据都定义了明确的数据类型,在内存中分配了不同的内存空间

基本类型:

Java基础面试题---------------概念-----------------谈谈面向对象的思想JDK1.5之后的三大版本JDK、JRE、JVM的关系什么是跨平台?原理是什么?Java语言的特点-------------基本语法---------------数据类型编码访问符运算符关键字-----------面向对象---------------疑问:

Java八种基本数据类型(图文详解)

引用类型:

编码

Java语言采用何种编码方案?有何特点?

​ Java语言采用Unicode编码标准,Unicode(标准码),它为每个字符制订了一个唯一的数值,因此在任何的语言,平台,程序都可以放心的使用。

访问符

运算符

&&之所以称为短路运算,是因为如果&&左边的表达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。

注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。

关键字

Java 有没有 goto

goto 是 Java 中的保留字,在目前版本的 Java 中没有使用。

final 有什么用?

属性上:

该属性变为常量,不能修改。

对于基本类型是数值不能修改,对于引用类型是引用的指向,但是指向的地址里的具体数据可修改。

方法上:

该方法不能被重写,可用于模板方法、固定我们的算法

类上:

该类不可被继承

final finally finalize区别

  • final可以修饰类、变量、方法,修饰类表示该类不能被继承、修饰方法表示该方法不能被重写、修饰变量表

    示该变量是一个常量不能被重新赋值。

  • finally一般作用在try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代码方法finally代码块

    中,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。

  • finalize是一个方法,属于Object类的一个方法,而Object类是所有类的父类,该方法一般由垃圾回收器来调

    用,当我们调用System.gc() 方法的时候,由垃圾回收器调用finalize()回收垃圾,一个对象是否可回收的

    最后判断。

this关键字的用法

this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。

this的用法在java中大体可以分为3种:

  1. 普通的直接引用,this相当于是指向当前对象本身。
  2. 形参与成员名字重名,用this来区分
  3. 引用本类的构造函数
class Person{
    private String name;
    private int age;
    
    public Person() {
    }
 
    public Person(String name) {
        this.name = name;
    }
    public Person(String name, int age) {
        this(name);
        this.age = age;
    }
}
           

super的用法

super可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。

super也有三种用法:

  1. 普通的直接引用
  2. 子类中的成员变量或方法与父类中的成员变量或方法同名时,用super进行区分
  3. 引用父类构造函数
  • super(参数):调用父类中的某一个构造函数(应该为构造函数中的第一条语句)。
  • this(参数):调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句)。

this和super的区别

  • super()和this()类似,区别是,super()在子类中调用父类的构造方法,this()在本类内调用本类的其它构造方法。
  • super()和this()均需放在构造方法内第一行。
  • 尽管可以用this调用一个构造器,但却不能调用两个。
  • this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。
  • this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。
    因为this代表的是调用这个函数的对象的引用,而静态方法是属于类的,不属于对象,静态方法成功加载后,对象还不一定存在 
               
  • 从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。

static

static存在的主要意义

  1. 创建独立于具体对象的属性和方法,即使用类名就可以使用属性和方法。
  2. static用于形成静态代码以优化程序性能,static代码可在类中的任意地方。类初次被加载的时候会按照static代码块的顺序执行每个static代码,并且只会执行一次

为什么说static块可以用来优化程序性能?

是因为它的特性:只会在类加载的时候执行一次。因此,很多时候会将一些只需要进行一次的初始化操作都放在static代码块中进行。

static的独特之处

  1. 被static修饰的属性和方法是独立于该类对象的,不属于任何一个实例对象,而是被类的实例对象所共享。
  2. 类在第一次加载时就回去加载static修饰的部分,只在类第一次使用时加载并初始化,就是第一次用的时候初始化后面根据需要再赋值。
  3. static变量再类加载的时候就分配了空间,之后创建对象时也不会再分配空间。赋值的话可以任意赋值。
  4. 被static修饰的变量或者方法是优先于对象存在的,也就是说当一个类加载完毕之后,即便没有创建对象,也可以去访问。

static应用场景

  1. 修饰成员变量
  2. 修饰成员方法
  3. 静态代码块
  4. 修饰类【只能修饰内部类也就是静态内部类】
  5. 静态导包

    意思是**导入这个类里的静态方法。*当然,也可以只导入某个静态方法,只要把 . 换成静态方法名就行了。然后在这个类中,就可以直接用方法名调用静态方法,而不必用ClassName.方法名 的方式来调用。

static注意事项

  1. 静态只能访问静态
  2. 非静态能访问静态和非静态

-----------面向对象---------------

疑问:

  1. 隐藏是什么

继续阅读