导读
Java面向对象、
Java成员变量与局部变量、
Java基本数据类型、
静态方法与实例方法、
构造方法、
this和super关键字
”
1、JDK/JRE/JVM 三者之间的联系与区别
JDK:开发者提供的开发工具箱,是给程序开发者用的。它包括完整的JRE(Java Runtime Environment),Java运行环境,还包含了其他供开发者使用的工具包。
JRE:(Java Runtime Environment) JVM运行时所须的包依赖的环境都在JRE中。
JVM:当我们运行一个程序时,JVM负责将字节码转换为特定机器代码,JVM提供了内存管理、垃圾回收和安全机制等。这种独立于硬件和操作系统,正是Java程序可以一次编写多处执行的原因。
JDK>JRE>JVM
2、Java 面向对象编程的三大特性
2.1 封装
封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性和方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有供外界访问的方法,那么这个类也就没有什么意义了。
2.2 继承
继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或者新的功能,也可以用父类的功能,但不能选择性的继承父类。通过使用继承我们能够非常方便地复用以前的代码。
关于继承如下三点需要记住:
- 子类拥有父类非private的属性和方法。
- 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
- 子类可以用自己的方式实现父类的方法。
2.3 多态
所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用,在编程时并不确定,而是在程序运行期间才确定。即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。在Java中有两种形式可以实现多态:继承(多个子类对同一方法的重写)和接口(实现接口并覆盖接口中的同一方法)
3、面向对象与面向过程
3.1、面向过程
优点:性能比面向对象强,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展。
3.2、面向对象
优点:易维护、易复用、易扩展。由于面向对象有封装、继承、多态的三大特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。
缺点:性能比面向过程低。
4、Java 语言有哪些特点
- 简单易学;
- 面向对象(封装、继承、多态);
- 平台无关性(Java虚拟机实现平台无关性);
- 可靠性;
- 安全性;
- 支持多线程;
- 很方便的支持网络编程;
- 编译与解释并存;
5、Java和C++的区别
没学过C++,不代表面试官也没学过
- 都是面向对象的语言,都支持封装、继承和多态
- Java不提供指针来直接访问内存,程序内存更加安全
- Java的类是单继承的,C++支持多重继承;虽然Java的类不可以多继承,但是接口可以多继承。
- Java有自动内存管理机制,不需要程序员手动释放无用内存。
6、Java 基本数据类型
| byte | short | int | long | double | float | char | boolean | |
|---|---|---|---|---|---|---|---|---|
| 字节大小 | 1 | 2 | 4 | 8 | 8 | 4 | 2 | 1 |
| 占位大小 | 8 | 16 | 32 | 64 | 64 | 32 | 16 | 8 |
- 整数类型:byte、short、int、long
- 字符型:char
- 浮点类型:float、double
- 布尔型:boolean
注意:
整数型默认int型。小数型默认是double型。float和long类型必须加后缀。
比如:float f=100f。
7、成员变量与局部变量的区别
- 从语法形式上看:
- 成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;
- 成员变量可以被public、private、static等修饰符所修饰,而局部变量不能被访问控制修饰符及static所修饰。但是,成员变量和局部变量都能被final所修饰。
- 从变量在内存中的存储方式来看: 如果成员变量是使用的 static修饰的,那么这个成员变量是属于类的,如果没有使用 static修饰,这个成员变量是属于实例(对象)的。而对象存在与堆内存中、局部变量则存在于栈内存中。
- 从变量在内存中的生存时间上看: 成员变量是对象的一部分。它随着对象的创建而存在,而局部变量随着方法的调用而自动消失。
- 成员变量如果没有被赋初值,则会自动以类型的默认值而赋值(一种情况例外:被final修饰的成员变量也必须显示的赋值),而局部变量则不会自动赋值。
8、静态方法和实例方法有何不同
- 在外部调用静态方法时,可以使用“类名.方法名”的方式,也可以使用“对象名.方法名”的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。
- 静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。
9、构造方法
9.1、特性
名字与类名相同;
没有返回值。但是不能用void声明构造函数(方法);
生成类的对象时自动执行,无需调用。
9.2、构造方法是否可以被override
在继承中我们就知道父类的私有属性和构造方法不能被继承,所以Constructor也就不能被override(重写),但是可以overload(重装),所以你可以看到一个类中有多个构造函数的情况。
9.3、父子关系的构造方法的执行顺序
- 父类有无参构造方法,子类才可以写无参构造方法;父类有含参构造方法,子类才可以写含参构造方法。
- 构造方法不能被继承、重写。
- 当进行无参构造时,先调用父类无参构造方法,然后调用子类无参构造方法;当进行有参构造时,先调用父类有参构造,然后调用子类有参构造。
10、this和super关键字
- super关键字用于从子类访问父类的变量和方法,也包含构造方法。
- this关键字用于引用类的当前实例。此关键字是可选的。这意味着如果上面的实例在不使用此关键字的情况下表现相同。但是,使用此关键字可能会使代码更易读或易懂。this也可以调用当前类的构造方法。
- super调用父类中的其他构造方法时,调用时要放在构造方法的首行!this调用本类中的其他构造方法时,也要放在首行。
- this、super不能用在静态方法中。因为被static修饰的成员属于类,不属于单个这个类的某个对象,被类中所有对象共享。而this代表对本类对象的引用,指向本类对象;而super代表对父类对象的引用,指向父类对象;所以,this和super是属于对象范畴的东西,而静态方法是属于类范畴的东西。
11、重载和重写的区别
重载:发生在同一个类中,方法名必须相同,参数类型不同,个数不同,顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。
重写:发生在子父类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为private则子类就不能重写该方法。
最后的最后,欢迎关注我的个人博客社区:GyCode
”