当前位置: 首页 > news >正文

编程跟做网站稿定设计app下载

编程跟做网站,稿定设计app下载,智能网站排名优化,哪里可以免费下载ppt模板目录 82、JDBC 能否处理 Blob 和 Clob#xff1f; 83、简述正则表达式及其用途。 84、Java 中是如何支持正则表达式操作的#xff1f; 85、获得一个类的类对象有哪些方式#xff1f; 86、如何通过反射创建对象#xff1f; 87、如何通过反射获取和设置对象私有字段的值…目录 82、JDBC 能否处理 Blob 和 Clob 83、简述正则表达式及其用途。 84、Java 中是如何支持正则表达式操作的 85、获得一个类的类对象有哪些方式 86、如何通过反射创建对象 87、如何通过反射获取和设置对象私有字段的值 88、如何通过反射调用对象的方法 89、简述一下面向对象的”六原则一法则”。 82、JDBC 能否处理 Blob 和 Clob Blob 是指二进制大对象Binary Large Object而 Clob 是指大字符对象Character Large Objec因此其中 Blob 是为存储大的二进制数据而设计的而 Clob 是为存储大的文本数据而设计的。JDBC 的 PreparedStatement 和ResultSet 都提供了相应的方法来支持 Blob 和 Clob 操作。下面的代码展示了如何使用 JDBC 操作 LOB 下面以 MySQL 数据库为例创建一个张有三个字段的用户表包括编号id、姓名name和照片photo建表语句如下 create table tb_user ( id int primary key auto_increment, name varchar(20) unique not null, photo longblob ); 下面的 Java 代码向数据库中插入一条记录 import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException;class JdbcLobTest {public static void main(String[] args) {Connection con null;try {// 1. 加载驱动Java6 以上版本可以省略Class.forName(com.mysql.jdbc.Driver);// 2. 建立连接con DriverManager.getConnection(jdbc:mysql://localhost:3306/test, root, 123456);// 3. 创建语句对象PreparedStatement ps con.prepareStatement(insert into tb_user values (default, ?, ?));ps.setString(1, 骆昊);// 将 SQL 语句中第一个占位符换成字符串try (InputStream in new FileInputStream(test.jpg)) { // Java 7 的 TWR ps.setBinaryStream(2, in); // 将 SQL 语句中第二个占位符换成二进制流// 4. 发出 SQL 语句获得受影响行数System.out.println(ps.executeUpdate() 1 ? 插入成功 : 插入失败);} catch(IOException e) {System.out.println(读取照片失败!);}} catch (ClassNotFoundException | SQLException e) { // Java7 的多异常捕获e.printStackTrace();} finally { // 释放外部资源的代码都应当放在 finally 中保证其能够得到执行try {if(con ! null !con.isClosed()) {con.close();// 5. 释放数据库连接con null; // 指示垃圾回收器可以回收该对象}}catch (SQLException e) {e.printStackTrace();}}} } 83、简述正则表达式及其用途。 在编写处理字符串的程序时经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说正则表达式就是记录文本规则的代码。 说明计算机诞生初期处理的信息几乎都是数值但是时过境迁今天我们使用计算机处理的信息更多的时候不是数值而是字符串正则表达式就是在进行字符串匹配和处理的时候最为强大的工具绝大多数语言都提供了对正则表达式的支持。 84、Java 中是如何支持正则表达式操作的 Java 中的 String 类提供了支持正则表达式操作的方法包括matches()、replaceAll()、replaceFirst()、split()。此外Java 中可以用 Pattern 类表示正则表达式对象它提供了丰富的 API 进行各种正则表达式操作请参考下面面试题的代码。 面试题 - 如果要从字符串中截取第一个英文左括号之前的字符串例如北京市(朝阳区)(西城区)(海淀区)截取结果为北京市那么正则表达式怎么写 import java.util.regex.Matcher; import java.util.regex.Pattern;class RegExpTest {public static void main(String[] args) {String str 北京市(朝阳区)(西城区)(海淀区);Pattern p Pattern.compile(.*?(?\\());Matcher m p.matcher(str);if(m.find()) {System.out.println(m.group());}} } 说明上面的正则表达式中使用了懒惰匹配和前瞻如果不清楚这些内容推荐读一下网上很有名的《正则表达式 30 分钟入门教程》。 85、获得一个类的类对象有哪些方式 方法 1类型.class例如String.class 方法 2对象.getClass()例如”hello”.getClass() 方法 3Class.forName()例如Class.forName(“java.lang.String”) 86、如何通过反射创建对象 方法 1通过类对象调用 newInstance()方法例如String.class.newInstance() 方法 2通过类对象的 getConstructor()或 getDeclaredConstructor()方法获得构造器Constructor对象并调用其 newInstance()方法创建对象 例如String.class.getConstructor(String.class).newInstance(“Hello”); 87、如何通过反射获取和设置对象私有字段的值         可以通过类对象的 getDeclaredField()方法字段Field对象然后再通过字段对象的 setAccessible(true)将其设置为可以访问接下来就可以通过 get/set 方法来获取/设置字段的值了。下面的代码实现了一个反射的工具类其中的两个静态方法分别用于获取和设置私有字段的值字段可以是基本类型也可以是对象类型且支持多级对象操作例如 ReflectionUtil.get(dog, “owner.car.engine.id”);可以获得 dog 对象的主人的汽车的引擎的 ID 号。 import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.ArrayList;import java.util.List;public class ReflectionUtil {private ReflectionUtil() {throw new AssertionError();} /** * 通过反射取对象指定字段(属性)的值 * param target 目标对象 * param fieldName 字段的名字 * throws 如果取不到对象指定字段的值则抛出异常 * return 字段的值 */ public static Object getValue(Object target, String fieldName) {Class? clazz target.getClass();String[] fs fieldName.split(\\.);try {for(int i 0; i fs.length - 1; i) {Field f clazz.getDeclaredField(fs[i]);f.setAccessible(true);target f.get(target);clazz target.getClass();}Field f clazz.getDeclaredField(fs[fs.length - 1]);f.setAccessible(true);return f.get(target);}catch (Exception e) {throw new RuntimeException(e);} } /** * 通过反射给对象的指定字段赋值 * param target 目标对象 * param fieldName 字段的名称 * param value 值 */ public static void setValue(Object target, String fieldName, Object value) {Class? clazz target.getClass();String[] fs fieldName.split(\\.);try {for(int i 0; i fs.length - 1; i) {Field f clazz.getDeclaredField(fs[i]);f.setAccessible(true);Object val f.get(target);if(val null) {Constructor? c f.getType().getDeclaredConstructor();c.setAccessible(true);val c.newInstance();f.set(target, val);}target val;clazz target.getClass();}Field f clazz.getDeclaredField(fs[fs.length - 1]);f.setAccessible(true);f.set(target, value);}catch (Exception e) {throw new RuntimeException(e);}} }88、如何通过反射调用对象的方法 import java.lang.reflect.Method;class MethodInvokeTest {public static void main(String[] args) throws Exception {String str hello;Method m str.getClass().getMethod(toUpperCase);System.out.println(m.invoke(str)); // HELLO} } 89、简述一下面向对象的”六原则一法则”。 单一职责原则一个类只做它该做的事情。单一职责原则想表达的就是”高内聚”写代码最终极的原则只有六个字”高内聚、低耦合”就如同葵花宝典或辟邪剑谱的中心思想就八个字”欲练此功必先自宫”所谓的高内聚就是一个代码模块只完成一项功能在面向对象中如果只让一个类完成它该做的事而不涉及与它无关的领域就是践行了高内聚的原则这个类就只有单一职责。我们都知道一句话叫”因为专注所以专业”一个对象如果承担太多的职责那么注定它什么都做不好。这个世界上任何好的东西都有两个特征一个是功能单一好的相机绝对不是电视购物里面卖的那种一个机器有一百多种功能的它基本上只能照相另一个是模块化好的自行车是组装车从减震叉、刹车到变速器所有的部件都是可以拆卸和重新组装的好的乒乓球拍也不是成品拍一定是底板和胶皮可以拆分和自行组装的一个好的软件系统它里面的每个功能模块也应该是可以轻易的拿到其他系统中使用的这样才能实现软件复用的目标。 开闭原则软件实体应当对扩展开放对修改关闭。在理想的状态下当我们需要为一个软件系统增加新功能时只需要从原来的系统派生出一些新类就可以不需要修改原来的任何一行代码。要做到开闭有两个要点 ①抽象是关键一个系统中如果没有抽象类或接口系统就没有扩展点 ②封装可变性将系统中的各种可变因素封装到一个继承结构中如果多个可变因素混杂在一起系统将变得复杂而换乱如果不清楚如何封装可变性可以参考《设计模式精解》一书中对桥梁模式的讲解的章节。 依赖倒转原则面向接口编程。该原则说得直白和具体一些就是声明方法的参数类型、方法的返回类型、变量的引用类型时尽可能使用抽象类型而不用具体类型因为抽象类型可以被它的任何一个子类型所替代请参考下面的里氏替换原则。 里氏替换原则任何时候都可以用子类型替换掉父类型。关于里氏替换原则的描述Barbara Liskov 女士的描述比这个要复杂得多但简单的说就是能用父类型的地方就一定能使用子类型。里氏替换原则可以检查继承关系是否合理如果一个继承关系违背了里氏替换原则那么这个继承关系一定是错误的需要对代码进行重构。例如让猫继承狗或者狗继承猫又或者让正方形继承长方形都是错误的继承关系因为你很容易找到违反里氏替换原则的场景。需要注意的是子类一定是增加父类的能力而不是减少父类的能力因为子类比父类的能力更多把能力多的对象当成能力少的对象来用当然没有任何问题。 接口隔离原则接口要小而专绝不能大而全。臃肿的接口是对接口的污染既然接口表示能力那么一个接口只应该描述一种能力接口也应该是高度内聚的。例如琴棋书画就应该分别设计为四个接口而不应设计成一个接口中的四个方法因为如果设计成一个接口中的四个方法那么这个接口很难用毕竟琴棋书画四样都精通的人还是少数而如果设计成四个接口会几项就实现几个接口这样的话每个接口被复用的可能性是很高的。Java 中的接口代表能力、代表约定、代表角色能否正确的使用接口一定是编程水平高低的重要标识。 合成聚合复用原则优先使用聚合或合成关系复用代码。通过继承来复用代码是面向对象程序设计中被滥用得最多的东西因为所有的教科书都无一例外的对继承进行了鼓吹从而误导了初学者类与类之间简单的说有三种关系Is-A 关系、Has-A 关系、Use-A 关系分别代表继承、关联和依赖。其中关联关系根据其关联的强度又可以进一步划分为关联、聚合和合成但说白了都是Has-A 关系合成聚合复用原则想表达的是优先考虑 Has-A 关系而不是 Is-A 关系复用代码原因嘛可以自己从百度上找到一万个理由需要说明的是即使在Java 的 API 中也有不少滥用继承的例子例如 Properties 类继承了 Hashtable类Stack 类继承了 Vector 类这些继承明显就是错误的更好的做法是在Properties 类中放置一个 Hashtable 类型的成员并且将其键和值都设置为字符串来存储数据而 Stack 类的设计也应该是在 Stack 类中放一个 Vector 对象来存储数据。记住任何时候都不要继承工具类工具是可以拥有并可以使用的而不是拿来继承的。 迪米特法则迪米特法则又叫最少知识原则一个对象应当对其他对象有尽可能少的了解。迪米特法则简单的说就是如何做到”低耦合”门面模式和调停者模式就是对迪米特法则的践行。对于门面模式可以举一个简单的例子你去一家公司洽谈业务你不需要了解这个公司内部是如何运作的你甚至可以对这个公司一无所知去的时候只需要找到公司入口处的前台美女告诉她们你要做什么她们会找到合适的人跟你接洽前台的美女就是公司这个系统的门面。再复杂的系统都可以为用户提供一个简单的门面Java Web 开发中作为前端控制器的 Servlet 或 Filter 不就是一个门面吗浏览器对服务器的运作方式一无所知但是通过前端控制器就能够根据你的请求得到相应的服务。调停者模式也可以举一个简单的例子来说明例如一台计算机CPU、内存、硬盘、显卡、声卡各种设备需要相互配合才能很好的工作但是如果这些东西都直接连接到一起计算机的布线将异常复杂在这种情况下主板作为一个调停者的身份出现它将各个设备连接在一起而不需要每个设备之间直接交换数据这样就减小了系统的耦合度和复杂度如下图所示。迪米特法则用通俗的话来将就是不要和陌生人打交道如果真的需要找一个自己的朋友让他替你和陌生人打交道。 要想了解更多 千题千解·Java面试宝典_时光の尘的博客-CSDN博客
http://www.yutouwan.com/news/316828/

