Java必知基础(一)
数据类型
可分为八种数据类型如下图:
其中基本数据类型占用的存储空间如下:
数据类型 | 占用的存储空间 | 表数范围 |
byte 与boolean | 1字节=8bit | -128~127 |
short | 2字节 | -2^15 ~ 2^15-1 |
int | 4字节 | -2^31 ~ 2^31-1 |
long | 8字节 | -2^63 ~ 2^63-1 |
float | 4字节 | -3.403E38 ~ 3.403E38 |
double | 8字节 | -1.798E308~ 1.798E308 |
- char类型在不同编码下占用的字节数不同utf-8下占用3个字节GBK下占用2个字节。
- Java基本数据类型不是对象,它们不支持对象相关的操作。基本数据类型只能通过一些预定义的操作符来修改它们。如+ - * / 等
对象和类
Java是一种面向对象的语言,其重点不是基础数据类型,而是对象(数据的组合及对这些数据的操作)。
- 类(class)是对一类事物的属性、行为的描述,是抽象的,概念上的定义。而对一类事物的属性的描述对应了类(class)中成员变量、对行为的描述对应了类(class)中的成员方法。
- 对象是实际存在的该类事物的每个个体,因而也称为实例(instance)。
可参考下面的代码来理解两者的关系:
/**
*
* 该类用来描述人的属性与行为
*/
public class Person {
//名字
private String name;
//年龄
private int age;
//性别
private String sex;
public Person(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
/**
* 描述了吃饭的行为
*/
public void eat(){
System.out.print(name+"我正在吃饭!");
}
/**
* 描述了睡觉的行为
*/
public void sleep(){
System.out.print(name+"我正在睡觉!");
}
}
通过Java中的new 关键字来实例化具体的个体即对象:
public static void main(String[] args){
//实例化具体的个体
Person xiaoming = new Person("小明",18,"男");
xiaoming.eat();
xiaoming.sleep();
}
结果如下:
小明我正在吃饭!小明我正在睡觉!
面向对象
面向对象的特征:
- 封装:把数据和操作数据的过程隐藏起来,使得数据的访问只能通过对外公开的接口,保证了对象被访问的安全性。简单来说就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口。
- 继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段。
- Java中通过 extends 关键字来实现继承关系。
- Java中只有单继承即一个类只能有一个父类,但一个父类可以有多个子类。
- 子类继承父类后,可以获取到父类中的私有方法和属性。但由于封装性的设计 使得子类不可以直接调用罢了。
- 多态:多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。多态性分为编译时的多态性和运行时的多态性。
可参考如下代码来理解多态性:
/**
* 1.该类继承Person
* 2.该类重写(overwrite)了父类的eat、sleep方法
*/
public class Man extends Person {
public Man(String name, int age, String sex) {
super(name, age, sex);
}
@Override
public void eat() {
System.out.print("我是一个男人我能吃很多饭!");
}
@Override
public void sleep() {
System.out.print("我是一个男人所以睡觉打呼噜!");
}
//该子类独有的方法
public void run(){
System.out.print("我是一个男人我跑步很快!");
}
}
实例化对象
public static void main(){
//实例化具体的个体
// Person xiaoming = new Person("小明",18,"男");
// xiaoming.eat();
// xiaoming.sleep();
//编译时的多态
Person man = new Man("小王",24,"男");
man.eat();
man.sleep();
//运行时的多态
((Man) man).run();
}
- 多态的表现形式:方法的重写或重载,接口,继承(抽象类实现多态依靠继承和重写)。