下午
1.了解CSS响应式布局和兼容性问题
2.浏览IDEA使用手册并修改Maven仓库设置
3.复习强化JavaSE的多态、接口、泛型、反射知识
import org.junit.Test;
import test.Hello;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
interface JDBC{
void connect();
String excute(String sql);
}
class MYSQL implements JDBC{
@Override
public void connect(){
System.out.println("MySQL连接成功");
}
@Override
public String excute(String sql) {
System.out.println("MySQL要执行sql");
return "ok";
}
}
class Oracal implements JDBC{
@Override
public void connect(){
System.out.println("Orcal连接成功");
}
@Override
public String excute(String sql) {
System.out.println("Oracal要执行sql");
return "ok";
}
}
class GenericTest<T>{ //T表示不确定的某种类型,使用时才被使用
private T info;
public void setInfo(T info) {
this.info = info;
}
public T getInfo() {
//public Objectc getInfo()没有问题,因为Object是所有类型的父类型
return info;
}
}
//泛型和继承的关系
class Sub1 extends GenericTest<String>{} //子类在继承泛型父类时把泛型类固化,子类简单,并且也用到了泛型的好处
class Sub2<T> extends GenericTest<T>{} //灵活
public class Review {
//泛型:解决类型的安全问题
@Test
public void test4(){
GenericTest gt = new GenericTest();
//类型模糊,类型不安全
gt.setInfo("300");
gt.setInfo(400);
Object info1 = gt.getInfo();
GenericTest<Double> gt2 = new GenericTest<Double>();
gt2.setInfo(3.22);
Double info2 = gt2.getInfo();
}
//多态 子类对象的多种父类形态,父类类型的引用指向多种不同子类对象
@Test
public void test1() {
//ArrayList extends Object , implements List
ArrayList arrayList = new ArrayList();
List list = new LinkedList();
}
//接口:对不同事物共同行为的抽象,用于描述某种能力或某种规范
//把子类对象当作一个标准的对象来使用,完成一系列操作而不需要关心子类的细节,简化开发、程序更加灵活方便
@Test
public void test2() {
JDBC jdbc = new MYSQL();//面向接口编程,把子类对象多态为接口类型
jdbc.connect();
String s1 = jdbc.excute("select * from test");
System.out.println("s1 = " + s1);
jdbc = new Oracal();//面向接口编程,把子类对象多态为接口类型
jdbc.connect();
String s2 = jdbc.excute("select * from test");
System.out.println("s2 = " + s2);
}
@Test
public void test3() {
//集合中可以保存任意类型对象,
// List list = new ArrayList(); 加上泛型的类型参数约束集合
// ①集合被约束为只能处理String类型的对象 不能乱添加其他类型的对象因此安全,
List<String> list = new ArrayList();
list.add("abc");
// list.add(300);
// list.add(3.22);
// list.add(false);
// ②获取元素时不需要多态为Object类型,只需要用本态的String类型,处理元素方便避免造型风险
String s1 = list.get(0);
Object o1 = list.get(0);
System.out.println(o1);
}
//反射 每创建一个新对象,在栈中就增加一个该对象的位置,hello1和hello2的两个位置指向内存中的两个no;反射就是, 对象.属性反着来——>属性.对象
//hello1和hello2为目标对象,no为属性对象
@Test
public void test6() throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchFieldException {
Hello hello1 = new Hello();
//hello1.no = 300;
hello1.setNo(300);
System.out.println(hello1.getNo());
//System.out.println(hello1.no);
hello1.test(800);
Hello hello2 = new Hello();
//hello2.no = 30000;
//System.out.println(hello2.no);
hello2.test(80000);
//反射
Class class1 = Class.forName("test.Hello"); //有异常,抛出异常 //类对象
Class class2 = Hello.class; //简单、直接、高效、不宜出问题;forName()则更灵活
System.out.println(class1==class2); //true 相同的类对象
Object obj1 = class1.newInstance();
//obj1.no = 400;
Field no = class1.getDeclaredField("no"); //getField()方法无法拿到私有属性,只能拿到公共属性
no.setAccessible(true);//暴力反射:强行对私有属性直接赋值
//反射比常规操作更暴力
no.set(obj1,400); //绑定目标对象和值 相当于obj.1 = 400;
// System.out.println(obj1.no);
System.out.println(no.get(obj1));
}
}
getField()方法无法拿到私有属性,只能拿到公共属性;编译没错运行报错
Hello.java
package test;
public class Hello {
private int no; //属性一旦私有,就应该用get、set方法处理
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public void test(int a){
System.out.println(a);
}
}
标签:21,no,void,多态,System,2023.5,println,public,out
From: https://www.cnblogs.com/yan999/p/17418804.html