1.static关键字
1.1static修饰惊天成员方法用途
特征:
1.摆脱类对象,效率高,节约内存空间,提高开发效率。
2.类内成员变量和成员方法都不可以用,但是不影响使用外来数据
3.静态成员方法通常用于工具类的封装使用。
Arrays数组工具类
sort排序方法
binarysearch 二分法查询方法
toString数组内容字符串展示返回方法
数组逆序实现方法
package com.test_static;
import java.util.Arrays;
/*
* 工具类当中大多数方法,都是静态方法
* 自定义数组工具类
*/
class MyArrays{
/*
* 工具类内方法,都是静态方法
*/
/**
* 数组工具类,数组逆序的方法
* @param arr 这里需要一个int类型数组
*/
public static void reverse(int[] arr){
for(int i=0;i<arr.length/2;i++){
int temp = arr[i];
arr[i] = arr[arr.length -1 -i];
arr[arr.length-1 -i] = temp;
}
}
}
public class Demo1 {
public static void main(String[] args) {
int[] arr= {1,3,5,7,9,2,4,6,8,10};
MyArrays.reverse(arr);
System.out.println(Arrays.toString(arr));
}
}
1.2 static修饰静态代码块
特征:
1.static修饰的静态代码块,不能使用this关键字,不能使用类内的非静态成员
2.static修饰的静态代码块,可以使用类内的其他静态成员
3.static修饰的静态代码块中,定义的变量都是局部变量,静态代码块。首先是一个代码块,拥有代码块的特征,其次才是通过static修饰之后,可以随着类文件的加载直接运行,有且只有一次。
static {
int num =10;
num =20;
}
2.接口
2.1 java使用接口
格式
interface 接口名{
成员变量
成员方法
}
类【遵从】接口
implements
class 类名 implements 接口{
}
接口中成员变量和成员方法缺省属性原因:
成员变量 缺省属性是public static final
缺省属性 public abstract 修饰
package com.test_interface;
/*
* 接口演示
*/
interface A{
//缺省属性 public static final修饰
int num = 10;
//却红色呢过属性 abstract
public void tets();
}
class TypeA implements A{
@Override
public void tets() {
System.out.println(num);
System.out.println("TypeA遵从接口A,实现接口A中缺省属性为abstract的成员方法");
}
}
public class Demo1 {
public static void main(String[] args) {
TypeA typeA =new TypeA();
typeA.tets();
}
}
2.3接口中使用方法
1.接口中的
成员变量缺省属性 public static final
成员方法缺省属性 public abstract
2.一个非abstract类遵从interface接口,需要强制完成接口中所有缺省属性为public abstract的成员方法
3.接口和接口之间,允许使用extends关键字继承,并且允许一个接口,继承多个接口
interface A extends B,C
4.接口中可以使用default关键字,default方法拥有方法体,可以认为是非强制实现方法,不要求遵从接口的 非abstract强制实现,JDK 1.8新特征
3
3.1 接口生活化演示
从生活中映射USB接口
interface USB
规定USB设备必须完成的方法
void connect();
鼠标类 implements USB
鼠标是一个USB设备,必须完成connect方法
键盘类 implements USB
键盘是一个USB设备,必须完成connect方法
USB接口在电脑上,我们需要使用USB接口
package com.test_interface1;
/*
从生活中映射USB接口
interface USB
规定USB设备必须完成的方法
void connect();
鼠标类 implements USB
鼠标是一个USB设备,必须完成connect方法
键盘类 implements USB
键盘是一个USB设备,必须完成connect方法
*/
/**
* USB接口
* @author Anonymous
*
*/
interface USB {
/**
* 要求所有的USB设备,必须完成的方法,告知USB接口连接之后完成的
* 功能是什么
*/
void connect();
}
/**
* 鼠标类,遵从USB接口,实现connect方法
*
* @author Anonymous
*/
class Mouse implements USB {
@Override
public void connect() {
System.out.println("鼠标连接USB接口,控制光标");
}
}
/**
* Logi类,继承Mouse鼠标类
* 1. 鼠标设备
* 2. Logi间接遵从USB接口,是一个USB设备
* @author Anonymous
*
*/
class Logi extends Mouse {
@Override
public void connect() {
System.out.println("Logi Master 2S");
}
}
/**
* 键盘类,遵从USB接口,实现connect方法
*
* @author Anonymous
*/
class Keyboard implements USB {
@Override
public void connect() {
System.out.println("键盘连接USB接口,输入设备");
}
}
/**
* IKBC继承Keyboard类
* 1. 键盘设备
* 2. 间接遵从USB接口,也是一个USB设备
* @author Anonymous
*
*/
class IKBC extends Keyboard {
@Override
public void connect() {
System.out.println("IKBC C87 静音红轴");
}
}
/**
* PC电脑类,使用USB接口,这里需要通过USB接口连接一个USB设备
*
* @author Anonymous
*/
class PC {
/**
* 电脑类连接USB接口连接方法,这里需要的是一个USB设备
*
* @param usb USB接口对应的设备
*/
public void usbConnect(USB usb) {
// usb设备执行connect方法
usb.connect();
}
}
public class Demo1 {
public static void main(String[] args) {
// 电脑中有一个方法是使用USB接口连接USB设备
PC pc = new PC();
// 鼠标和键盘都是USB设备
Mouse mouse = new Mouse();
Keyboard keyboard = new Keyboard();
// 电脑需要通过USB接口连接USB设备,mouse鼠标就是USB设备
pc.usbConnect(mouse);
// keyboard键盘也是USB设备
pc.usbConnect(keyboard);
// 传入一个Logi类对象
pc.usbConnect(new Logi());
// 传入一个IKBC类对象
pc.usbConnect(new IKBC());
}
}
3.2继承生活化演示
动物园:
所有的动物都可以看做是一个Animal类
狗类
Dog
熊猫类
Panda
老虎类
Tiger
方法:
喂食动物的方法
获取动物的方法
package com.test_interface1;
/*
动物园:
所有的动物都可以看做是一个Animal类
狗类
Dog
熊猫类
Panda
老虎类
Tiger
方法:
喂食动物的方法
获取动物的方法
*/
/**
* 动物类
* @author Anonymous
*
*/
class Animal {
}
/**
* 狗类,为Animal动物的子类
* @author Anonymous
*
*/
class Dog extends Animal {
}
/**
* 熊猫类,为Animal动物的子类
* @author Anonymous
*
*/
class Panda extends Animal {
}
/**
* 老虎类,为Animal动物的子类
* @author Anonymous
*
*/
class Tiger extends Animal {
}
public class Demo2 {
public static void main(String[] args) {
Animal animal = new Animal();
Dog dog = new Dog();
Tiger tiger = new Tiger();
Panda panda = new Panda();
// 这里传入一个Animal类对象
feed(animal);
// 这里可以传入Dog类对象,因为Dog类对象是Animal类的子类对象
feed(dog);
// 这里传入的对象是Tiger类对象,Tiger类是Animal的子类
feed(tiger);
// 同上
feed(panda);
// 数据类型强转,
Dog dog2 = (Dog) getAnimal();
System.out.println(dog2.getClass());
}
/**
* 该方法的是喂食【动物】的方法
*
* @param animal 需要的参数是Animal类对象
*/
public static void feed(Animal animal) {
// 获取当前对象的完整包名.类名
System.out.println(animal.getClass() + "来吃饭了!!!");
}
/**
* 返回【动物】类对象的方法
*
* @return Animal类对象
*/
public static Animal getAnimal() {
// return new Animal();
return new Dog();
// return new Tiger();
// return new Panda();
}
}
3.3 多态
父类的引用指向子类的对象
或者说接口的引用指向遵从接口的类对象
作用:
1.拓宽方法的参数范围
例如:
方法参数为Animal类型
可以传入Animal类型本身,或者去子类对象都可以
方法参数为USB接口类型
只要是直接或者间接遵从USB接口的类对象可以作为方法的参数传入
2.拓宽方法的返回值范围
3.简化代码开发,提高开发效率,整合数据 类型