2023.5.21学习内容 复习JavaSE
下午
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)); } }

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); } }
4.sql
-
DDL:数据定义语言 创建库,表,视图,修改库,表,...丢弃库表...
//创建数据库:--utf8m4中国语言4字节,可以插入一些特殊符号,一劳永逸解决编码问题 create database if not exists jdbc charset utf8mb4; //客户端切换数据库: use jdbc //查看数据库中的表: show tables; //创建表: create table if not exists customer( id int auto_increment, --自增式主键 name varchar(20) not null, --姓名,非空约束 gender enum('男','女') default '男', --性别,default没有插入会填入默认值, age int, --年龄 salary double, --工资 phone char(15) unique, --电话,唯一约束 primary key(id) --主键 ) engine innodb charset utf8mb3; //创建用户信息用不到特殊字符 --innodb引擎支持 事务、外键等高级特性,不易出问题 //查看表结构: desc customer; //查看表的建表语句: show create table customer; -
DML:数据操纵语言 insert(插入数据),update(更新数据),delete(删除数据)
insert into customer(name,gender,age,salary,phone) values('晓红','女','30','3000','13899999999'); //所有列 select * from customer; select id,name,gender,age,salary,phone from customer; //客服端创建预编译 可多次执行,替换好就行 prepare p1 from 'insert into customer(name,gender,age,salary,phone) values(?,?,?,?,?)'; set @name = '阳光', @gender = '女', @age = 22, @salary = 5000, @phone = '13799999999'; //执行预编译,要使用用户变量来传值 execute p1 using @name, @gender, @age, @salary, @phone; update customer set gender='男' where id ='2'; prepare p2 from 'update customer set name = ?, gender = ?, age = ?, salary =?, phone = ? where id = ?'; set @name = '张伟',@gender = '男', @age = 24, @salary = 4500, @phone = '13699999999', @id = 1; execute p2 using @name, @gender, @age, @salary, @phone, @id; prepare p3 from 'delete from customer where id = ?'; set @id = 1; execute p3 using @id; -
DQL:数据查询语言 select(查询数据)
-
DCL:数据控制语言 commit(提交) rollback(回滚)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人