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

网站建设建设公司资质要求免费出装修效果图

网站建设建设公司资质要求,免费出装修效果图,被关闭的设计网站,网站导航一定要一样吗目录 前言 1.11 int和Integer有什么区别#xff0c;二者在做运算时会得到什么结果#xff1f; 1.12 说一说你对面向对象的理解 1.13 面向对象的三大特征是什么#xff1f; 1.14 封装的目的是什么#xff0c;为什么要有封装#xff1f; 1.15 说一说你对多态的理解 1… 目录 前言 1.11 int和Integer有什么区别二者在做运算时会得到什么结果 1.12 说一说你对面向对象的理解 1.13 面向对象的三大特征是什么 1.14 封装的目的是什么为什么要有封装 1.15 说一说你对多态的理解 1.16 Java中的多态是怎么实现的 1.17 Java为什么是单继承为什么不能多继承 1.18 说一说重写与重载的区别 1.19 构造方法能不能重写 1.20 介绍一下Object类中的方法 1.21 说一说hashCode()和equals()的关系 1.22 为什么要重写hashCode()和equals() 1.23 和equals()有什么区别 1.24 String类有哪些方法 1.25 String可以被继承吗 1.26 说一说String和StringBuffer有什么区别 1.27 说一说StringBuffer和StringBuilder有什么区别 1.28 使用字符串时new和推荐使用哪种方式 1.29 说一说你对字符串拼接的理解 1.30 两个字符串相加的底层是如何实现的 总结 前言 本文主要介绍了Java相关的面试题目。 1.11 int和Integer有什么区别二者在做运算时会得到什么结果 int是基本数据类型Integer是int的包装类。二者在做运算时Integer会自动拆箱为int类型然后再进行比较。届时如果两个int值相等则返回true否则就返回false。 1.12 说一说你对面向对象的理解 面向对象是一种更优秀的程序设计方法它的基本思想是使用类、对象、继承、封装、消息等基本概念进行程序设计。它从现实世界中客观存在的事物出发来构造软件系统并在系统构造中尽可能运用人类的自然思维方式强调直接以现实世界中的事物为中心来思考认识问题并根据这些事物的本质特点把它们抽象地表示为系统中的类作为系统的基本构成单元这使得软件系统的组件可以直接映像到客观世界并保持客观世界中事物及其相互关系的本来面貌。 面向对象是一种设计思想可以理解为任何事物都是类而对象指的是具体的事物面向对象的三大特性封装、继承和多态。 1.13 面向对象的三大特征是什么 面向对象的程序设计方法具有三个基本特征封装、继承、多态。其中封装指的是将对象的实现细节隐藏起来然后通过一些公用方法来暴露该对象的功能继承是面向对象实现软件复用的重要手段当子类继承父类后子类作为一种特殊的父类将直接获得父类的属性和方法多态指的是子类对象可以直接赋给父类变量但运行时依然表现出子类的行为特征这意味着同一个类型的对象在执行同一个方法时可能表现出多种行为特征。 抽象也是面向对象的重要部分抽象就是忽略一个主题中与当前目标无关的那些方面以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题而只是考虑部分问题。例如需要考察Person对象时不可能在程序中把Person的所有细节都定义出来通常只能定义Person的部分数据、部分行为特征而这些数据、行为特征是软件系统所关心的部分。 1.14 封装的目的是什么为什么要有封装 封装是面向对象编程语言对客观世界的模拟在客观世界里对象的状态信息都被隐藏在对象内部外界无法直接操作和修改。对一个类或对象实现良好的封装可以实现以下目的 隐藏类的实现细节让使用者只能通过事先预定的方法来访问数据从而可以在该方法里加入控制逻辑限制对成员变量的不合理访问可进行数据检查从而有利于保证对象信息的完整性便于修改提高代码的可维护性。 为了实现良好的封装需要从两个方面考虑 将对象的成员变量和实现细节隐藏起来不允许外部直接访问把方法暴露出来让方法来控制对这些成员变量进行安全的访问和操作。 封装实际上有两个方面的含义把该隐藏的隐藏起来把该暴露的暴露出来。这两个方面都需要通过使用Java提供的访问控制符来实现。 1.15 说一说你对多态的理解 因为子类其实是一种特殊的父类因此Java允许把一个子类对象直接赋给一个父类引用变量无须任何类型转换或者被称为向上转型向上转型由系统自动完成。 当把一个子类对象直接赋给父类引用变量时例如 BaseClass obj new SubClass();这个obj引用变量的编译时类型是BaseClass而运行时类型是SubClass当运行时调用该引用变量的方法时其方法行为总是表现出子类方法的行为特征而不是父类方法的行为特征这就可能出现相同类型的变量、调用同一个方法时呈现出多种不同的行为特征这就是多态。 Java多态性是指同一个方法名在不同的对象中有不同的实现Java多态性的实现依靠两个核心概念继承和方法重写。 1.16 Java中的多态是怎么实现的 多态的实现离不开继承在设计程序时我们可以将参数的类型定义为父类型。在调用程序时则可以根据实际情况传入该父类型的某个子类型的实例这样就实现了多态。对于父类型可以有三种形式即普通的类、抽象类、接口。对于子类型则要根据它自身的特征重写父类的某些方法或实现抽象类/接口的某些抽象方法。 1.17 Java为什么是单继承为什么不能多继承 首先Java是单继承的指的是Java中一个类只能有一个直接的父类。Java不能多继承则是说Java中一个类不能直接继承多个父类。 其次Java在设计时借鉴了C的语法而C是支持多继承的。Java语言之所以摒弃了多继承的这项特征是因为多继承容易产生混淆。比如两个父类中包含相同的方法时子类在调用该方法或重写该方法时就会迷惑。 准确来说Java是可以实现多继承的。因为尽管一个类只能有一个直接父类但是却可以有任意多个间接的父类。这样的设计方式避免了多继承时所产生的混淆。 原因 继承层次的清晰性如果一个类可以继承自多个父类就会形成一个复杂的继承层次结构这会增加代码的复杂度和维护难度。单继承可以避免这个问题让继承层次更加清晰简洁。内部类的实现Java内部类的实现是通过编译器生成一个新的类这个新的类会自动继承外部类的某些属性和方法。如果一个类可以继承自多个父类那么内部类的实现就会变得非常复杂。避免冲突如果一个类可以继承自多个父类那么可能会出现多个父类中包含同名方法或属性的情况这就会导致冲突和歧义。单继承可以避免这个问题让代码更加清晰易懂。接口的实现Java中的接口可以被类实现而一个类可以实现多个接口。这种设计可以达到类似多继承的效果但避免了上述问题。 1.18 说一说重写与重载的区别 重载发生在同一个类中若多个方法之间方法名相同、参数列表不同则它们构成重载的关系。重载与方法的返回值以及访问修饰符无关即重载的方法不能根据返回类型进行区分。 重写发生在父类子类中若子类方法想要和父类方法构成重写关系则它的方法名、参数列表必须与父类方法相同。另外返回值要小于等于父类方法抛出的异常要小于等于父类方法访问修饰符则要大于等于父类方法。还有若父类方法的访问修饰符为private则子类不能对其重写。 1.19 构造方法能不能重写 构造方法不能重写。因为构造方法需要和类保持同名而重写的要求是子类方法要和父类方法保持同名。如果允许重写构造方法的话那么子类中将会存在与类名不同的构造方法这与构造方法的要求是矛盾的。 1.20 介绍一下Object类中的方法 Object类提供了如下几个常用方法 Class? getClass()返回该对象的运行时类。boolean equals(Object obj)判断指定对象与该对象是否相等。int hashCode()返回该对象的hashCode值。在默认情况下Object类的hashCode()方法根据该对象的地址来计算。但很多类都重写了Object类的hashCode()方法不再根据地址来计算其hashCode()方法值。String toString()返回该对象的字符串表示当程序使用System.out.println()方法输出一个对象或者把某个对象和字符串进行连接运算时系统会自动调用该对象的toString()方法返回该对象的字符串表示。Object类的toString()方法返回 运行时类名十六进制hashCode值 格式的字符串但很多类都重写了Object类的toString()方法用于返回可以表述该对象信息的字符串。 另外Object类还提供了wait()、notify()、notifyAll()这几个方法通过这几个方法可以控制线程的暂停和运行。Object类还提供了一个clone()方法该方法用于帮助其他对象来实现“自我克隆”所谓“自我克隆”就是得到一个当前对象的副本而且二者之间完全隔离。由于该方法使用了protected修饰因此它只能被子类重写或调用。 1.21 说一说hashCode()和equals()的关系 hashCode()用于获取哈希码散列码eauqls()用于比较两个对象是否相等它们应遵守如下规定 如果两个对象相等则它们必须有相同的哈希码。如果两个对象有相同的哈希码则它们未必相等。 如果两个对象的equals()方法返回true那么它们被认为是相等的。在Java中对于相等的对象它们在哈希表、集合等数据结构中通常需要被认为是相同的元素因此需要保证它们的hashCode()方法返回相同的值。 扩展 在Java中Set接口代表无序的、元素不可重复的集合HashSet则是Set接口的典型实现。 当向HashSet中加入一个元素时它需要判断集合中是否已经包含了这个元素从而避免重复存储。由于这个判断十分的频繁所以要讲求效率绝不能采用遍历集合逐个元素进行比较的方式。实际上HashSet是通过获取对象的哈希码以及调用对象的equals()方法来解决这个判断问题的。 HashSet首先会调用对象的hashCode()方法获取其哈希码并通过哈希码确定该对象在集合中存放的位置。假设这个位置之前已经存了一个对象则HashSet会调用equals()对两个对象进行比较。若相等则说明对象重复此时不会保存新加的对象。若不等说明对象不重复但是它们存储的位置发生了碰撞此时HashSet会采用链式结构在同一位置保存多个对象即将新加对象链接到原来对象的之后。之后再有新添加对象也映射到这个位置时就需要与这个位置中所有的对象进行equals()比较若均不相等则将其链到最后一个对象之后。 1.22 为什么要重写hashCode()和equals() Object类提供的equals()方法默认是用来进行比较的也就是说只有两个对象是同一个对象时才能返回相等的结果。而实际的业务中我们通常的需求是若两个不同的对象它们的内容是相同的就认为它们相等。鉴于这种情况Object类中equals()方法的默认实现是没有实用价值的所以通常都要重写。 由于hashCode()与equals()具有联动关系参考“说一说hashCode()和equals()的关系”一题所以equals()方法重写时通常也要将hashCode()进行重写使得这两个方法始终满足相关的约定。 1.23 和equals()有什么区别 运算符 作用于基本数据类型时是比较两个数值是否相等作用于引用数据类型时是比较两个对象的内存地址是否相同即判断它们是否为同一个对象 equals()方法 没有重写时Object默认以 来实现即比较两个对象的内存地址是否相同进行重写后一般会按照对象的内容来进行比较若两个对象内容相同则认为对象相等否则认为对象不等。 1.24 String类有哪些方法 String类是Java最常用的API它包含了大量处理字符串的方法比较常用的有 char charAt(int index)返回指定索引处的字符String substring(int beginIndex, int endIndex)从此字符串中截取出一部分子字符串String[] split(String regex)以指定的规则将此字符串分割成数组String trim()删除字符串前导和后置的空格int indexOf(String str)返回子串在此字符串首次出现的索引int lastIndexOf(String str)返回子串在此字符串最后出现的索引boolean startsWith(String prefix)判断此字符串是否以指定的前缀开头boolean endsWith(String suffix)判断此字符串是否以指定的后缀结尾String toUpperCase()将此字符串中所有的字符大写String toLowerCase()将此字符串中所有的字符小写String replaceFirst(String regex, String replacement)用指定字符串替换第一个匹配的子串String replaceAll(String regex, String replacement)用指定字符串替换所有的匹配的子串。 1.25 String可以被继承吗 String类由final修饰所以不能被继承。 扩展 在Java中String类被设计为不可变类主要表现在它保存字符串的成员变量是final的。 Java 9之前字符串采用char[]数组来保存字符即 private final char[] valueJava 9做了改进采用byte[]数组来保存字符即 private final byte[] value 之所以要把String类设计为不可变类主要是出于安全和性能的考虑可归纳为如下4点。 由于字符串无论在任何 Java 系统中都广泛使用会用来存储敏感信息如账号密码网络路径文件处理等场景里保证字符串 String 类的安全性就尤为重要了如果字符串是可变的容易被篡改那我们就无法保证使用字符串进行操作时它是安全的很有可能出现 SQL 注入访问危险文件等操作。在多线程中只有不变的对象和值是线程安全的可以在多个线程中共享数据。由于 String 天然的不可变当一个线程”修改“了字符串的值只会产生一个新的字符串对象不会对其他线程的访问产生副作用访问的都是同样的字符串数据不需要任何同步操作。字符串作为基础的数据结构大量地应用在一些集合容器之中尤其是一些散列集合在散列集合中存放元素都要根据对象的 hashCode() 方法来确定元素的位置。由于字符串 hashcode 属性不会变更保证了唯一性使得类似 HashMapHashSet 等容器才能实现相应的缓存功能。由于 String 的不可变避免重复计算 hashcode只要使用缓存的 hashcode 即可这样一来大大提高了在散列集合中使用 String 对象的性能。当字符串不可变时字符串常量池才有意义。字符串常量池的出现可以减少创建相同字面量的字符串让不同的引用指向池中同一个字符串为运行时节约很多的堆内存。若字符串可变字符串常量池失去意义基于常量池的 String.intern() 方法也失效每次创建新的字符串将在堆内开辟出新的空间占据更多的内存。 因为要保证String类的不可变那么将这个类定义为final的就很容易理解了。如果没有final修饰那么就会存在String的子类这些子类可以重写String类的方法强行改变字符串的值这便违背了String类设计的初衷。 1.26 说一说String和StringBuffer有什么区别 String类是不可变类即一旦一个String对象被创建以后包含在这个对象中的字符序列是不可改变的直至这个对象被销毁。 StringBuffer对象则代表一个字符序列可变的字符串当一个StringBuffer被创建以后通过StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字符串对象的字符序列。一旦通过StringBuffer生成了最终想要的字符串就可以调用它的toString()方法将其转换为一个String对象。 解释 在Java中String类被设计为不可变类这意味着一旦一个String对象被创建以后它的值是不可改变的。虽然String类提供了一些方法例如concat()、substring()、replace()等看起来可以改变其序列但实际上这些方法并不会修改String对象本身的值而是返回一个新的String对象。 当我们调用String类提供的方法修改字符串时实际上是创建了一个新的String对象并将修改后的字符串赋值给这个新对象。原来的String对象仍然保持不变这就是为什么String对象是不可变的。例如下面的代码 String s1 Hello; String s2 s1.concat( World); 1.27 说一说StringBuffer和StringBuilder有什么区别 StringBuffer、StringBuilder都代表可变的字符串对象它们有共同的父类 AbstractStringBuilder并且两个类的构造方法和成员方法也基本相同。不同的是StringBuffer是线程安全的而StringBuilder是非线程安全的所以StringBuilder性能略高。一般情况下要创建一个内容可变的字符串建议优先考虑StringBuilder类。 1.28 使用字符串时new和推荐使用哪种方式 先看看 hello 和 new String(hello) 的区别 当Java程序直接使用 hello 的字符串直接量时JVM将会使用常量池来管理这个字符串当使用 new String(hello) 时JVM会先使用常量池来管理 hello 直接量再调用String类的构造器来创建一个新的String对象新创建的String对象被保存在堆内存中。 显然采用new的方式会多创建一个对象出来会占用更多的内存所以一般建议使用直接量的方式创建字符串。 1.29 说一说你对字符串拼接的理解 拼接字符串有很多种方式其中最常用的有4种下面列举了这4种方式各自适合的场景。 运算符如果拼接的都是字符串直接量则适合使用 运算符实现拼接StringBuilder如果拼接的字符串中包含变量并不要求线程安全则适合使用StringBuilderStringBuffer如果拼接的字符串中包含变量并且要求线程安全则适合使用StringBufferString类的concat方法如果只是对两个字符串进行拼接并且包含变量则适合使用concat方法 扩展 采用 运算符拼接字符串时 如果拼接的都是字符串直接量则在编译时编译器会将其直接优化为一个完整的字符串和你直接写一个完整的字符串是一样的所以效率非常的高。如果拼接的字符串中包含变量则在编译时编译器采用StringBuilder对其进行优化即自动创建StringBuilder实例并调用其append()方法将这些字符串拼接在一起效率也很高。但如果这个拼接操作是在循环中进行的那么每次循环编译器都会创建一个StringBuilder实例再去拼接字符串相当于执行了 new StringBuilder().append(str)所以此时效率很低。 采用StringBuilder/StringBuffer拼接字符串时 StringBuilder/StringBuffer都有字符串缓冲区缓冲区的容量在创建对象时确定并且默认为16。当拼接的字符串超过缓冲区的容量时会触发缓冲区的扩容机制即缓冲区加倍。缓冲区频繁的扩容会降低拼接的性能所以如果能提前预估最终字符串的长度则建议在创建可变字符串对象时放弃使用默认的容量可以指定缓冲区的容量为预估的字符串的长度。 采用String类的concat方法拼接字符串时 concat方法的拼接逻辑是先创建一个足以容纳待拼接的两个字符串的字节数组然后先后将两个字符串拼到这个数组里最后将此数组转换为字符串。在拼接大量字符串的时候concat方法的效率低于StringBuilder。但是只拼接2个字符串时concat方法的效率要优于StringBuilder。并且这种拼接方式代码简洁所以只拼2个字符串时建议优先选择concat方法。 1.30 两个字符串相加的底层是如何实现的 如果拼接的都是字符串直接量则在编译时编译器会将其直接优化为一个完整的字符串和你直接写一个完整的字符串是一样的。 如果拼接的字符串中包含变量则在编译时编译器采用StringBuilder对其进行优化即自动创建StringBuilder实例并调用其append()方法将这些字符串拼接在一起。 总结 本文主要介绍了Java相关的面试题目。
http://www.zqtcl.cn/news/167204/

