GVKun编程网logo

MySQL 基础之 标准模式通配符

1

在本文中,我们将详细介绍MySQL基础之标准模式通配符的各个方面,同时,我们也将为您带来关于7天学完Java基础之2/7、7天学完Java基础之4/7、7天学完Java基础之5/7、android基础

在本文中,我们将详细介绍MySQL 基础之 标准模式通配符的各个方面,同时,我们也将为您带来关于7 天学完 Java 基础之 2/7、7 天学完 Java 基础之 4/7、7 天学完 Java 基础之 5/7、android 基础之 XML 的创建与解析的有用知识。

本文目录一览:

MySQL 基础之 标准模式通配符

MySQL 基础之 标准模式通配符

MySQL 标准魔兽通配符

  作用:在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符

  注意:标准模式 SQL 通配符必须与 LIKE 运算符一起使用

1、%  通配符

  作用:匹配一个或多个字符。

找出以 “en” 结尾的名字

mysql> SELECT * FROM information WHERE name LIKE ''%en'';
+------+----------+---------------+----------+
| id   | name     | address       | city     |
+------+----------+---------------+----------+
| 1002 | xiaochen | Oxford street | New York |
+------+----------+---------------+----------+
1 row in set (0.00 sec)

找出城市名中包含 “Y” 的字符

mysql> SELECT * FROM information WHERE city LIKE ''%Y%'';
+------+----------+---------------+----------+
| id   | name     | address       | city     |
+------+----------+---------------+----------+
| 1002 | xiaochen | Oxford street | New York |
+------+----------+---------------+----------+
1 row in set (0.00 sec)

2、_  (下划线)仅替代一个字符

mysql> SELECT * FROM information WHERE city LIKE ''_ew_York'';
+------+----------+---------------+----------+
| id   | name     | address       | city     |
+------+----------+---------------+----------+
| 1002 | xiaochen | Oxford street | New York |
+------+----------+---------------+----------+
1 row in set (0.00 sec)

  这里第一个下划线替代一个字符 “N”,第二个下划线替代字符 “空格”

我们上面的查询是非常简单的那种,接下来我们学习一下扩展正则表达式查询

7 天学完 Java 基础之 2/7

7 天学完 Java 基础之 2/7

面向对象

面向对象的思想就是值我们要实现一个共功能的时候,我们不自己去做,而是找别人帮我们去做,帮我们去做的这个人就是对象。面向对象强调的是谁来帮我实现这个功能。

类与对象的关系

:是一组相关属性和行为的集合,类可以看成是事物的模板

对象:对象是一类事物的具体体现,对象是类的一个实列,必然具备该类的事物属性和行为。

类是对象的模板,对象是类的实体

下面来定义一个学生类

//类具有属性和行为,属性也叫做成员变量,行为也叫做成员方法
public class Student{
    //定义成员变量,因为每一个学生都有不同的姓名和年龄,所以可以把这两个作为成员变量,成员变量要定义在类中,方法外面,如果定义在方法里面,就叫做局部变量。变量是有作用域的,成员变量的作用域在整个类中,局部变量的作用域在该方法的里面。
    String name;
    int age;
    //定义方法,每一个学生都有着吃饭,睡觉,学习的行为,也就是方法
    public void eat(){
        System.out.println("我是"+name+"在吃饭");
    }
    public void sleep(){
        System.out.println("我是"+name+"在睡觉");
    }
    public void study(){
        System.out.println(name+"今年"+age+"岁了,要认真学习了");
    }
}

刚刚定义好了类,现在让我们来使用他吧

类的使用需要创建对象

//创建对象的格式
//类的名称 对象名 = new 类名称();
//成员变量的使用   对象名.成员变量
//成员方法的使用    对象名.成员方法()
public class AStudent{
    public static void main(String[] args){
        /*创建Student类对象,对象创建好之后就可以使用类了,也就是说可以
        使用对象名去调用类的成员方法,还可以对该类的成员变量赋值*/
        Student stu = new Student();
        //对成员变量赋值,将右侧的刘备赋值交给stu对象当中的name成员变量
        stu.name = "刘备";
        stu.age = "18";
        //调用成员方法
        stu.eat();
        stu.sleep();
        stu.study();
    }
}

使用对象类型作为方法的参数

什么是对象类型,new 出来的就是对象类型

