黑马程序员——java语言基础部分——学习盲点总结

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

1、关于类型转换的问题

类型转换只要分为:

自动类型转换:低精度——》高精度

强制类型转换:高精度——》低精度

转换原理:表达式的数据类型会自动提升。如所有的byte类型、short类型和char类型的值都会提升到int型

byte b=3;

解析:3是整数会提升为int型,然后赋值给b的时候会做判断,是否在字节的范围内

b=b+3;//编译出错

解析:右边b会提升int型,在赋值的时候会造成精度缺失

2、关于内存问题

编译时期只会检查语法错误,运行时期才会分配内存。

内存的管理主要分为:堆内存,栈内存,寄存器,方法区,本地方法区。

堆内存中主要存放对象,数组。

栈内存中主要存放变量,对象地址。

方法区主要存放静态成员、函数。

栈中的变量要初始化才能参与运算,否则编译会出错。

堆中的变量,是经过了new后的,有默认值,如果没有new,则其值为空。

3、构造函数与构造代码块

构造函数是给对应的对象初始化的。构造代码块是给所有的对象的统一初始化。

构造代码块随着对象的加载而加载。

this语句只能放在构造函数的第一行,因为初始化要先执行。

默认构造函数(即空参数的构造函数)是随着类的变化而变化的。

4、关于静态Static

类中特有的放在堆中,非静态化;非特有的放在方法区中,要静态化。

静态是随着类的加载(即将编译后的class文件字节码文件读入内存中)而加载,随着类的消失而消失,优先于对象而存在,是共享的,可以直接被类名调用,但是静态的成员的生命周期最长。

静态只能访问静态成员(变量和函数)

非静态方法既可以访问静态也可以访问非静态

静态方法中不可以出现this,super关键字,因为静态是优先于对象存在,而只有有了对象才有super和this.

程序的入口主函数是静态,而且为jvm所识别,尽管主函数也可以被重载,但是jvm虚拟机只能识别固定的格式的,即public static void main(String[] args).此外,虚拟机调用主函数的时候,传入的是new String[0],也可以在虚拟机调用之前传入自己设定的值,即在命令行界面可以输入命令java 文件名 参数1 参数2 参数3......

静态代码块,是随着的加载而加载,只执行一次

5、对象初始化的过程

如Person p=new Person("zhangsan",19);

整个过程是:

找到Person.class文件并加载到内存中

执行Person类中的static代码块,如果有的话,在方法区中给static成员开辟空间

在堆内存中开辟空间,建立对象及对象的特有属性,并进行默认初始化

对对象中的特有成员name和age进行显示初始化

对对象进行构造代码块初始化

对对应的构造函数进行初始化

将对象在堆内存中开辟空间的首地址赋值给P

6、关于函数

函数的重载:同类中,只看同名函数的参数列表是否符合要求,其他不变

函数的重写或覆盖:不同类中,子父类中的函数的返回值,参数,函数名要完全一致。

关于覆盖需要注意:子类覆盖父类,必须保证子类的权限大于等于父类权限,才可以覆盖,否则编译失败。

当父类中有private修饰的方法A时,子类中也有方法A时,这不叫覆盖。

7、关于子父类

子类中的构造函数必有一个类会调用父类的构造函数。

因为子类可以直接获取父类中非私有的成员,子类在建立对象的时候,需要先查看父类是如何对这些数据进行初始化的,所以子类会访问父类的构造函数。

当父类中没有空参数的构造函数,而有有参数的构造函数,那么子类的构造函数的第一行必须显示的调用父类的有参数的构造函数。

当父类中有空参数的构造函数的时候,子类的构造函数中可以显示的调用有参数的构造函数,也可以不指定,即默认情况下子类的构造函数会调用父类的空参数的构造函数。

8、关于多态

前提:类之间存在继承或者实现,存在覆盖。

类别:

向上转型:Animal a=new Cat();

向下转型:Cat c=(Cat)a;

当父类引用指向子类对象(即向上转型)的时候,该父类引用既可以被提升,也可以被转换。但是不可以将父类对象转为子类类型,即不可以:Animal a=new Animal();Cat c=(Cat)a;//这是不允许的。

多态中的特点:(左边是引用类型 引用变量,右边是实例对象)

非静态的成员函数:编译期看左边,即查看引用变量所属的类,以这个类为准;运行期,看右边实例对象所属的类是否有覆盖的方法,若有,则以子类中方法(以及方法中使用的变量也以子类中的变量为准)为准,如果没有则以父类中的方法(以及方法中的变量也以父类中的变量为准)为准。

成员变量和静态的成员函数:编译器和运行,均以引用变量所属的类(引用类型)为准。

你可能感兴趣的:(黑马程序员)