java笔记(1)

1.final、finally、finally

  final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,能重载,不能重写。
  finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。  
  finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对搜索象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

2.&和&&的区别

  &可以是逻辑运算符也可以是位运算符,而&&只能是逻辑运算符
  当&和&&都表示逻辑运算符”与”操作时:
    & :无论左边结果是什么,右边都参与运算。
         &&:短路与,如果左边为false,那么右边不参数与运算。

3.面向对象的四大基本特性
  抽象:提取现实世界中某事物的关键特性,为该事物构建模型的过程。对同一事物在不同的需求下,需要提取的特性可能不一样。得到的抽象模型中一般包含:属性(数据)和操作(行为)。这个抽象模型我们称之为类。对类进行实例化得到对象。
  封装:封装可以使类具有独立性和隔离性;保证类的高内聚。只暴露给类外部或者子类必须的属性和操作。类封装的实现依赖类的修饰符(public、protected和private等)。
  继承:对现有类的一种复用机制。一个类如果继承现有的类,则这个类将拥有被继承类的所有非私有特性(属性和操作)。这里指的继承包含:类的继承和接口的实现。
  多态:多态是在继承的基础上实现的。多态的三个要素:继承、重写和父类引用指向子类对象。父类引用指向不同的子类对象时,调用相同的方法,呈现出不同的行为;就是类多态特性。多态可以分成编译时多态和运行时多态。
  抽象、封装、继承和多态是面向对象的基础

4.什么是拆装箱
  拆箱:把包装类型转成基本数据类型
  装箱:把基本数据类型转成包装类型

  一共有八种基本数据类型:
  整数值型:byte,short,int,long,
  字符型:char
  浮点类型:float,double
  布尔型:boolean
  整数默认int型,小数默认是double型。Float和long类型的必须加后缀。
  首先知道String是引用类型不是基本类型,引用类型声明的变量是指该变量在内存中实际存储的是一个引用地址,实体在堆中。引用类型包括类、接口、数组等。String类还是final修饰的。而包装类就属于引用类型,自动装箱和拆箱就是基本类型和引用类型之间的转换,至于为什么要转换,因为基本类型转换为引用类型后,就可以new对象,从而调用包装类中封装好的方法进行基本类型之间的转换或者toString(当然用类名直接调用也可以,便于一眼看出该方法是静态的),还有就是如果集合中想存放基本类型,泛型的限定类型只能是对应的包装类型。

5.Overload和Override的区别
  方法的重写Override和重载Overload是Java多态性的不同表现。重写Override是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Override)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overload)。重载和重写可以改变返回值的类型,。

6.黑盒测试、灰盒测试、白盒测试、单元测试
  黑盒测试关注程序的功能是否正确,面向实际用户;
  白盒测试关注程序源代码的内部逻辑结构是否正确,面向编程人员;
  灰盒测试是介于白盒测试与黑盒测试之间的一种测试;
  单元测试(Unit Testing)是对软件基本组成单元进行的测试,如函数或是一个类的方法。这里的单元,就是软件设计的最小单位。
7.什么是Java虚拟机
  Java虚拟机(Java Virtual Machine 简称JVM)是运行所有Java程序的抽象计算机,是Java语言的运行环境,是一个可以执行Java字节码的虚拟机进程。Java源文件,就是.java的文件,被编译成能被Java虚拟机执行的字节码文件,就是.class文件。只有安装了Java虚拟机,Java才能在操作平台上运行。
  Java虚拟机由五个部分组成:一组指令集、一组寄存器、一个栈、一个无用单元收集堆(Garbage-collected-heap)、一个方法区域。这五部分是Java虚拟机的逻辑成份,不依赖任何实现技术或组织方式,但它们的功能必须在真实机器上以某种方式实现。
8.为什么Java是“平台无关的编程语言”
  我们知道在计算机上运行的就是0和1的字节码文件(在Java里面就是.class文件)。在Java里面,Java虚拟机可以安装在任何平台运行,而Java虚拟机运行的时候,负责把Java文件翻译成.class文件,然后字节码文件由虚拟机负责解释执行,即Java虚拟机将字节码翻译成本地计算机所需要的机器码,然后将机器码交给本地的操作系统,这个操作系统就会运行。
  所以一般能安装Java虚拟机的操作系统,都是可以运行Java文件的,所以Java是一种"半编译,半解释"的编程语言。可以看出,Java的运行流程一般是:源程序——>编译——>字节码——>字节码解释程序——>对应平台的机器语言。”
9.JDK、JRE、JVM关系是什么?

  JDK(Java Development Kit)即为Java开发工具包,包含编写Java程序所必须的编译、运行等开发工具以及JRE。开发工具如:用于编译java程序的javac命令、用于启动JVM运行java程序的java命令、用于生成文档的javadoc命令以及用于打包的jar命令等等。四个主要文件夹:
  bin:最主要的是编译器(javac.exe)
  include:java和JVM交互用的头文件
  lib:类库
  jre:java运行环境(bin(jvm)和lib(相关类库))
  JRE(Java Runtime Environment)即为Java运行环境,提供了运行Java应用程序所必须的软件环境,包含有Java虚拟机(JVM)和丰富的系统类库。系统类库即为java提前封装好的功能类,只需拿来直接使用即可,可以大大的提高开发效率。
  JVM(Java Virtual Machines)即为Java虚拟机,提供了字节码文件(.class)的运行环境支持。
简单说,就是JDK包含JRE包含JVM。


10.什么是值传递、引用传递

  值传递的概念:在值传递过程中,形式参数类型是基本数据类型,当用方法调用时,实际参数将它的值传递给相应的形式参数,而形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,因此在方法执行中形式参数值的改变不影响实际参数的值。
  引用传递的概念:在引用传递中,形式参数类型是引用数据类型参数,或者叫做“传地址”。当方法调用时,实际参数对象(或数组)与形式参数指向同一个地址,执行方法的过程中,对形式参数的操作实际上就是对实际参数的操作,在方法结束后这一结果被保留下来,于是形式参数的改变将会影响实际参数的值。
  Java程序中的变量通常有两种可能:引用类型或基本类型。当某个参数传递给一个方法时,处理这两种类型的方式是相同的。两种类型均可以按值传递,而不需要引用传递。按值传递意味着当将一个参数传递给一个函数(或方法)时,函数接收的是原始值的副本。因此,如果参数被函数修改,改变的只是副本,原值可以不变。若是按照引用传递,当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本。因此,若这一参数被函数所修改,调用代码中的原始值也随之变化。
  Java的函数传参方式都是值传递,唯一区别是形参是基本数据类型,还是引用数据类型,而这两种数据类型造成在函数体中修改了参数的额值,在函数体外是否跟着发生改变,根本原因是,两种数据类型变量在内存中存储的方式不一样,基本类型的变量保存原始值,即它代表的值就是数值本身;而引用类型的变量保存的是引用值,"引用值"指向内存空间的地址,代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。即基本类型的变量直接保存在函数调用栈中,而对象的变量的值其实是保存在堆中,然后将这个对象在堆中的值的地址引用存放到函数调用栈中。

参照博客:https://blog.csdn.net/cauchyweierstrass/article/details/49047217

猜你喜欢

转载自www.cnblogs.com/zhiyinnianshao/p/10479692.html