自家房子做民宿的网站,网站建设公司网,长春模板建站代理,淘宝详情页制作教程Java Se
Java语言有哪些特点#xff1f; 简单易学#xff1b;面向对象(封装、继承、多态);平台无关性支持多线程可靠性(具备异常处理和自动内存管理机制) JVM 、JDK 、JRE三者之间的关系#xff1f;
JDK(Java Develoment Kit): 是Java开发工具包#xff0c;是整个Java的核…Java Se
Java语言有哪些特点 简单易学面向对象(封装、继承、多态);平台无关性支持多线程可靠性(具备异常处理和自动内存管理机制) JVM 、JDK 、JRE三者之间的关系
JDK(Java Develoment Kit): 是Java开发工具包是整个Java的核心包括了Java运行环境JRE、Java工具和Java基础类库。
JRE(JavaRuntime Environment): 是Java的运行环境包含JVM标准实现及Java核心类库。
JVM (Java Virtual Machine) :是Java虚拟机是整个Java 实现跨平台的最核心的部分能够运行以Java语言写作的软件程序。所有的Java程序会首先被编译为.class的类文件这种类文件可以在虚拟机上执行。
面向对象有哪些特性
封装封装把一个对象的属性私有化访问它可以通过特定的接口。
继承通过已有的类来创建新类的过程已有的类称为基类/父类新类称为子类/派生类新类可以继承父类的方法和属性也可以新增自己的方法和属性。
多态分为编译时多态方法重载和运行时多态方法重写。要实现多态需要做两件事一是子类继承父类并重写父类中的方法二是用父类型引用子类型对象这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为。在 Java 中有两种形式可以实现多态继承多个⼦类对同⼀⽅法的重写和接⼝实现接⼝并覆盖接⼝中同⼀⽅法。
重载和重写的区别
定义和实现方式 重载在同一个类中定义多个同名但参数列表不同的函数可以有不同的返回类型。重写在派生类中重新定义基类中已经定义的函数函数名、参数列表和返回类型都必须相同。 触发条件 重载在同一个类中定义多个同名但参数列表不同的函数。重写需要有继承关系派生类中重新定义基类中已经定义的函数。 调用方式 重载根据调用时提供的参数类型和数量调用对应的重载方法。重写根据对象的实际类型调用对应的重写方法。
构造方法有什么特性
名字与类名相同没有返回值但不能用void声明构造函数成类的对象时自动执行无需调用。
Java中创建对象的几种方式 使用new 关键字 使用Class类的newInstance方法该方法调用无参的构造器创建对象反射 Class.forName.newInstance();使用克隆clone()方法; 反序列化,比如调用ObjectInputStream 类的readObject()方法
抽象类和接口的区别
抽象类中可以包含抽象方法和具体方法可以有成员变量和构造方法可以被继承 接口中只能由抽象方法在JDK1.8以后包含默认方法(具体实现的方法)。抽象类中可以定义构造函数接口中不能定义构造函数。抽象类中的成员权限可以是public、默认、protected、抽象类中的抽象方法就是为了重写所以不能被private修饰接口中的方法默认public abstrat、成员变量默认public static final抽象类可以被其他类继承子类可以继承抽象类的属性和方法并可以覆盖其中的方法。接口可以被类实现类必须实现接口中定义的所有的方法实现类可以实现多个接口。
Integer和int的区别
int是Java的八种基本数据类型之一而integer是Java为Int提供的封装类int 型变量的默认值是0Integer变量的默认值是null,这一点说明Integer可以区分未赋值和为0的区分Integer变量必须实例化才可以使用而int不需要实例 由于Integer变量实际上是对一个Integer对象的引用所以两个通过new生成的Integer变量永远是不相等的因为其内存地址是不同的 如果Integer和int比较时只要两个变量值相等则结果就是true,因为包装类Integer和基本数据类型比较时会自动进行拆箱操作实际是两个int型变量在进行比较 final、finally、finalize的区别
final:用于声明属性、方法和类表示属性不可变、方法不可覆盖、被其修饰的类不可继承
finally: 异常处理语句结构一部分表示总是执行
finalizeObject类的一个方法在垃圾回收时会调用被回收对象的finalize
和equals的区别
如果比较的对象是基本数据类型则比较的是数值是否相等如果比较的是应用数据类型则比较的是对象的地址值是否相等。
equals方法用法比较两个对象的内容是否相等。注意equals 方法不能用于比较基本数据类型的变量。如果没有对 equals 方法进行重写则比较的是引用类型的变量所指向的对象的地址很多类重写了 equals 方法比如 String、Integer 等把它变成了值比较所以一般情况下 equals 比较的是值是否相等。
两个对象的hashCode()相同则equals()也一定为true吗
两个对象的hashCode()相同equals()不一定为true.因为在散列表中hashCoding()相等即两个键值对的哈希值相等然而哈希值相等并不一定能得出键值对相等【散列冲突】
和的区别
Java中和都是表示与的逻辑运算符都表示逻辑运输符and当两边的表达式都为true的时候整个运算结果才为true的时候整个运算结果才为true, 否则为false.
有短路功能当第一个表达式的值为false的时候则不再计算第二个表达式。
不管第一个表示式结果是否为true第二个都会执行。除此之外还可以用作位运算符当两边的表达式不是Boolean类型的时候表示按位操作。
switch是否能作用在byte/long/String上
Java5 以前 switch(expr)中expr 只能是 byte、short、char、int。
从 Java 5 开始Java 中引入了枚举类型 expr 也可以是 enum 类型。
从 Java 7 开始expr 还可以是字符串(String)但是长整型(long)在目前所有的版本中都是不可以的。
break,continue,return的区别及作用
break 跳出整个循环不再执行循环(结束当前的循环体)
continue 跳出本次循环继续执行下次循环(结束正在执行的循环 进入下一个循环条件)
return 程序返回不再执行下面的代码(结束当前的方法 直接返回)
Java中的参数传递时传值呢?还是传引用
Java 的参数是以值传递的形式传入方法中而不是引用传递。
当传递方法参数类型为基本数据类型数字以及布尔值时一个方法是不可能修改一个基本数据类型的参数。
当传递方法参数类型为引用数据类型时一个方法将修改一个引用数据类型的参数所指向对象的值。即使 Java 函数在传递引用数据类型时也只是拷贝了引用的值罢了之所以能修改引用数据是因为它们同时指向了一个对象但这仍然是按值调用而不是引用调用。
Java的泛型是如何工作的什么是类型擦除
泛型是通过类型参数来实现的编译器在编译时擦除了所有类型相关的信息所以在运行时不存在任何类型相关的信息
类型擦除泛型信息只存在于代码编译阶段在进入 JVM 之前与泛型相关的信息会被擦除掉专业术语叫做类型擦除。在泛型类被类型擦除的时候之前泛型类中的类型参数部分如果没有指定上限如 T 则会被转译成普通的 Object 类型如果指定了上限如 T extends String 则类型参数就被替换成类型上限。
深拷贝和浅拷贝的区别
深拷贝
直接复制了一个对象,并且用新指针指向新对象
所以深拷贝是安全的
浅拷贝
仅拷贝基本数据类型对象,对于引用数据类型,创建了一个指针指向原有对象的地址值
浅拷贝不安全,如果是引用数据类型对象,修改后会影响原数据
Java中反射是什么意思有哪些应用场景
在运行状态对于任何一个类都可以获得整个类的所有属性和方法对于任何一个对象都可以调用它的任何方法和属性。简单来说就是动态获取类的信息以及动态调用类的属性和方法的功能。
Stream流用过吗
Stream 流简单来说使用 java.util.Stream 对一个包含一个或多个元素的集合做各种操作。这些操作可能是 中间操作 亦或是 终端操作。 终端操作会返回一个结果而中间操作会返回一个 Stream 流。