相关文章:

  • 购物网站项目建设内容有啥网站是专做时尚穿搭
  • 网上下载的网站模板怎么用wordpress 注册密码
  • 网站建设免费国外撤销网站备案申请书
  • 佛山做网站那家好网站建设公司如何盈利
  • 傻瓜建网站设计感网站
  • 北京网站优化软件陕西省建筑信息平台
  • 广州越秀建网站济南房产网新开楼盘
  • 线上咨询预约网站建设方案保定外贸网站制作
  • 网站流量如何增加提高工作效率的措施
  • 龙湖镇华南城网站建设.net 网站开发书籍
  • 域名费用和网站服务器费用是同样的吗推广营销方案
  • 安徽网站设计方案中文外贸网站有哪些
  • 衡阳手机网站设计响应式网站做多大的尺寸
  • 海尔电子商务网站建设预算灵台县门户网
  • 四川网站建设设计公司排名开发公司与建筑公司合作协议
  • 江西智能网站建设嘉定注册公司
  • 海口网站建设联系方式十大免费软文推广平台
  • 石碣镇做网站帮别人做网站开价
  • 站长 网站ip客户都不愿意做网站
  • 网站开发和软件开发哪个难网站备案账号
  • 2昌平区网站建设安徽盛绿建设网站
  • 商务网站建设目的天津建设网站需要的费用
  • flash 网站头部wordpress支持大文件上传
  • 网站开发方式的选择凡客设计
  • 常德建设网站如何查询某个网站的设计公司
  • wordpress 仿站教程学校ui设计培训
  • 南昌模板建站定制网站合肥瑶海区网站建设价格
  • 奥尔马手表官方网站导出wordpress文章
  • 网站栏目内容和功能手机网站建设 如何获得更好的排名
  • 网站运营推广难做常德网警