【JAVA基础查漏补缺】对,就是查漏补缺

实例变量:变量声明在中;
局部变量:变量声明在方法中;
实例变量都有默认值,boolean的默认值是false;
局部变量没有默认值,在初始化之前使用会报错;
如果子类中在引用父类的方法,然后再加上额外的自己的实现:

public void roam(){
	super.roam();
	// balabala自己的
	
}

多态:引用类型可以是实际类型的父类:

Animal[] animals = new Animal[1];
animals[0] = new Dog();

private类型的成员不会被继承
public类型的成员会被继承
多态:参数声明成父类,运行时可以传入任何子类
下面三种方法可以保证类不被继承:

  1. 不将类声明为public,这样该类只能在这个包里被继承
  2. final修饰符,表示这个类是继承树末端,不能被继承
  3. 让类只有private构造函数

防止方法被覆盖,可用final修饰方法

重载:方法名称相同但是参数不一样
如果一个类不需要被实例化,可以把这个类设为抽象类,即使用abstract关键字,抽象类必须被extends,否则没意义
抽象的方法一定要被override,抽象的方法没有函数体
如果一个类有抽象方法,则该类也得是抽象类,不能在非抽象类中有抽象方法。
所有局部变量都存在于栈上相对应的堆栈块中。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
构造函数没有返回类型
如果已经写了一个有参的构造函数,则编译器不会再创造无参的了,需要自己写无参构造函数。
抽象类也有构造函数,虽然不能被显式的new,但是构造函数会在子类被实例化的时候执行
调用父类构造函数的唯一方法是调用super,如果你没有自己写,编译器会在你重载的每个构造函数上都写上super
在这里插入图片描述
局部变量只存在于声明该变量的方法中
实例变量的寿命与对象的寿命相同
静态的方法不能调用非静态的变量
静态变量是被所有的实例共享的变量
静态方法可以直接被调用,而不需要堆上的实例
如果一个类只有静态方法,则可以把类对构造函数设为private,以免类被初始化
如果方法调用的次数多了,就可以静态引入
import static java.lang.Math.*;
double i = sqrt(4);
如果某类的实例不能被序列化,则应该用transient关键字。
对象在反序列化时:
4. 从流中读出二进制;
5. Java虚拟机通过存储的信息判断出对象的class类型;
6. Java虚拟机尝试寻找和加载对应的类,如果jvm找不到对应的类,则报错;
7. 新的对象会被配置在堆上;
8. 如果对象在继承树上有个不可序列化的父类,则该不可序列化类以及之上的类的构造函数都会被执行,从第一个不可序列化的类开始,全部会重新初始化状态;
9. 对象的实例变量会被还原成序列化时的状态值,transient变量会被赋值默认值。

静态变量不会被初始化
BufferedReader 和 BufferedWriter都是先把内容读到缓存中,缓存区满了再写或读

启动一个线程的步骤:

  1. 创建Runnable对象(线程的任务)

Runnable threadJob = new MyRunnable();

  1. 创建Thread对象(执行者),并赋值Runnable对象

Thread thread = new Thread(threadJob);

  1. 启动Thread

thread.start();

线程在可执行与执行中切换,jvm会把线程改为执行中,又把线程换为可执行状态。
单处理器的机器只能有一个执行中的线程。
synchronized关键字会让方法变为同步的,即一个线程执行完才允许另一个线程执行。
死锁是指两个线程互相持有对方正在等待的东西。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值