一、基本数据类型

java提供八种基本数据类型:包含六种数字类型(四个整数型,两个浮点型),一种字符类型,一种布尔类型。

1、基本类型:byte(8),short(16),int(32),long(64),float(32),double(64),char(16),boolean(1) 2、对象类型:Byte,Short,Integer,Long,Float,Double,Character,Boolean

1、整型

其中byte、short、int、long都是表示整数的,只不过他们的取值范围不一样

  • byte的取值范围为-128~127,占用1个字节(-2的7次方到2的7次方-1)

    额外知识:1 Byte = 8 bit 一个字节是8个二进制位占的存储空间 01010101 01010101 01010101 01010101 这就是 4 个字节。

  • short的取值范围为-32768~32767,占用2个字节(-2的15次方到2的15次方-1)

  • int的取值范围为(-2147483648~2147483647),占用4个字节(-2的31次方到2的31次方-1)
  • long的取值范围为(-9223372036854774808~9223372036854774807),占用8个字节(-2的63次方到2的63次方-1)。

可以看到byte和short的取值范围比较小,而long的取值范围太大,占用的空间多,基本上int可以满足我们的日常的计算了,而且int也是使用的最多的整型类型了。
在通常情况下,如果JAVA中出现了一个整数数字比如35,那么这个数字就是int型的,如果我们希望它是byte型的,可以在数据后加上大写的 B:35B,表示它是byte型的。
同样的35S表示short型,35L表示long型的,表示int我们可以什么都不用加,但是如果要表示long型的,就一定要在数据后面加“L”。

2、浮点型

  • float和double是表示浮点型的数据类型,他们之间的区别在于他们的精确度不同
  • float 3.402823e+38 ~ 1.401298e-45(e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方)占用4个字节
  • double 1.797693e+308~ 4.9000000e-324 占用8个字节

double型比float型存储范围更大,精度更高,所以通常的浮点型的数据在不声明的情况下都是double型的,如果要表示一个数据是float型的,可以在数据后面加上“F”。
浮点型的数据是不能完全精确的,所以有的时候在计算的时候可能会在小数点最后几位出现浮动,这是正常的。

注意:浮点型运算会导致精度丢失 因为十进制转化成二进制的过程中,不一定能转化成功(例如2.1,小数位太长),导致一些问题 可以使用BigDecimal进行运算。

  1. BigDecimal的运算如下:
  2. add(BigDecimal) BigDecimal对象中的值相加,然后返回这个对象。
  3. subtract(BigDecimal) BigDecimal对象中的值相减,然后返回这个对象。
  4. multiply(BigDecimal) BigDecimal对象中的值相乘,然后返回这个对象。
  5. divide(BigDecimal) BigDecimal对象中的值相除,然后返回这个对象。
  6. toString() BigDecimal对象的数值转换成字符串。
  7. doubleValue() BigDecimal对象中的值以双精度数返回。
  8. floatValue() BigDecimal对象中的值以单精度数返回。
  9. longValue() BigDecimal对象中的值以长整数返回。
  10. intValue() BigDecimal对象中的值以整数返回。

3、布尔型

这个类型只有两个值,true和false(真和非真)

  • boolean t = true;在编译的时候使用的是int类型,所以占4个字节
  • boolean f = false;

Boolean[] b = new boolean[10],是数组的时候,编译是作为byte array来编译的,所以数组里每个元件占一个字节。

4、字符型

用于存放字符的数据类型,占用2个字节,采用unicode编码,它的前128字节编码与ASCII兼容
字符的存储范围在\u0000~\uFFFF,在定义字符型的数据时候要注意加’ ‘,比如 ‘1’表示字符’1’而不是数值1,
char c = ‘ 1 ‘;
我们试着输出c看看,System.out.println(c);结果就是1,而如果我们这样输出呢System.out.println(c+0);
结果却变成了49。

