(1)什么是面向对象?面向对象的三大基本特征和五大基本原则?
面向对象: 是通过一个类来描述对象,用类来建立实例与实例之间的关系,面向对象程序设计的基本构成是类和对象。
面向对象开发方法: 是一种以事物为中心的编程思想,用一种更符合人们认识客观世界的思维方式进行程序设计。
三大基本特征: 封装、继承、多态
五大基本原则: 1. 单一职责原则(SRP)
2. 开放封闭原则(OCP)
3、里氏替换原则(LSP)
4、赖倒置原则(DIP)
5、接口隔离原则(ISP)
(2)封装、继承、多态?
封装: 指属性和方法的定义都封装在类定义中,然后通过对其可见性来控制外部对类成员的可访问性。
隐藏对象内部的复杂性,只对外公开简单的接口,以便于外界使用,从而提高了系统的扩展性与可维护性。通过使用访问权限修饰符,来实现封装,Java用于限定其他对象对该类内部定义的访问权限有 public, protected, private , default 四个。
继承: 以原有的类为基础来创建一个新的子类,子类继承父类的所有特性,并可以扩充自己的特性,从而构造出更为复杂的类型。 Java采用继承机制来组织、设计软件系统中的类和接口,在java单继承树状结构中,除根父类java.lang.Object外,每个子类只能有一个直接父类,除最终类外的类都可以有多个子类。
Java采用“extends父类名”的方式来实现单继承,采用“implements<接口列表>”的方式来实现多继承。继承可以大大提高代码的重用性和健壮性,提高编程效率,降低软件维护的工作量。
多态: 多态性是指程序中出现的方法或变量“重名”现象。
1. 方法的重载(Overload)
2. 成员方法和成员变量的覆盖(Override)
3. 对象的多态性
(3)Java如何实现平台无关性?
平台无关性: 只要平台提供了Java的运行环境,用Java编写的软件就能在上面运行;
Java经过编译之后生成的.class的字节码文件,这些字节码文件不面向具体的平台,只面向JVM,不同平台上的JVM是不同的,但他们都提供了相同的接口,因此只要不同平台实现了它们对应的JVM,编译后的.class字节码文件就可以在该平台上运行了。
(4)Java的基本数据类型:
byte, short, int, long, float, double, char, boolean.
整型数据的数值范围:
类型 | 占用内存大小 | 数值范围 |
byte | 1byte | -2^7 ~ 2^7-1 |
short | 2byte | -2^15 ~ 2^15-1 |
int | 4byte | -2^31 ~2^31-1 |
long | 8byte | -2^63 ~2^63-1 |
浮点数内存结构
类型 | 位数 | 符号位 | 指数位 | 尾数位 |
float | 32 | 1 | 8 | 23 |
double | 64 | 1 | 11 | 52 |
(5)String的一点用法:
字符串拼接的几种方式
1.plus方式
//当左右两个变量其中有一个是String类型时,用plus可将两个变量转成字符串并拼接。
String a = "";
int b = 3;
String c = a + b;
2.concat方式
//当两个变量都为String类型且值不为null时,可以用concat方式连接。
String m = "m";
String n = "n";
String p = m.concat(n);
3.append方式
//当需要拼接至少三个量的时候,可以考虑用StringBuffer。
StringBuffer b = new StringBuffer();
b.append("a");
if(...){
b.append("b");
}
b.append("c");
String d = b.toString();
(6)Java的一些关键字:
static: static关键字用来区分成员变量、成员方法、内部类、初始化块是属于类的还是属于对象, 有static修饰的成员属于类,否则属于对象。static关键字不能用来修饰方法中的局部变量。
volatile: 易失, volatile关键字用于表示可以被多个线程异步修改的成员变量。
一旦一个共享变量被volatile修饰了,就具备两层含义:
1. 保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。
2. 禁止进行指令重排序。
instanceof: 关键字用来确定对象所属的类。
transient: 短暂, 可以应用于类的成员变量,以便指出该成员变量不应在包含它的类实例已序列化时被序列化。
表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。
final: 有下面三种用法:
1. final用在变量前面,该变量成为常量,只能赋值一次。
2. final用在方法前面,该方法成为最终方法,不能被覆盖。
3. final用在类前面,该类成为最终类,不能被继承。
abstract: 有下面两种用法:
1. abstract用作方法修饰符,表示该方法为抽象方法。抽象方法只有方法的定义,没有方法的实现。
2. abstract用作类修饰符,则该类为抽象类,抽象类可以不含有抽象方法, 但含有抽象方法的类、继承父类的抽象方法没有完全实现抽象方法、实现接口没有完全实现抽象方法时必须声明为抽象类。
特别注意: 抽象类不能被实例化为对象,只能被其他子类继承; 抽象类中的抽象方法必须在其子类中被实现,否则该子类只能声明为abstract class; 抽象方法不能为static。
(7)Java方法的调用总结:
在Java中,访问其他类中的方法和属性有3种方式:
1. 通过 “类.方法名” 或 “对象.方法名” 的方式访问。
2. 通过继承的方式访问。
3. 通过组合或者聚合的方式, 让另外一个类作为本类的成员。
(1)调用其他包其他类中的静态方法
类名.方法名的方式调用。
包路径.类名.方法名”的方式调用。
(2)调用其他包其他类中的非静态方法
1. 用import语句引入要调用方法的类所在的包。
类名 对象名 = new 构造方法。
3. 对象名.方法名。
(3)父类中方法的调用
super
super.方法名
(4)父类中方法的调用
this
方法名
对象名.方法名