java 基础知识

前言

这篇主要是针对java基础知识点的梳理,会根据我自己掌握不太牢固的知识点进行整理,可能不太适合初学者。并且还会有一些自己的理解。持续更新哦

关键字

  • final

  1. final变量是只读的,final成员变量必须在声明的时候初始化或者在构造器中初始化
  2. final也可以声明方法。方法前面加上final关键字,代表这个方法不可以被子类的方法重写。如果你认为一个方法的功能已经足够完整了,子类中不需要改变的话,你可以声明此方法为final。final方法比非final方法要快,因为在编译的时候已经静态绑定了,不需要在运行时再动态绑定。
  3. 使用final来修饰的类叫作final类。final类通常功能是完整的,它们不能被继承。Java中有许多类是final的,譬如String, Interger以及其他包装类。
  4. final关键字提高了性能。JVM和Java应用都会缓存final变量。提高了性能。JVM和Java应用都会缓存final变量。
    final变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。JVM会对方法、变量及类进行优化。
  5. 在匿名类中所有变量都必须是final变量。
  6. final关键字不同于finally关键字,后者用于异常处理。
  7. final和abstract这两个关键字是反相关的,final类就不可能是abstract的。
  8. 按照Java代码惯例,final变量就是常量,而且通常常量名要大写:

类与对象

  • 引用

如果一个变量是基本类型,比如 int hp = 50;我们就直接管hp叫变量,=表示赋值的意思。如果一个变量是类类型,比如 Hero h = new Hero();我们就管h叫做引用。=不再是赋值的意思,=表示指向的意思。比如 Hero h = new Hero();这句话的意思是引用h,指向一个Hero对象。所以在函数参数的时候实际上是多了一个引用。
其中java有8种基本类型:
boolean,int,float,double,char,long,byte,short

  • 构造函数

如果提供了一个有参的构造方法,同时又没有显式的提供一个无参的构造方法,那么默认的无参的构造方法,就“木有了”。

  • 方法重载

可变数量的参数只需要设计一个方法
public void attack(Hero ...heros)

  • this

可以用this来调用其他构造方法

 public Hero(String name){
        this.name = name;
    }
public Hero(String name,float hp){
        this(name);
        this.hp = hp;
    }
  • 成员变量修饰符

修饰符自身同包子类不同包子类同包类其他
privateOXXXX
package/friendly/defaultOOXOX
protectOOOOX
publicOOOOO

其中子类的都是属于继承,非子类都是访问。

  • static

static可以使用在属性上,也可以是方法上。使用了static 的叫类属性或静态属性,类方法或静态方法。
可以通过类直接访问,例如 Hero.val, Hero.function()

  • 对象属性初始化

  1. 声明该属性的时候初始化
  2. 构造方法中初始化
  3. 初始化块
    这三种方式执行顺序,构造方法->初始化块->声明时。其中类属性初始化有2种。
  • 抽象类和接口

  • 抽象类

抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为:

abstract void fun();
  1. 抽象方法必须用abstract关键字进行修饰。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。也就是说抽象类不一定必须含有抽象方法。但如果一个抽象类不包含任何抽象方法,为何还要设计为抽象类?
  2. 抽象类就是为了继承而存在的,如果你定义了一个抽象类,却不去继承它,那么等于白白创建了这个抽象类,
  3. 抽象方法必须为public或者protected,缺省情况下默认为public。
  4. 如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。
  • 接口

接口泛指供别人调用的方法或者函数。它是对行为的抽象。在Java中,定一个接口的形式如下:

[public] interface InterfaceName {
}
  1. 接口中可以含有变量和方法。接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误)
  2. 方法会被隐式地指定为public abstract方法且只能是public abstract方法,并且接口中所有的方法不能有具体的实现。
  3. 接口是一种极度抽象的类型,它比抽象类更加“抽象”,并且一般情况下不在接口中定义变量。
  4. 要让一个类实现某组特地的接口需要使用implements关键字,可以看出允许一个类implements多个特定的接口。如果一个非抽象类implements了某个接口,就必须实现该接口中的所有方法。对于一个抽象类implements某个接口的,可以不实现该接口中的抽象方法。
  5. Java中的接口Interface不是继承自Object——如果一个接口定义是最顶级的(没有 super interfaces),那么这个接口会自动声明一个 abstract member method 结构体来代表所有来自 Object 类(一切类的superclass)中的public方法(包括这些方法的签名、返回类型以及抛出的异常,意思是接口隐含定义了一套与Object类中的方法签名完全相同的方法
class ClassName implements Interface1,Interface2,[....]{
}
  • 抽象类和接口的区别
  1. 抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;
  2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
  3. 接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
  4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
  5. 抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。举个简单的例子,飞机和鸟是不同类的事物,但是它们都有一个共性,就是都会飞。那么在设计的时候,可以将飞机设计为一个类Airplane,将鸟设计为一个类Bird,但是不能将 飞行这个特性也设计为类,此时可以将 飞行设计为一个接口Fly,包含方法fly( ),然后Airplane和Bird分别根据自己的需要实现Fly这个接口。然后至于有不同种类的飞机,比如战斗机、民用飞机等直接继承Airplane即可,对于鸟也是类似的,不同种类的鸟直接继承Bird类即可。从这里可以看出,继承是一个 "是不是"的关系,而 接口 实现则是 "有没有"的关系。
  • 饿汉式单例模式、懒汉式单例模式

单例模式又叫做 Singleton模式,指的是一个类,在一个JVM里,只有一个实例存在。

//饿汉式单例模式
public class A{
	//私有化构造方法使得该类无法在外部通过new 进行实例化
	private A(){}
	//准备一个类属性,指向一个实例化对象。 因为是类属性,所以只有一个
	private static A instance=new A();
	public static A getInstance(){
		return instance;
	}
}
//懒汉式单例模式
public class A{
	 //私有化构造方法使得该类无法在外部通过new 进行实例化
	private A(){}
	private static A instance;
	public static A getInstance(){
		if(instance==null)
			instance=new A();
		return instance;
	}
}

饿汉式是立即加载的方式,无论是否会用到这个对象,都会加载。
如果在构造方法里写了性能消耗较大,占时较久的代码,比如建立与数据库的连接,那么就会在启动的时候感觉稍微有些卡顿。

懒汉式,是延迟加载的方式,只有使用的时候才会加载。 并且有线程安全的考量(鉴于同学们学习的进度,暂时不对线程的章节做展开)。

什么是单例模式?
回答的时候,要答到三元素

  1. 构造方法私有化
  2. 静态属性指向实例
  3. public static的 getInstance方法,返回第二步的静态属性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值