Java_一些小知识点

变量什么情况下会自动被赋一个初始值

基本类型(不包括基本类型数组)的成员变量在定义的时候如果没有初始化,那么编译器会自动初始化给他赋一个初始值。局部变量则不会。

(int[] i = new int[5];   这样的式子不管是成员变量还是局部变量,都会有默认的值。其实它和上面说的不一样,它已经初始化了,所以会有默认值,上面说的是没有初始化的情况下。)

(另外,final类型的成员变量必须初始化,不然编译器会报错)

缺省的构造方法

如果一个类中没有构造方法,编译器会自动给这个类添加一个无参的缺省构造方法。

如果一个类中已经有了构造方法,不管是无参的还是有参的,编译器都不会再创建缺省构造方法了。

看下面的例子:

class Dog {
    private String name;
    Dog(String name) {}
}

如果这样写new Dog();那么编译器会报错。

值传递和引用传递

当一个变量作为一个参数传入方法内部的时候,会有两种不同的传递方式:值传递和引用传递。

值传递的特点:不管方法内部对传进去的参数作任何改变,也不会影响方法外部的变量的值。

引用传递的特点:方法内部对传进去的参数作的改变也会影响方法外部的变量的值。

那么哪些是值传递,哪些是引用传递呢?

  1. 基本类型(8种)的传递都是值传递。
  2. 引用类型(除String外)都是引用传递。
  3. Strng比较特殊,它虽然是引用类型,但是却是值传递。

基本类型的取值范围

在讲解基本类型的取值范围之前,先讲讲二进制怎么转换为十进制(算取值范围的时候会用到)。

首先二进制有带符号的二进制和不带符号的二进制。

比如:1111

如果它是不带符号的二进制,那么它的十进制值 = 2^3 + 2^2 + 2^1 + 2^0 = 2^4 - 1 = 15

如果它是带符号的二进制,那么最高位(千位)就是符号位,1代表负数,0代表正数。那么负的二进制怎么换算为十进制呢?首先要把除符号位的所有位按位取反再加1(算出来是1001),然后在算它的十进制值 = -2^0 = -1

Java中基本类型的取值范围

基本类型字节数位数最大值最小值
byte1byte8bit2^7 - 1-2^7
short2byte16bit2^15 - 1-2^15
int4byte32bit2^31 - 1-2^31
long8byte64bit2^63 - 1-2^63
float4byte32bit3.4028235E381.4E - 45
double8byte64bit1.7976931348623157E3084.9E - 324
char2byte16bit2^16 - 10

其实,这些取值范围不需要死记,可以通过位数计算出来,下面举两个例子(byte和char)说明一下

byte的情况:

byte占8位,而且有正有负。最大值当然就是01111111 = 2^7 - 1。因为负的二进制有个按位取反再加1的操作,所以最小值是10000000,按位取反后为11111111,再加1后为110000000 = -2^7

char的情况:

char占16位,而且没有负值。所以最小值是0。最大值是1111111111111111 = 2^16 - 1

Java中的权限访问修饰符

Java中有四种权限访问修饰符:private、(default)、protected、public,它们的访问权限如下:

 包外子类包内本类
publicYESYESYESYES
protectedNOYESYESYES
(default)NONOYESYES
privateNONONOYES
继承时需要复写父类的方法的时候,权限反问修饰符可以往范围大的变,不可以往范围小的变。

接口和抽象类的比较

 接口抽象类
功能实现多继承作为直接父类被继承
成员变量必须是public static final的常量
(如果不加修饰符,默认是public static final的)
没有要求,和普通类一样
方法所有方法都必须是public abstract的
(如果不加修饰符,默认是public abstract)
抽象方法和非抽象方法都可以有
一个抽象类并不一定必须存在非抽象方法
抽象方法的访问权限没有要求,和普通类一样
(但是abstract关键字和接口不同必须要加)
抽象方法的实现如果是接口继承接口,或者是抽象类实现接口,都不需要实现抽象方法和接口一样
能不能实例化不能不能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值