public class AStudent{
    public static void main(String[] args){
        Student one = new Student();
        one.age = 18;
        one.name = "新垣结衣";
        method(one);
    }
    //以Student类做为参数传递,传递进来的对象中的方法和变量可以使用param参数名称来调用
    public static void method(Student param) {
        System.out.println(param.name);//新垣结衣
        System.out.println(param.age);//18
        param.study();//新垣结衣今年18岁了,要认真学习了
    }

}

使用对象类型作为方法的返回值

  public static void main(String[] args){
        //返回值类型是一个Student,所以需要Student来接收该返回值
        Student two = method();//method()方法的返回值类型是Student;
        two.study();
    }
    public static Student method() {
       Student one = new Student();
       one.name="曹操";
       one.age = 90;
       
       return one;

局部变量与成员变量的不同

  1. 定义的位置不一样

    局部变量:在方法的内部

    成员变量:在方法的外部,直接写在类当中

  2. 作用范围不一样

    局部变量:只有方法当中才可以使用,出了方法就不能再用

    成员变量:整个类都可以通用

  3. 默认值不一样

    局部变量:没有默认值,如果想使用,必须要手动赋值

    成员变量:如果没有赋值,会有默认值,规则和数组一样

面向对象的三大特征之封装性

  1. 方法就是一种封装
  2. 关键字 private 也是一种封装

封装就是将一些细节信息隐藏起来,对于外界不可见

private 关键字一旦用于成员变量,那么该成员变量就只能够在本来中访问,不能再其它类中访问

public class Student{
    String name;
    //写在对age设置private,使他只能够再本类中访问
    private int age;

    public void  setAge(int num){
        //未来避免年龄传入进来的不合理加上if判断语句
        //条件为真就把num赋值给age
        if(0<num&&num<150){
        	age = num;
        }else{
            System.out.println("年龄不合理");
        }
    }
    public int getAge(){
        return age;
    }
}

现在写多一个类来间接访问 age;

public class AStudent{
    public static void main(String[] args){
     //创建了Student对象,就可以使用她的变量和方法了
    Student one = new Student();
    //调用了方法setAge.传递了参数
    one.setAge(18);//int age = 18;
    //设置了private的要通过setAge来访问,没有设置private的可以直接对象名.成员变量来访问
    System.out.println(one.name+"  "+one.getAge());
    }
}

构造方法

构造方法是专门用来创建对象的方法,当我们通过关键字 new 来创建对象是,其实就是再调用构造方法,构造方法的名称必须和所在类的名称完全一样,构造方法不要写返回值类型。

如果没有编写任何构造方法,那么编译器将会默认赠送一个构造方法,没有参数,没有方法体。

一旦自己编写了构造方法,那么编译器将不会给你赠送构造方法

格式:

public 类名称(参数类型 参数名称){方法体}

public class Student{
    public Student(//我是参数){
        System.out.println("构造方法被调用了");//我是方法体
    }
}
//new 对象就是在调用构造方法
public class AStudent{
    public static void main(String[] args){
        //构造方法new对象的时候就被执行
        Student stu = new Student();//创建Student对象,就是在调用Student的构造方法
        //运行程序将会得到  构造方法被调用了
    }
}

定义一个标准类

//new 对象就是在调用构造方法
public class AStudent{
    public static void main(String[] args) {
        Student one = new Student();
        one.setAge(20);
        one.setName("孙权");
        System.out.println("姓名--"+one.getName()+"   年龄--"+one.getAge());

        Student two = new Student("曹操",30);
        System.out.println("姓名--"+two.getName()+"   年龄--"+two.getAge());
    }
}

7 天学完 Java 基础之 4/7

7 天学完 Java 基础之 4/7

静态 static

如果一个成员变量使用了 static 关键字,那么这个变量不再属于对象自己,而是属于所在的类,多个对象共享同一份数据

静态 static 关键字修饰成员变量

public class Student {
    private String name;
    private int age;
    static String room;
    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

public static void main(String[] args){
    Student one = new Student("郭靖",18);
    //用对象名.变量名给变量赋值
    one.room = "101";
    Student two = new Student("黄蓉",16);
     //姓名:郭靖  年龄18  教室105
    System.out.println("姓名:" +one.getName()+"  年龄"+one.getAge()+"  教室"+one.room);
    
    //没有对two.room赋值但是也输出了教室101,可见被static修饰过的变量的数据是共享的
    //姓名:黄蓉  年龄16  教室105
    System.out.println("姓名:" +two.getName()+"  年龄"+two.getAge()+"  教室"+two.room);
    }

静态 static 关键字修饰成员方法

一旦使用 static 修饰成员方法,那么这就成为了静态方法,静态方法不属于对象,而是属于类的

如果没有 static 关键字,那么必须首先创建对象,然后通过对象才可以使用他

有 static 关键字可以通过类名。静态方法名调用方法

public class MethodDemo {
   public void method(){
       System.out.println("这是一个成员方法");
   }
   public static void method1(){
       System.out.println("这是一个静态方法");
   }
}
public class MethodTest {
    public static void main(String[] args){
        MethodDemo one = new MethodDemo();
        //对象名调用方法
        one.method();
        //对象名调用方法
        one.method1();
        //类名调用静态方法
        MethodDemo.method1();
    }

如果有了 static,都推荐使用类名称来调用

注意事项

  1. 静态不能直接访问非静态
public class MethodDemo {
    int num ;
    static int num1;
   public void method(){
       System.out.println("这是一个成员方法");
       //成员方法访问成员变量和静态变量
       System.out.println(num);
       System.out.println(num1);
       
   }
   public static void method1(){
       System.out.println("这是一个静态方法");
       //静态方法访问静态变量
       System.out.println(num1);
       //静态方法不能够访问非静态变量
       //System.out.println(num);编译报错
   }

  1. 静态方法不能使用 this,因为 this 代表当前对象,而静态方法属于类。
静态代码块

特点,当第一次用到本来的时候,静态代码块执行唯一一次

/*格式
public class 类名{
	static{}
}*/
public class StaticDemo {
    static{
        System.out.println("静态代码块执行了");
    }
    public StaticDemo(){
        System.out.println("构造方法执行了");
    }
}
public class StaticDemotest {
    public static void main(String[] args) {
        //静态代码块只会执行一次,并且优先于其他语句执行
        StaticDemo one =new StaticDemo();
        StaticDemo two = new StaticDemo();
    }

}
//输出结果
静态代码块执行了
构造方法执行了
构造方法执行了
Arrays 工具类

public static String toStirng (数组), 将参数数组变成字符串

public static void main(String[] args) {
        int[] arrays= new int[]{1,2,3,4,5};
        String[] arrays1 = new String[]{"骐骥一跃","不能十步","驽马十驾","功在不舍"};
        //调用Arraysd的toString方法把数组变成字符串
        String str = Arrays.toString(arrays);
        String str1 = Arrays.toString(arrays1);
        //打印字符串
        System.out.println(str);
        System.out.println(str1);

    }

public static void sort (数组), 按照默认升序,对数组元素排序

public static void main(String[] args) {
        int[] arrays= new int[]{1,63,45,55,88};
        String[] arrays1 = new String[]{"骐骥一跃","不能十步","驽马十驾","功在不舍"};

        //对数组进行排序
        Arrays.sort(arrays);
        Arrays.sort(arrays1);
        //排序完之后,把他变成字符串,打印输出
        System.out.println(Arrays.toString(arrays));
        System.out.println(Arrays.toString(arrays1));
//输出结果如下
//[1, 45, 55, 63, 88]
//[不能十步, 功在不舍, 驽马十驾, 骐骥一跃]
    }
Arrays 字符串倒序练习
public static void main(String[] args) {
        //先创建一个字符串
        String str = "ERsdf485dfW";
        //要排序字符串,需要把字符串变成char数组,可以使用toCharArray方法
        char[] chars = str.toCharArray();
        //把字符串用sort方法排序好
        Arrays.sort(chars);
        //然后就可以for循环遍历来倒序
        //chars数组的最大索引为长度减一,索引为0也有元素,索引需要>=0
        for(int i=chars.length-1;i>=0;i--){
            System.out.println(chars[i]);
        }

    }
继承

继承的格式

public class zi extends fu{}

继承中成员变量的访问特点

在子父类的继承关系当中,如果有成员变量重名,则创建子类对象时,访问有两种方式

直接通过子类对象访问成员变量

等号左边是谁,就优先有谁,没有则向上找

public class Fu {
    //父类
    int num = 100;
}
public class Zi extends Fu{
    //子类
    int num = 200;
}
public static void main(String[] args) {
     Zi zi = new Zi();
    //输出的时100还是200?
     System.out.println(zi.num);//200
    }

间接通过成员方法访问成员变量

方法属于谁,就优先用谁,没有则向上找

public class Fu {
    //父类
    int num = 100;
    public void methodFu(){
        System.out.println(num);
    }
}
public class Zi extends Fu{
    int numZi = 10;
    int num = 200;
    public void methodzi(){
        System.out.println(num);
    }
public static void main(String[] args) {
        Zi zi = new Zi();
        //输出的时100还是200?
        System.out.println(zi.num);//200
        //这个方法是子类的,优先使用子类的成员变量
        zi.methodzi();//200
        //这个方法是父类的,优先使用父类的成员变量
        zi.methodFu();//100
    }

区分子类方法中重名的三种变量

public class Fu {
    int num = 10;
}
public class Zi extends Fu{
    int num = 20;
    public void method(){
        int num = 30;
        //输出局部变量
        System.out.println(num);
        //输出本类变量
        System.out.println(this.num);
        //输出父类变量
        System.out.println(super.num);
    }
}
/*
*局部变量:
* 本类的成员变量
* 父类的成员变量
* */
public class ExtendsTest {
    public static void main(String[] args) {
        Zi zi = new Zi();
        //调用Zi类方法
        zi.method();
    }
}

继承中成员方法的访问特点

public class Fu {
    public void methodFu(){
        System.out.println("父类方法");
    }
    public void method(){
        System.out.println("父类重名方法执行");
    }
}
public class Zi extends Fu{
    public void methodZi(){
        System.out.println("子类方法执行");
    }
    public void method(){
        System.out.println("子类重名方法执行");
    }
}
public class ExtendsTest {
    public static void main(String[] args) {
        Zi zi = new Zi();
        //调用Zi类方法
        zi.methodFu();
        zi.methodZi();
        //方法重名,优先使用子类方法
        zi.method();
    }
}

重写(Override)

概念:在继承关系当中,方法的名称一样,参数列表也一样

重写(Override),方法的名称一样,参数列表也一样

重载(Overload),方法的名称一样,参数列表不一样

继承中构造方法的访问特点

public class Fu {
    public Fu(){
        System.out.println("我是无参数的父类构造方法");
    }
    public Fu(int num){
        System.out.println("我是有参数的父类重载构造");
    }
}
public class Zi extends Fu{

    public Zi(){
        //在继承关系中,编译器都会默认赠送一个super()父类构造方法;
        //而且还是在子类构造方法的第一行,所以在new对象的时候会先执行
        // 父类的构造方法
        // super();
        super(5);
        //在继承关系中,子类会有一个默认的super();
        System.out.println("子类构造方法");
    }
}
/*
继承关系中,父子类构造方法的访问特点
1.子类构造方法当中有一个默认隐含的"super()"调用
2.子类构造可以通过super关键字来调用父类重载构造
super的父类构造调用,必须在构造方法的第一句
 */
public class ConstructorDemo {
    public static void main(String[] args) {
        Zi zi = new Zi();
        //父类构造方法
        //子类构造方法
    }
}

super 关键字的三种用法

1. 在子类的成员方法中,访问父类的成员变量。super.numFu

2. 在子类的成员方法中,访问父类的成员方法。super.methodFu

3. 在子类的构造方法中,访问父类的构造方法。

this 关键字的三种用法

super 关键字用来访问父类内容,而 this 关键字用来访问本类内容,用法也有三种

1. 在本类中的成员方法中,访问本类的成员变量

public class Zi extends Fu {
    int num = 55;
public void athis() {
    int num = 66;
    System.out.println(num);//66
    System.out.println(this.num);//55
   }
}

2. 在本类的成员方法中,访问本类的另一个成员方法,

    int num = 55;
    public void athis() {
        int num = 66;
        System.out.println(num);//66
        System.out.println(this.num);//55
    }
    public void bthis(){
        System.out.println("bbb");
    }
    public void cthis(){
        this.athis();
        System.out.println("ccc");
    }
 public static void main(String[] args) {
        new Zi().cthis();//输出结果为66 55 ccc
    }

3. 在本类的构造方法中,访问本类的另一个构造方法

public Zi(){
    	//重载构造方法两个
    	//调用下一个构造方法
       this(123);
    }
    public Zi(int n){
        //调用下一个构造方法
       this(1,2);
    }
    public Zi(int a,int b){
        
    }
//注意this()调用跟super()一样也必须是构造方法的第一个语句,super和this两张构造调用,不可以同时使用。

练习

public class Fu {
    int num = 5;
    public Fu(){
        System.out.println("我是构造方法");
    }
    public void method(){
        System.out.println("我是父类");
    }
}

public class Zi extends Fu {
    int num = 6;

    public void method1(){
        int num = 7;
        System.out.println(num);
        System.out.println(this.num);
        System.out.println(super.num);
    }
    @Override
    public void method(){
        super.method();
        System.out.println("我是子类");
    }
}
public class ConstructorDemo {
    public static void main(String[] args) {
        Zi zi = new Zi();
        zi.method1();
        zi.method();
		//我是构造方法
		//7
		//6
		//5
		//我是父类
    }
}

Java 继承的三个特点

1.Java 语言是单继承的,一个类的直接父类只有由唯一一个

  1. Java 语言可以多级继承,也就是 A 类继承 B 类,B 类继承 C 类
  2. 一个类的直接父类是唯一的,但是父类可以由很多个子类,

抽象类

public abstract class 类名{
    public abstract void 方法名(){}
    //抽象类中也可以定义普通成员方法
    public void 方法名(){}
}

抽象方法和抽象类的使用

  1. 抽象类不能够直接 new 的抽象类对象
  2. 必须用一个子类继承抽象类才可以使用
  3. 子类必须重写抽象父类当中的所有抽象方法
  4. 创建子类对象进行使用

抽象方法和抽象类的注意事项

  1. 抽象类不能够创建对象

  2. 抽象类,可以有构造方法的,是供子类创建对象时,初始化成员使用的

  3. 抽象类中,不一定包含抽象方法,但是抽象方法一定包含在抽象类中

  4. 抽象类的子类,必须重写抽象父类的所有抽象方法

红包案例

public class AUser {
    private int money ;
    private String name ;

    public AUser() {
    }


    public AUser(int money, String name) {
        this.money = money;
        this.name = name;
    }

    public int getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void show(){
        System.out.println("我"+name+"现在的余额是"+money);
    }
}

import java.lang.reflect.Array;
import java.util.ArrayList;

public class Admin extends AUser{
    public Admin() {
    }

    public Admin(int aBalance, String aName) {
        super(aBalance, aName);
    }

    public ArrayList<Integer> send(int totalMoney, int count){
        ArrayList<Integer> redList = new ArrayList<>();
        int  i= totalMoney/count;
        //判断群主有多少钱
        int leftMony = super.getMoney();
        if(totalMoney>leftMony){
            System.out.println("余额不足");
            return redList;
        }
        //扣钱
        super.setMoney(leftMony -totalMoney);
        int avg = totalMoney/count;
        int mod = totalMoney%count;

        for(int d=0;d<count-1;d++){
            redList.add(avg);
        }
        int last=  avg+mod;
        redList.add(last);
        return redList;
    }
}

import java.util.ArrayList;
import java.util.Random;

public class Menber extends  AUser{
    public Menber() {
    }

    public Menber(int money, String name) {
        super(money, name);
    }
    public void receive(ArrayList<Integer> list){
        int index = new Random().nextInt(list.size());
        int delta = list.remove(index);
        int money = super.getMoney();
        super.setMoney(money+delta);

    }

}

import java.util.ArrayList;

public class RedPacket {
    public static void main(String[] args) {
        Admin admin = new Admin(100,"群主");
        Menber one = new Menber(0,"aaa");
        Menber two = new Menber(0,"aaa");
        Menber three = new Menber(0,"aaa");
        admin.show();
        one.show();
        two.show();
        three.show();

        ArrayList<Integer> redList = admin.send(20,3);
        one.receive(redList);
        two.receive(redList);
        three.receive(redList);

        admin.show();
        one.show();
        two.show();
        three.show();
    }
}

7 天学完 Java 基础之 5/7

7 天学完 Java 基础之 5/7

接口

接口就是一种公共的规范标准 是一种引用数据类型

定义格式

public interface 接口名称 {}

java7 中接口可以包含常量,抽象方法;Java8 还可以额外包含默认方法,静态方法;Java 9 还可以额外包含私有方法

public interface MyInterfaceAbstract{
    //这是一个抽象方法
    public abstract void methodAbs();
    //接口中的抽象方法,修饰符必须是两个固定的关键字:public abstract
    //这两个关键字可以选择性的省略
    abstract void methodAbs2();
    public void methodAbs3();
    void methodAbs4();
    
}

接口的抽象方法使用

接口使用步骤:

  1. 接口不能够直接使用,必须有一个 “实现类” 来实现该接口

    格式:

    public class 实现类名称 implements 接口名称 {}

  2. 接口的实现类必须覆盖重写接口中所有的抽象方法

  3. 创建实现类对象 (new),进行使用

//按照定义格式定义一个接口
//public interface 接口名称{}
public interface InterfaceDemo {
    //接口里面可以有抽象方法,普通方法
    //定义一个抽象方法
    public abstract void methodAbs1();
    //默认方法
    public abstract void methodAbs2();

}
public class InterfaceDemoImpl implements InterfaceDemo{
    //回顾一些重写的概念
    //方法名和形参列表一样
    //权限修饰符必须大于或者等于父类的权限修饰符
    //子类的返回值类型必须小于或者等于父类的返回值类型
    @Override
    public void methodAbs1() {
        System.out.println("天下武功,唯快不破");
    }

    @Override

    public void methodAbs2() {
        System.out.println("认真的人,自带光芒");
    }

}
public class newInterfaceDemo {
    public static void main(String[] args){
        InterfaceDemoImpl inter = new InterfaceDemoImpl();
        inter.methodAbs1();
        inter.methodAbs2();
    }
}
注意事项

如果实现类并没有覆盖重写接口中的所有的抽象方法,那么这个实现类就必须是抽象类

接口的默认方法定义
public interface InterfaceDemo {
    /*
    java 8开始,接口允许定义默认方法
    格式:
    public default 返回值类型 方法名称(参数列表){
    方法体
    }
    备注:接口当中的默认方法,可以解决接口升级的问题
    默认方法可以有方法体
     */
    public abstract void methodAbs1();

    public default void methodAbs2(){
        System.out.println("我是默认方法,可以解决升级问题");
    }
public class InterfaceDemoImpl implements InterfaceDemo{
    @Override
    public void methodAbs1() {
        System.out.println("天下武功,唯快不破");
    }
    //我在这里并没有重写public default void methodAbs2()
    //实现接口自动继承方法
}

public class newInterfaceDemo {
    public static void main(String[] args){
        InterfaceDemoImpl inter = new InterfaceDemoImpl();
        //接口的默认方法也是可以覆盖重写的
        //这里就不写了
        inter.methodAbs1();
        inter.methodAbs2();
    }
}
接口的静态方法的定义
/*
格式
public static 返回值类型 方法名称(参数列表){}

 */
public interface InterfaceStatic {
    public static void method1(int a,int b){
        System.out.println("今天要敲"+a*b+"行代码");
    }
}
public class InterfaceStaticImpl {
    //接口中的静态方法的使用
    public static void main(String[] args) {
        //直接通过接口名称.静态方法的名称调用即可
        InterfaceStatic.method1(15,67);
    }
}
接口的私有方法定义
/*
问题描述:
我们需要抽取一个共有方法,用来解决两个默认方法之间重复代码的问题
但是这个共有方法,不应该被是实现类使用,应该私有化的

解决方案
从Java 9 开始,接口当中允许定义私有方法
1.普通私有方法,解决多个默认方法之间重复代码问题
格式
private 返回值类型 方法名称(参数列表){}
2.静态私有方法,解决多个静态方法之间重复代码问题
    格式:
    private static 返回值类型 方法名称(参数列表){}
 */
    public interface InterfaceStatic {
        public default void method1(){
            System.out.println("认真的人,自带光芒");
            method3();
        }
        public default void method2(){
            System.out.println("作日的最佳表现,是今日的最低要求");
            method3();
        }
        private void method3(){
            System.out.println("乘风破浪会有时,直挂云帆济沧海");
        }
}
public class InterfaceStaticImpl implements InterfaceStatic{
    public static void main(String[] args) {
        InterfaceStaticImpl inter = new InterfaceStaticImpl();
        inter.method1();
        inter.method2();
        //接口中的静态方法的使用
        //想要使用接口的方法,必须要实现接口
        //实现完接口后,需要new对象使用
    }

}
接口的常量定义和使用

1. 接口当中的常量,可以省略 public static final , 注意,不写也照样是这样

  1. 接口当中的常量,必须进行复制,不赋值不能使用

  2. 接口当中的常量名称,使用完全大写的字母,用下划线进行分割

使用格式

接口名称。常量名称

多态

多态的前提:extends 继承或者 Implements 实现,

一个对象拥有多种形态,这就是:对象的多态性

代码当中体现多态性:父类引用指向子类对象

多态格式

父类名称 对象名 = new 子类名称();

或者

接口名称 对象名 = new 实现类名称();

多态中成员变量的使用特点

//访问成员变量的两种方式
//1.直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,没有向上找
//2.间接通过成员方法访问
public class Fu {
    //子类也有相同的成员变量num
    int num = 10;

    public void shownum(){
        System.out.println(num);
    }
}
public class Zi extends Fu{
    //与父类相同的成员变量num
    int num = 20;
    //子类特有的成员变量
    int num1 =30;
    //重写方法
    @Override
    //重写了父类的方法,
    public void shownum(){
        System.out.println(num);
    }
}

public class Demo01MultiField {
    public static void main(String[] args) {
        //使用多态的写法,父类引用指向子类对象
        Fu obj  = new Zi();
        //等号左边是Fu,优先使用左边的的成员变量,没有则向上找
        System.out.println(obj.num);//10
        //不可能向下找
        //System.out.println(obj.num1);编译报错

        //shownum属于Fu,则使用Fu的成员变量//10
        //当子类覆盖重写父类,就属于Zi类//20
        obj.shownum();
    }
}

多态中成员方法的使用特点

public class Fu {
    //成员方法的访问规则
    //看new的是谁,就优先用谁,没有则向上找
    public void method(){
        System.out.println("我是父类");
    }
    public void methodFu(){
        System.out.println("我是父类特有方法");
    }
}
public class Zi extends Fu{
    public void method(){
        System.out.println("我是子类");
    }
    public void methodZi(){
        System.out.println("我是子类特有方法");
    }
}

java

public class Demo01MultiField {
    public static void main(String[] args) {
       Fu obj  = new Zi();//多态
       obj.method();// 父子都有,new的是zi,优先用zi  //输出结果我是子类
       obj.methodFu();//子类没有,向上找,           //输出结果我是父类特有方法
    }
}

多态中成员变量访问规则和成员方法访问规则总结

成员变量:看左边,左边是哪一个类就优先使用哪一个类。没有像上找

成员方法:看右边,new 的是哪一个对象就优先使用哪一个对象的方法。没有向上找

对象的向上转型

  1. 对象的向上转型,其实就是多态的写法

    格式 父类名称 对象名 = new 子类名称();

    含义:右侧创建一个子类对象,把他当作父类来看待使用

    Animal animal = new Cat (); 创建了一只猫,当作动物看待

注意事项:向上转型一定是安全的从小范围(猫)转成大范围(动物)

对象的向下转型

对象的向下转型,其实是一个还原的动作

格式:子类名称 对象名 = (子类名称)父类对象;

含义,将父类对象,还原成本来的子类对象

Animal animal = new Cat();//本来是猫,向上转型成为动物
Cat cat = (cat) animal;//本来是猫,已经被当成动物了,还原回来成为本来的猫向下转型;

instanceof 关键字进行类型判断

格式:

对象 instanceof 类名称

这将会得到一个 Boolean 值结果,也就是判断前面的对象能不能当作后面类型的实例

笔记本 USB 接口案例

//先确定一下笔记本电脑有什么功能
//关机,开机,可以使用各种USB设备
//功能确定好之后写方法
public class Computer {
    public void powerOn() {
        System.out.println("笔记本电脑开机了");
    }

    public void powerOff() {
        System.out.println("笔记本电脑关机了");
    }

    public void usbDevice(USB usb) {
        usb.open();
        if (usb instanceof Mouse) {
            Mouse mouse = (Mouse) usb;
            mouse.click();
        } else if (usb instanceof KeyBoard) {
            KeyBoard keyboard = (KeyBoard) usb;
            keyboard.type();
        }
        //usb.close();
    }
}

//usb设备需要设置成接口,并且有抽象方法,
//因为usb设备都有着共性的方法,和非共性的方法,我们需要把共性的方法给抽取出来
//usb设备都有开关的功能
public interface USB {
    //打开设备的功能
    public abstract void open();
    //关闭设备的功能

    public abstract void close();

}
//现在设置一个usb设备
//去实现USB接口
//实现了这个USB接口才可以在Computer类中传递进去,有了USB设备,鼠标才是一个完整的电脑
//现在就去实现这个接口吧
public class Mouse implements USB {
    //必须重写抽象方法
    @Override
    public void open() {
        System.out.println("鼠标插入");
    }
    @Override
    public void close() {
        System.out.println("鼠标拔出");
    }
    //鼠标特有的方法
    public void click() {
        System.out.println("鼠标点击");
    }
}
//也是一个USB设备
public class KeyBoard implements USB {
    //重写方法
    @Override
    public void open() {
        System.out.println("键盘插入。。。");
    }
    @Override
    public void close() {
        System.out.println("键盘拔出");
    }
    //键盘特有方法
    public void type() {
        System.out.println("键盘打字");
    }
}
//现在可以创建一个计算机了
public class ComputerImple {
    public static void main(String[] args) {
        //创建一个笔记本对象
        Computer computer = new Computer();
        //启动笔记本
        computer.powerOn();
        //创建USB接口
        USB usb = new Mouse();
        //传递接口
        computer.usbDevice(usb);
        USB usb1 = new KeyBoard();
        computer.usbDevice(usb1);
        //关闭笔记本
        computer.powerOff();

    }
}

android 基础之 XML 的创建与解析

android 基础之 XML 的创建与解析

写一个很简单的例子记录一下 XML 的创建与解析。

创建与解析其实是两个互逆的过程,会了其中一个对应的就能写出来。

创建用 XmlSerializer xmlSerializer=Xml.newSerializer ();

解析用 XmlPullParser xmlPullParser=Xml.newPullParser ();

package com.example.xmlborn;

import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.ArrayList;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;

import android.R.xml;
import android.os.Bundle;
import android.app.Activity;
import android.util.Xml;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener{
	Button xmlpullButton;
	private String result;
	private TextView textView;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		String resource=produceXML();
		textView=(TextView) findViewById(R.id.text);
		xmlpullButton=(Button) findViewById(R.id.button1);
		xmlpullButton.setOnClickListener(this);
	}
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (v.getId()) {
		case R.id.button1:
			result=parseXML();
			if (result!=null) {
				textView.setText(result);
			}else {
				Toast.makeText(getApplicationContext(),"null",1000).show();
			}
			
			break;

		default:
			break;
		}
	}
	private String produceXML() {
		// TODO Auto-generated method stub
		StringWriter writer=new StringWriter();
		XmlSerializer xmlSerializer=Xml.newSerializer();
		ArrayList<Beauty> list=getData();
		try {
			xmlSerializer.setOutput(writer);
			xmlSerializer.startDocument("UTF-8",true);
			xmlSerializer.startTag(null,"beauties");
			for (Beauty beauty:list) {
			
				xmlSerializer.startTag(null,"beautyname");
				xmlSerializer.text(beauty.getNameString());
				xmlSerializer.endTag(null,"beautyname");
				xmlSerializer.startTag(null,"age");
				xmlSerializer.text(beauty.getAge());
				xmlSerializer.endTag(null,"age");
				
			}
			xmlSerializer.endTag(null,"beauties");
			xmlSerializer.endDocument();
			
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalStateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return writer.toString();
	}

	private ArrayList<Beauty> getData() {
		// TODO Auto-generated method stub
		ArrayList<Beauty> list=new ArrayList<Beauty>();
		Beauty lily=new Beauty("lily","23");
		Beauty lucy=new Beauty("lucy","36");
		list.add(lily);
		list.add(lucy);
		return list;
	}
	
	

	private String parseXML() {
		result="通过pull解析结果为:";
		String xmlString=produceXML();
		StringReader in=new StringReader(xmlString);
	XmlPullParser xmlPullParser=Xml.newPullParser();
	try {
		xmlPullParser.setInput(in);
		int type=xmlPullParser.getEventType();
		while (type!=XmlPullParser.END_DOCUMENT) {
		String nodeName=xmlPullParser.getName();
		switch (type) {
		case XmlPullParser.START_TAG:
			if("beautyname".equals(nodeName)){
				result +="姓名:"+xmlPullParser.nextText();
			}if ("age".equals(nodeName)) {
				result +="年龄:"+xmlPullParser.nextText();
			}
			break;

		
		}
		type=xmlPullParser.next();
		}
	} catch (XmlPullParserException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
		return result;
		// TODO Auto-generated method stub
		
	}
	
class Beauty{
		
		String nameString,age;
		
		public String getNameString() {
			return nameString;
		}

		public void setNameString(String nameString) {
			this.nameString = nameString;
		}

		public String getAge() {
			return age;
		}

		public void setAge(String age) {
			this.age = age;
		}

		public Beauty(String nameString, String age) {
			super();
			this.nameString = nameString;
			this.age = age;
		}
		
	}

今天的关于MySQL 基础之 标准模式通配符的分享已经结束,谢谢您的关注,如果想了解更多关于7 天学完 Java 基础之 2/7、7 天学完 Java 基础之 4/7、7 天学完 Java 基础之 5/7、android 基础之 XML 的创建与解析的相关知识,请在本站进行查询。

本文标签: