包装类、代码块、单例模式、Final、抽象类

举报
brucexiaogui 发表于 2021/12/30 01:30:04 2021/12/30
【摘要】 包装类、代码块、单例模式、Final、抽象类   基本数据类型包装类 Integer Character 其他的都是将首字母大写; 包装类和基本类型之间的转换: Integer int Integer i = new Integer(int value); int i2 = i.intV...

包装类、代码块、单例模式、Final、抽象类

 


  
  1. 基本数据类型包装类
  2. Integer Character
  3. 其他的都是将首字母大写;
  4. 包装类和基本类型之间的转换:
  5. Integer int
  6. Integer i = new Integer(int value);
  7. int i2 = i.intValue();
  8. 基本数据类型和String转换
  9. String -->int
  10. static int parseInt(String s)
  11. int i = Integer.parseInt("123");
  12. int ->String
  13. String 类valueOf(int val);
  14. String str = String.valueOf(123);
  15. 装箱和拆箱:
  16. java5开始出现自动装箱和拆箱;
  17. 自动装箱:
  18. 可以直接把一个基本数据类型的值直接赋给它所对应的包装类对象;
  19. Integer i = 17;
  20. 自动拆箱:把包装类对象直接赋给它所对应的基本类型的一个变量
  21. int i2 = new Integer(2);
  22. Object是所有类的超级父类,
  23. Object的对象可以接受一切数据;
  24. 享元模式:
  25. Byte,Short,Integer,Long缓存了一个区间的数据;[-128,127]看源代码
  26. Integer i1 = 123;
  27. Integer i2 = 123;
  28. i1 == i2;//true
  29. new Integer(123) == new Integer(123);//false
  30. Object类:就是描述对象的一个类
  31. 是超级父类;
  32. 可以接受一切数据,包括数组;
  33. Object o = {1,2,3};
  34. Object o = new int[]{1,2,3};
  35. boolean equals(Object otherObj);
  36. 就是那当前对象和otherObj相比较;
  37. 默认情况下,比较的是 内存里的地址,此时和 == 一样;
  38. 一般要求子类根据自身情况覆写该方法,
  39. String 类覆写 equals方法
  40. Integer 类也覆写了 equals方法
  41. int hashCode();//返回对象的一个十进制的hash值,每个对象的hashCode都不一样
  42. String toString();//把对象转成String类型, 描述对象信息
  43. 默认情况下, 类的全限定名 + @ + Integer.toHexString(this.hashCode());
  44. 一般要求子类覆写该方法
  45. 平时我们打印对象,其实打印的是对象的toString方法,也就说在底层该对象会去调用toString方法
  46. class Person{
  47. String name;
  48. int age;
  49. public Person(String name,int age)
  50. {
  51. this.name = name;
  52. this.age = age;
  53. }
  54. public String toString()
  55. {
  56. return this.name +", " + this.age;
  57. }
  58. }
  59. ..main..
  60. {
  61. System.out.println(new Person("Will",17));
  62. System.out.println(new Person("Lucy",16));
  63. }
  64. 代码块:
  65. 1.普通(局部)代码块,写在方法;
  66. 2.构造代码: 类里面,方法外面, 特点: 先于构造方法的执行,每次创建对象,都会执行
  67. 3.静态代码块: static 修饰的构造代码块, 特点: 优先于主方法的执行,优先于构造代码块执行,只执行一次, 可以用来给静态变量赋值;
  68. 4.同步代码块
  69. 单例模式:
  70. 保证项目中的一个类在运行期间有且只有一个实例对象;
  71. //1. 把构造方法给私有化,保证外界不能创建对象
  72. //2. 自身在内部先创建一个对象,再使用private修饰起来,
  73. //3. 向外暴露一个全局的静态的方法用于返回内部创建的对象;
  74. 因为静态成员只能访问静态成员,那么此时必须把对象使用static修饰,
  75. 饿汉式:
  76. class Singleton
  77. {
  78. private Singleton(){}
  79. private static final Singleton instance = new Singleton();
  80. //线程安全
  81. public static Singleton getInstance()
  82. {
  83. return instance;
  84. }
  85. }
  86. 懒汉式:
  87. class Singleton
  88. {
  89. private Singleton(){}
  90. private static final Singleton instance = null;
  91. //线程不安全的
  92. public static Singleton getInstance()
  93. {
  94. if(instance == null)
  95. {
  96. instance = new Singleton()
  97. }
  98. return instance;
  99. }
  100. }
  101. final:
  102. 表示最终的;
  103. 可以修饰 类,方法,变量;
  104. final 修饰的类 表示太监类,不能被继承;基本数据类型包装类全是
  105. final 修饰的方法 表示 不能被子类覆写 ;
  106. final 修饰的变量:
  107. 常量: 常量名大写,若是多个单词组成,单词之间使用下划线隔开;
  108. 全局常量: public static final 修饰的变量
  109. 常量只能赋值一次
  110. 若是引用类型的常量,表示 引用对象的地址不能变,但是对象的内容是可以改变的;
  111. 方法里的内部类,只能访问方法里使用 final 修饰的变量;
  112. 抽象类:
  113. 使用 abstract 修饰的类, 一般抽象类都应该包含抽象方法,但不是必须的;
  114. 若一个类有抽象方法,那么该类必须是抽象类;
  115. 不能创建对象(不能 new),其他的换个普通类一样
  116. 可以包含普通方法;
  117. 什么时候使用抽象方法:
  118. 父类定了子类应该具备的行为,但是 具体行为的实现必须得有子类来完成;
  119. 抽象方法:
  120. 使用 abstract 修饰的方法,
  121. 只有方法的申明,没有方法的具体实现;(交给子类去实现)
  122. 一般建议把 abstract 放在修饰符前面;
  123. 抽象类必须有子类,
  124. 而且子类必须全部覆写抽象类中的抽象方法,二者,子类也作为抽象类;
  125. 青年(Person)都有吃饭(eat)和坐(set)的行为;
  126. 但是文艺青年(ArtMan)和普通青年(NormalMan)各自的的吃饭和坐的行为的具体表现都不一样;
  127. abstract class Person{
  128. abstract void eat();
  129. abstract void set();
  130. }
  131. class ArtMan extends Person{
  132. void eat(){
  133. System.out.println("一根一根的吃");
  134. }
  135. void set(){
  136. }
  137. }
  138. class NormalMan extends Person
  139. {
  140. void eat(){
  141. System.out.println("一口一口的吃");
  142. }
  143. void set(){
  144. }
  145. }
  146. class B2 extends Person
  147. {
  148. void eat(){
  149. System.out.println("一坨一坨的吃");
  150. }
  151. void set(){
  152. System.out.println("腿搅成麻花儿");
  153. }
  154. void show(){System.out.println("腿搅成麻花儿");
  155. }
  156. }
  157. ...mian..
  158. {
  159. Person p = new B2();
  160. p.eat();//实际调用的是B2里的方法
  161. p.set();
  162. //p.show();//编译通不过,在Person里找不到
  163. }

 

文章来源: brucelong.blog.csdn.net,作者:Bruce小鬼,版权归原作者所有,如需转载,请联系作者。

原文链接:brucelong.blog.csdn.net/article/details/81625795

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。