相关文章:

  • 国外网站策划网站 微信开发
  • 企业如何做网站收款网页制作培训苏州
  • 杭州高瑞网站建设企业年报网上申报系统
  • 网站建设万禾西安关键词快速排名
  • 企业网站的作用想做个网站 在哪买域名和空间
  • 网站建设学习 服务器如何免费建购物网站
  • DW网站建设出现哪些问题建网站那种服务器好
  • 网站设计的意义做网站可以做什么
  • 网站建设制作公司景区网站模板
  • 大型门户网站建设效果好吗局域网内做网站
  • 网站流量查询站长之家企业网站推广的形式有哪些
  • 建微信网站南通做网站的公司
  • 广州网站建设培训班中文域名网站有哪些
  • 怎么增加网站的权重创办一个app需要多少钱
  • 北京seo网站诊断黄页引流推广链接
  • 网站数据库配置如何在局域网建立网站
  • 优秀企业网站躺平设计家官网
  • 蜘蛛云建站网站石家庄住房和城乡建设部网站
  • 网页设计与制作txtseo优化网站教程百度
  • 建设网站的价格是多少钱学院网站规划方案
  • 网站雪花代码什么公司做企业网站
  • 陕西省建设厅官方网站试客类网站开发
  • 免费电子商务网站建设网站设计简单吗
  • 巧克力网站模板微信管理员怎么设置
  • 电影网站网页设计实训报告电子上网站建设与维护
  • WordPress添加QQ咨询网站结构 seo
  • 重庆建站免费模板wordpress4.7安装
  • 政务网站建设云计算中心html精美登录界面源码
  • 2023设计院裁员惨烈程度搜索引擎seo优化平台
  • 海口网站建设服务网页设计学生作业模板