Java枚举Enum
Java 枚举是一个特殊的类,一般表示一组常量
Java 枚举类使用enum
关键字来定义,各个常量使用逗号,
来分割。
示例
enum Animal {
CAT , DOG , BIRD;
}
public class EnumTest {
public void demo() {
Animal animal = Animal.DOG;
System.out.println(animal);
}
}
输出结果为:
DOG
Java重写override
重写override
是子类对父类中的方法进行重新编写,以满足子类自身行为的需要,即外壳不变,核心重写
示例
class Animal {
public void move() {
System.out.println("Animal can move!");
}
}
class Cat extends Animal {
public void move() {
System.out.println("Cats can run and jump!");
}
}
public class overrideTest {
public void demo() {
Animal animal = new Animal();
Cat cat = new Cat();
animal.move(); //calling the Animal method
cat.move(); //calling the Cat method
}
}
输出结果:
Animal can move! Cats can run and jump!
当需要在子类中调用父类的被重写方法时,要使用 super
关键字
示例
class Animal {
public void eat() {
System.out.println("Animal can eat!");
}
}
class Cat extends Animal {
public void eat() {
super.eat();
}
}
public class overrideTest {
public void demo() {
Animal cats = new Cat();
cats.eat();
}
}
输出结果:
Animal can eat!
final
关键字
- 用final定义的类不能再被继承
- 用fianl定义的方法不能再被重写
- 用final定义的变量是常量且不能再被修改
Java字符串String
- C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串
- 字符串本质上就是以
\0
作为结尾的特殊字符数组,因此当把一个字符串存入一个数组时,也把结束符\0
存入数组,并以此作为该字符串是否结束的标志 - java中的字符串String没有像C语言的结尾符
\0
示例
//C语言
char data[3] = {'a', 'b', 'c'};
char data[] = {'a', 'b', 'c', '\0'};
char data[] = "abc";
//Java
String s1 = "Hello World!";
String s2 = new String("Hello World!");
使用+
连接字符串
String s3 = "Hello" + "World";
Java数组
//Java
int[] arr ={1,2,3};
//C语言
int arr[] = {1,2,3};
Java static
单例模式
private static
定义变量和方法只能由类名来使用
- 静态的只能访问静态,非静态的可以访问静态和非静态
- 静态当中是不可以使用this和super
- 类中不存在静态的构造
什么是单例模式? 为了保证资源不被过多得浪费,提出一种能让整个系统中一个类只能被实例化对象一次,且实例化对象在内存中唯一存在的路,实现这种思路的功能称作单例模式
单例模式的存在是为了保证一个类仅有一个实例,无法克隆,并提供一个访问它的全局访问点 示例
package com.Lowell;
import org.junit.Test;
class Earth {
//new 一个新的地球,只有Earth类内可以调用
private static Earth earthInstance = new Earth();
//外部无法new新的Earth
private Earth(){
}
//Earth在外部得到Earth
public static Earth getEarthInstance(){
return earthInstance;
}
public void showMessage(){
System.out.println("Hello Earth!");
}
}
public class staticTest {
@Test
public void demo() {
//不合法的构造函数
//编译时错误:构造函数 Earth() 是不可见的
//Earth object = new Earth();
//获取唯一可用的对象
Earth object = Earth.getEarthInstance();
//显示消息
object.showMessage();
}
}
输出结果:
Hello Earth!
Java接口Interface
在抽象类中有抽象方法,如果把抽象类里的方法全部变成抽象方法,可以用接口interface
来替代这个抽象类
接口里面所有方法都是抽象的,实现接口的类,会把接口中定义的方法全部重写 示例
package com.Lowell;
public interface Human {
public void eat();
}
package com.Lowell;
import org.junit.Test;
class Chinese implements Human {
@Override
public void eat() {
System.out.println("Chinese eat rice!");
}
}
class Westerner implements Human {
@Override
public void eat() {
System.out.println("Weaterner eat Hamburg!");
}
}
public class InterfaceTest {
@Test
public void demo() {
Chinese chinese = new Chinese();
Westerner westerner = new Westerner();
chinese.eat();
westerner.eat();
}
}
输出结果:
Chinese eat rice! Weaterner eat Hamburg!
接口和抽象类本质上有什么区别?
- 抽象类
abstruct class
是针对具体的事物进行抽象 - 接口
interfece
是针对动作、行为进行抽象,且接口中避免出现名词