Java

2017-10-11  本文已影响0人  迷人的酋长

10.11

1.Java的三大特征:封装、继承、多态

引用多态:父类的引用可以指向子类对象,也可以指向本类对象,但不能使用一个子类的引用指向一个父类的对象。

(eg:动物(父类)、狗(子类):可以 Animal a = new Animal(); Animal b = new Dog(); 但不能Dog a = new Animal();)

方法多态:创建本类对象时,调用的方法为本类方法;创建子类对象时,调用的方法为子类重写的方法或继承父类的方法。

2.访问修饰符public,private,protected,以及不写(默认)时的区别?

修饰符 当前类 同包 子类 其他包
public(外部类)
private × × ×
protected ×
默认:default(外部类) × ×

10.12

1.java中最基本的数据类型

数据类型 字节型 短整型 整型 长整型 浮点型 双精度 字符型 布尔型
数据类型 byte short int long float double char boolean
所占内存 8 16 32 64 32 64 16 /
封装类 Byte Short Integer Long Float Double Character Boolean

byte字节型1字节 8bit 最大存储数据量是255,存放的数据范围是-128~127之间

short短整型2字节 16bit最大数据存储量是65536,数据范围是-32768~32767之间

int整型4字节 32bit最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1

long长整型8字节 64bit最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1

float单精度4字节 32bit数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F

double双精度8字节 64bit数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加

char字符型用单引号

boolean布尔型true/false(只有真假两种结果)

除了基本类型(primitive type)和枚举类型(enumeration type),剩下的都是引用类型(reference type)。

2.Java之String、StringBuffer、StringBuilder的区别分析

也就是在大部分情况下 StringBuilder > StringBuffer > String(操作次数越大,越稳定)。

10.13

1.float f=3.4;正确么?

不正确,因为3.4是双精度,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要 强制类型转换 float f =(float)3.4; 或者写成float f =3.4F;

数据类型转换必须满足如下规则:
  1. 不能对boolean类型进行类型转换。
  2. 不能把对象类型转换成不相关类的对象。
  3. 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
  4. 转换过程中可能导致溢出或损失精度,例如:
    ·····int i =128;
    ·····byte b = (byte)i;
    因为byte类型时8位,最大值为127,所以当强制转换为int类型值128时候就会导致溢出。
  5. 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入。

2.short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?

对于short s1 = 1; s1 = s1 + 1;由于1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型才能赋值给short型。short s1 = 1;s1= (short)s1 +1;
而short s1 = 1; s1 += 1;可以正确编译,因为s1+= 1;相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换。


10.14

多线程、并发及线程的基础问题(还要再看看,不理解的)

1. Java 中能创建 volatile 数组吗?

能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不是整个数组。我的意思是,如果改变引用指向的数组,将会受到 volatile 的保护,但是如果多个线程同时改变数组的元素,volatile 标示符就不能起到之前的保护作用了。

2. volatile 能使得一个非原子操作变成原子操作吗?

一个典型的例子是在类中有一个 long 类型的成员变量。如果你知道该成员变量会被多个线程访问,如计数器、价格等,你最好是将其设置为 volatile。为什么?因为 Java 中读取 long 类型变量不是原子的,需要分成两步,如果一个线程正在修改该 long 变量的值,另一个线程可能只能看到该值的一半(前 32 位)。但是对一个 volatile 型的 long 或 double 变量的读写是原子。

上一篇 下一篇

猜你喜欢

热点阅读