如果是采用UTF-8编码的
一个汉字占用三个字节,英文是一个字节

5、基本类型和包装类型

下面以integer和int作为例子比较。
1、Integer是int的包装类,int则是java的一种基本数据类型
2、Integer变量必须实例化后才能使用,而int变量不需要
3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值
4、Integer的默认值是null,int的默认值是0

二、面向对象三大特征

面向对象是指在计算机程序中,模拟现实世界中的概念,借助对象的描述在计算机程序中用类似的实体模拟现实世界中的实体。

1、封装

封装(Encapsulation)是面向对象的三大特征之一(另外两个是继承和多态),它指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。

2、继承

  • Java 使用 extends 作为继承的关键字,子类扩展了父类,获得父类的全部成员变量和方法。
  • Java 只能单继承,只有一个直接父类,但可以有无限多个间接父类。当一个 Java 类并未显式指定直接父类时,默认继承 java.lang.Object ,因此 java.lang.Object 是所有类的直接或间接父类。

    2.1 重写

    重写父类方法应遵循 “两同两小一大“ 规则:

  • “两同” 指方法名相同、形参列表相同;

  • “两小” 指子类方法返回值类型和抛出的异常类型应比父类方法的更小或相等;
  • “一大” 指的是子类方法的访问权限应比父类方法的访问权限更大或相等。 ```java class B { public void show() {
    1. System.out.println("B");
    } }

public class A extends B{ @Override public void show() { System.out.println(“A”); //重写父类方法 } } ``` 重载(Overload)和重写(Override)区别:

  • 重载指的是同一类中多个同名方法;
  • 重写指的是子类和父类的同名方法。

    2.2 super关键字

  • 访问父类的构造函数:可以使用 super() 函数访问父类的构造函数,从而委托父类完成一些初始化的工作;

  • 访问父类的成员:如果子类重写了父类的某个方法,可以通过使用 super 关键字来引用父类的方法实现。

    2.3 父类构造器

    子类继承了父类的全部变量和方法,所以实例化子类时,必须先将其父类实例化。调用父类构造器的方式是 super(),参数为父类构造器所需参数。使用 super 调用父类构造器必须出现放在子类构造器的第一行,而 this 调用同一个类中重载的构造器也要放在第一行,所以 super() 和 this() 不能同时出现。
    不管是否使用 super 显式调用父类构造器,子类构造器总会调用父类构造器一次,总共会出现三种情况:

  • 子类构造器第一行使用 super 显式调用父类构造器;

  • 子类构造器第一行使用 this 调用重载的子类构造器,在本类重载的构造器中调用父类构造器;
  • 子类构造器第一行既没有 super 调用,也没有 this 调用,系统在第一行隐私调用父类无参构造器。

    3、多态

    多态:相同类型的变量调用同一个方法时呈现出多种不同的行为特征。
    例如,Person extends Creature;Dog extends Creature,都继承了父类的eat()方法
    Creature person = new Person();
    Creature dog = new Dog();
    person.eat()和dog.eat() 就不一样。这就是多态,同一个方法时呈现出多种不同的行为特征。

    三、访问控制符

  • private(当前类访问权限):类中的一个的成员被 private 修饰,它只能在当前类的内部被访问;

  • default(包访问权限):类中的一个成员或者一个外部类不使用任何访问控制符修饰,它能被当前包下其他类访问;
  • protected(子类访问权限):类中的一个的成员被 protected 修饰,它既可以被当前包下的其他类访问,又可以被不同包的子类访问;
  • public(公共访问权限):类中的一个成员或者一个外部类使用 public 修饰,它能被所有类访问。 |
    | private | default | protected | public | | —- | —- | —- | —- | —- | | 同一个类中 | ✔ | ✔ | ✔ | ✔ | | 同一个包中 | | ✔ | ✔ | ✔ | | 子类中 | | | ✔ | ✔ | | 全局范围内 | | | | ✔ |