内部类(补充)
局部内部类
如果在外界定义会检测不到你所定义的局部内部类,直接报错.
public class Main {public static void print(int age,int b){class person{int age;public person(int age) {this.age = age;}void show(){System.out.println("内部类输出: "+age+"\t"+b); //调用外部方法的变量}}person a=new person(age);a.show();System.out.println("方法输出 :"+b);}public static void main(String[] args) {print(6,7);}
}
运行结果
匿名内部类
匿名内部类无法创建多个对象,因为他没有名字,它既可以写在成员位置,也可以写在局部位置.
这个匿名内部类的作用主要是替代那些只出现一次的类,当类只出现一次时我们只需要把他定义成匿名内部类就好,这样就可以不用去重新创建类了.一般当方法的参数是接口或者类时使用.
new Inter(){public void show(){}
}
//以上代码总体上来说是一个对象
//这一段代码完成了三个功能:
//实现或继承关系
//方法的重写
//创建对象//new //用空参构造创建匿名内部类的对象
//Inter //是已经定义好的一个接口或一个类
//这是一个匿名内部类(实现Inter接口或继承Inter类)
//{ //类的开始
// public void show(){
// }
//} //类的结束
//以上是你创建的类的内容
样例:
public interface Animal {public void eat();
}
public abstract class Swim {public abstract void swim();
}
public class Main {public static void main(String[] args) {method(new Swim(){@Overridepublic void swim() {System.out.println("类的实现方法");}});method1(new Animal(){@Overridepublic void eat() {System.out.println("接口的实现方法");}});}public static void method(Swim a){ //多态a.swim();}public static void method1(Animal a){ //多态a.eat();}
}
正则表达式
匹配一个字符
public class Main {public static void main(String[] args) {System.out.println("jjm".matches("[j-m][j-m][j-m]"));System.out.println("jjm".matches("[j-m]"));}
}
运行结果
注意:
在使用正则表达式的时候如果出现了\那么要在\前加上\.( '\' 表示转义字符,所以"\\d"才表示一个数字).
匹配多个字符
以上都是匹配只出现一次的情况的,那么如果出现多次呢?
public class Main {public static void main(String[] args) {System.out.println("jjm".matches("\\w{3}"));System.out.println("jjm".matches("\\w{2}"));System.out.println("jjm".matches("\\w +"));}
}
运行结果
泛型
为什么要用到泛型?
public class Student {String name;int age;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;}
}
import java.util.ArrayList;
import java.util.Iterator;public class Main {public static void main(String[] args) {//创建链表ArrayList list=new ArrayList(); //集合的基本使用//添加数据list.add(123);list.add("add");list.add(new Student("jjm",19));//遍历集合里的每一个元素Iterator it=list.iterator();while(it.hasNext()){//Student a=(Student )it.next(); 这时我们用什么来报存集合里的元素呢??System.out.println();}}
}
这时我们用什么来报存集合里的元素呢?好像什么都不太适合.
所以泛型出现了,泛型的本质是为了将类型参数化, 也就是说在泛型使用过程中,数据类型被设置为一个参数,在使用时再从外部传入一个数据类型;而一旦传入了具体的数据类型后,传入变量(实参)的数据类型如果不匹配,编译器就会直接报错。
如果我们用泛型来规范数据的类型就会避免以上可能出现的错误.
泛型的定义: <类型>
使用的地方:类的后面(泛型类),方法上面(泛型方法),接口后面(泛型接口).
泛型类
泛型方法
泛型接口
注意:
1.泛型中不能写基本类型数据.
2.指定泛型的具体类型后,传递类型时可以传递该类型或其子类类型.
3.如果不写泛型,类型默认为Object.
我们在程序中加入泛型
import java.util.ArrayList;
import java.util.Iterator;public class Main {public static void main(String[] args) {//创建链表ArrayList<String> list=new ArrayList();//添加数据list.add("123");list.add("add");list.add("jjm");//遍历集合里的每一个元素Iterator<String> it=list.iterator();while(it.hasNext()){String a=it.next();System.out.println(a);}}
}
运行结果