/*包装类*/ /*  byte   Byte  short   Short  int    Integer  long   Long  char   Character  float   Float  double   Double  boolean   Boolean

基本数据和其包装类:作为成员变量时的默认初始值的差异:  int  -- Integer  0        null   */ class WrapDemo {  public static void main(String[] args)  {

//包装类对象   /*    把基本数据类型包装类除了 Character类之外,其他的7个都有两个构造方法

基本数据类型xx;  xx对应包装类的构造方法:         public  xx的包装类(xx x){}         public  xx的包装类(String x){}

这里传递的x值表示该包装类型对象的值;         Integer i = new Integer(17);//i  = 17         i  = new Integer("123");// i = 123                  使用第二种构造方法可能会引发 类型转换异常;                 Integer:凡是涉及到整数的操作,Integer类里都有相应的方法来处理;

Character类没有public  Character(String c){}

*/       Boolean b = new Boolean("tRuE");//除了true之外(不区分大小写),其他的默认都是false

/*    static Boolean FALSE       对应基值 false 的 Boolean 对象。    static Boolean TRUE          对应基值 true 的 Boolean 对象。

*/   b = Boolean.FALSE;//FALSE == new  Boolean(false);   System.out.println("b= " + b);

//十进制和  二进制,八进制,十六进制的转换

/*   Integer:    有3个静态的方法可以完成:     static String toBinaryString(int i)      以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。     static String toHexString(int i)      以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式。     static String toOctalString(int i)      以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。     */   System.out.println(Integer.toBinaryString(-100));      //byte byteValue() 以 byte 类型返回该 Integer 的值。      Integer i  = new Integer(17);   byte by   =  i.byteValue();   System.out.println(by);      /*     int compareTo(Integer anotherInteger)在数字上比较两个 Integer 对象。   */

System.out.println(i.compareTo(new Integer(12)));//1   /*     int intValue()  以 int 类型返回该 Integer 的值。

包装类 -->基本类型:      调用xxxValue(); int ret  = age.intValue();

基本类型 -->其包装类

new  包装类(基本类型的值); new Integer(17);   */

int age = i.intValue();

/*    static int parseInt(String s)  将字符串参数作为有符号的十进制整数进行解析。

String  --> 基本类型   */      age = Integer.parseInt("17");   /*    static Integer valueOf(int i)   基本类型 -->包装类类型 和 new Integer(int i);       返回一个表示指定的 int 值的 Integer 实例。    static Integer valueOf(String s)  String -->  Integer: new  Integer(String s);       返回保存指定的 String 的值的 Integer 对象。

*/   //static boolean isDigit(char ch) 确定指定字符是否为数字。 //判断的是0  ~9之间的数字   System.out.println(Character.isDigit('A'));//false      char c = '8';//   System.out.println(Character.isDigit(c));

String s = "1214542S";      System.out.println("----------------");   int i1 = 12;   int i2 = 12;

System.out.println(i1 == i2);//相等

Integer in1  = new Integer(12);   Integer in2  = new Integer(12);

System.out.println(in1 == in2);//不相等的,两个对象

in1 = 12;   in2 = 12;   System.out.println("--->"+(in1 == in2));//true      /*    这里涉及到了一个享元模式: 只缓存[-128,127]区间的数字,Byte,Short,Integer,Long 都是一样的   */   in1 = 128;   in2 = 128;   System.out.println("--->"+(in1 == in2));//true

/*    装箱和拆箱:

int  Integer    装箱: 把基本数据类型 --> 它所对应的包装类类型      Integer i = new Integer(int value);

拆箱: 包装类类型   --> 它所对应的把基本数据类型       int i2  = i.intValue();

Java5开始提供了自动装箱和拆箱的功能;    自动装箱:  可以把一个基本数据类型的值直接赋给 其包装类对象       Integer age = 17;

Object就可以接受一切类型了;  Object o = false;  o = 123;         自动拆箱:  可以把一个包装类对象直接赋给一个基本数据类型的变量       int age2  = age;

*/

Integer age2 =  17;

int age3 = age2;

} }

class ObjectDemo {   /*   类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。  */  public static void main(String[] args)  {

String[][] arr = {{"A"}};

Object o = arr;   System.out.println(arr.getClass());   /*    常见方法:

boolean equals(Object obj) 指示其他某个对象是否与此对象“相等”。            equlas默认的比较的是  堆里地址,和 == 一样,都是比较地址

有的时候我们不需要比较地址,比如有的时候我们不关心地址,只关心值,咋办?       此时就要求子类去覆写该方法

比如Integer类:           public boolean equals(Object obj) {          if (obj instanceof Integer) {           return this.value == ((Integer)obj).intValue();          }          return false;         }

int hashCode()  返回该对象的哈希码值。

String toString()  返回该对象的字符串表示。

*/

//equals

System.out.println(new Integer(1).equals(new Integer(1)));//true   System.out.println(new Object().equals(new Object()));//false

System.out.println(new String() == new String());//false   System.out.println(new String().equals(new String()));//true

System.out.println(new Object().hashCode());//每个对象的hashCode都会不一样   System.out.println(new Object().hashCode());

Object o1 = new Object();

System.out.println(o1.hashCode());   System.out.println(o1.hashCode());      /*     String toString()  返回该对象的字符串表示     以字符串的形式描述了对象状态;//描述对象

hexHashCode    我们打印对象,其实打印的是对象的toString()方法        对象类型的全限定名 + @ + 对象十六进制的hashCode

一般情况下建议每个类都覆写toString()

对象 --> String

本质上打印对象,其实就是在打印对象的toString()方法   */   ObjectDemo od = new ObjectDemo();   System.out.println(od);//ObjectDemo@c05d3b   System.out.println(od.toString());//ObjectDemo@c05d3b      int hashCode = od.hashCode();//   //static String toHexString(int i) 转16进制   String hexHashCode = Integer.toHexString(hashCode);

System.out.println(hexHashCode);

System.out.println(new Person("Will","男",17).toString());   System.out.println(new Person("Lucy","女",15));

Object p = new java.util.Date();

System.out.println("p.getClass()-->"+p.getClass().getName());  } }

class  Person {

private String name;  private String gender;

private Integer age;     public Person(String name,String gender,Integer age)  {   this.name = name;   this.gender  = gender;   this.age  = age;  }    @Override//表示覆写  public String toString()  {   return "[ name= " + this.name +",性别= " + this.gender +", 年龄= " + this.age +"]";  }   }

/*
 普通代码块
*/
class CodeDemo1
{
 public static void main(String[] args)
 { 
  {
  
   //普通代码块
   int a = 10;
   System.out.println("--->" + a);
  }
  //System.out.println(a);//访问不到
 }
}

/*  构造代码块:  定义在 类里面,方法外面:

直接写在类中的代码块:     优先于构造方法执行,每次实例化对象之前都会执行构造代码块。 */ class CodeDemo2 {

public CodeDemo2(){   System.out.println("构造方法");  }

{   System.out.println("构造代码块");  }

public static void main(String[] args)  {   System.out.println("Main");   new CodeDemo2();   new CodeDemo2();   new CodeDemo2();   System.out.println("Hello World!");  } }

/*  静态代码块: 就是在构造代码块之前,加上一个 static关键字:

使用static 修饰的构造代码块:  优先于主方法执行,优先于构造代码块执行,不管有创建多少对象,静态代码块只执行一次,可用于给静态变量赋值; */

class CodeDemo3 {

static String name ;

public CodeDemo3()  {   System.out.println("构造方法!");   }

{   System.out.println("构造代码块!");  }

static {   name = "AA";   System.out.println("静态代码块!");  }         public static void main(String[] args)  {    System.out.println("Main!");   new CodeDemo3();   new CodeDemo3();   System.out.println("end");  }   }

import java.lang.reflect.*;

class Cat {    /*   使用private修饰构造方法之后,在该类之外的地方就不能再创建对象了.    结论不一定,因为要把反射除开;

//项目开发经常有这样的一个需求:

某一个对象,只需要存在一个就OK了;  有且只有一个对象;

古代皇帝,

*/  private Cat(){   //super();   System.out.println("cat");  } }

class PrivateDemo {

public static void main(String[] args) throws Exception  {      Class<Cat> clz  = Cat.class; //得到class对象的三种方式之一

Constructor<Cat> c = clz.getDeclaredConstructor();//得到私有私有的构造函数      c.setAccessible(true);//暴力反射   --   私有的东东就可以在外部进行访问了   Cat cat = c.newInstance();//实际上是调用类里面的无参构造方法创建对象

System.out.println(cat);  } }

/*  单例模式:  保证整个项目运作期间某一个对象有且只有一个;

单例模式:       1.饿汉式     2.懒汉式 */

class Singleton {  //饿汉式----每次调用的时候不用做创建,直接返回已经创建好的实例。这样虽然节省了时间,但是却占用了空间,实例本身为static的,会一直在内存中带着  private static final  Singleton instance;// = new Singleton();

static {   instance = new Singleton();  }  public  static  Singleton  getInstance()  {   return instance;  }  //把构造方法私有化,不允许外界再创建对象  private Singleton(){} }

class Singleton2 {  //懒汉式       懒汉式则是判断,在用的时候才加载,会影响程序的速度 ,线程不安全的在并发的情况下。如果两个线程,我们称它们为线程1和线程2,在同一时间调用getInstance()方法,如果线程1先进入if块,然后线程2进行控制,那么就会有两个实例被创建。  private static Singleton2 instance = null;  public  static  Singleton2  getInstance()  {   if(instance == null)   {    instance = new Singleton2();   }

return instance;  }  private Singleton2(){}   }

class SingletoDemo {  public static void main(String[] args)  {  // Singleton s1 = Singleton.instance;  // Singleton s2 = Singleton.instance;

Singleton s1 = Singleton.getInstance();   Singleton s2 = Singleton.getInstance();

System.out.println(s1 == s2);

Singleton2 s3 = Singleton2.getInstance();   Singleton2 s4 = Singleton2.getInstance();

System.out.println(s3 == s4);  } }

final class FinalCLass { }

//class Sub extends FinalCLass {} //FinalDemo.java:5: 错误: 无法从最终FinalCLass进行继承

class Super {    //修饰符没有先后关系  final public void show()  {     } }

class Sub extends Super {  //FinalDemo.java:20: 错误: Sub中的show()无法覆盖Super中的show()  /**public void show()  {     }  */ }

class FinalDemo {   //全局常量  public static final int MAX_VALUE = Integer.MAX_VALUE;  public static void main(String[] args)  {    /*    final修饰的变量表示常量:     对常量有一个规范小规定:常量名得全部大写      若该常量名由多个单词组成, 单词字符全部写,而且单词于单词之间使用下划线分割;

public static final int MAX_VALUE

final修饰的变量不能赋值?      最多只能赋值一次,一旦有值之后就不能被修改了;

面试题:      当final修饰一个引用类型变量的时候,      那到底是引用不能变(引用地址不能变),还是引用对象的值不能变呢?

答:  是引用的地址不能变,对象里的内容是可以变的;   */

final double PI = 3.14;    //pi = 0.618;//FinalDemo.java:38: 错误: 无法为最终变量pi分配值

System.out.println(PI);   //说明地址不能变   final String  s = new String();   //s = new String();//FinalDemo.java:59: 错误: 无法为最终变量s分配值

//地址不变,但是对象内容的

final StringBuilder sb = new StringBuilder("AAA");//字符串   System.out.println(sb);

sb.append("BBB");//追加   System.out.println(sb);

} }

abstract class OOXX { } /*

抽象方法:     使用abstract修饰的方法,但是没有方法体(没有{}),只有方法声明,抽象方法强制子类覆写

一旦一个类有了抽象方法,那么该类也必须声明为抽象类;     但是抽象类可以没有抽象方法;

抽象类不能实例化,不能创建对象

抽象类必须得有子类,自己的功能才能得以运行;

抽象类的方法只是定义了子类应该具备的行为, 但是没有给出怎么去完成行为的功能代码;     交给子类去根据自身特殊情况去完成该父类声明的功能;

抽象方法也成为 钩子方法;  回调方法

抽象类里可以有普通方法,

抽象类是类的一种特殊情况:据有类的一切特点,但是 不能实例化; 一般的都得带有抽象方法 */

abstract class Tuxing {  //建议写在方法的最前面,为了醒目  abstract public double getZC();

public Tuxing(){   //   System.out.println("---");  } }

class Sanjiaoxing extends Tuxing {  private double a;  private double b;  private double c;    public Sanjiaoxing(double a,double b,double c)  {   this.a = a;   this.b = b;   this.c = c;  }

//必须覆写  public double getZC(){

//new Tuxing();//ERROR   return a + b + c;  }

}

//矩形 class Juxing extends Tuxing {

public Juxing()  {

super();  }  //忘了覆写  public double getZC(){     //new Tuxing();//ERROR   return 0;  }

} class AbstractDemo2 {  public static void main(String[] args)  {    double ret  = new Sanjiaoxing(3,4,5).getZC();//AbstractDemo2.java:35: 错误: Sanjiaoxing是抽象的; 无法实例化   System.out.println(ret);  } }

包装类、object、单例模式、final、抽象类的更多相关文章

  1. JAVA集合类简要笔记 - 内部类 包装类 Object类 String类 BigDecimal类 system类

    常用类 内部类 成员内部类.静态内部类.局部内部类.匿名内部类 概念:在一个类的内部再定义一个完整的类 特点: 编译之后可生成独立的字节码文件 内部类可直接访问外部类私有成员,而不破坏封装 可为外部类 ...

  2. 2022-7-23 pan小堂 Object与Final

    Object类 1.Object方法 public final native Class<?> getClass() 返回object运行时类 public native int hash ...

  3. Java接口和抽象类详解

    父类定义了相关子类的共有属性和行为.而接口可以定义类的共同行为(包括非相关的类). 了解接口前,先来说说抽象类.抽象类介乎于普通类和接口之间,提供部分实现方法以及未实现方法,可以看作为一个半成品. 抽 ...

  4. Spring源码分析——BeanFactory体系之抽象类、类分析(二)

    上一篇分析了BeanFactory体系的2个类,SimpleAliasRegistry和DefaultSingletonBeanRegistry——Spring源码分析——BeanFactory体系之 ...

  5. 由Spring框架中的单例模式想到的

    单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例 注:Spring源码的版本4.3.4 Spring依赖注入Bean实例默认 ...

  6. Java探索之旅(15)——包装类和字符类

    1.包装类 ❶出于对性能的考虑,并不把基本数据类型作为对象使用,因为适用对象需要额外的系统花销.但是某些Java方法,需要对象作为参数,例如数组线性表ArrayList.add(Object).Jav ...

  7. Java - 包装类 常量池

    概述: 在Java中存在一些基本数据类型,这些基本数据类型变量,不能像其他对象一样调用方法,属性.... 一些情况下带来一些问题,包装类就是为了解决这个问题而出现 包装类可以使得这些基础数据类型,拥有 ...

  8. 菜鸡的Java笔记 第二十五 wrapperClass 包装类

    wrapperClass 包装类         1.包装类的特点        2.装箱与拆箱操作        3.数据转型处理            内容        Object 类可以接收 ...

  9. Java接口和抽象类的区别

    今天看到项目中,写了一个抽象类,里面有很多方法继承了这类,当调用这个接口时,采用的是这个抽象类去调方法的,当时一想,这个不就是我们说的Java的多态的特征: 继承:存在继承关系的子类和父类 重写:子类 ...

  10. 3、Object对象的两大方法(hashCode-equals)总结

    Object类是所有java类的父类. 用户定义了如下一个Person类 public class Person{} 在类定义中并没有明确继承Object类,但是编译器会自动的完成这个过程. 既然所有 ...

随机推荐

  1. Cocos2d—X游戏开发之CCToggle(菜单标签切换)CCControlSwitch(开关切换)

    Cocos2d—X游戏开发之CCToggle(菜单标签切换) 首先继承子CCMenu,是菜单标签中的一种.‘ class CC_DLL CCMenuItemToggle : public CCMenu ...

  2. [转贴] start-stop-daemon命令

    转贴自 http://www.lampblog.net/ubuntu/start-stop-daemon%E5%91%BD%E4%BB%A4/ 1.功能作用 启动和停止系统守护程序 2.位置 /sbi ...

  3. android四大组件--ContentProvider具体解释

    一.相关ContentProvider概念解析: 1.ContentProvider简单介绍 在Android官方指出的Android的数据存储方式总共同拥有五种,各自是:Shared Prefere ...

  4. 在EntityFramework6中管理DbContext的正确方式——4DbContextScope:一个简单的,正确的并且灵活的管理DbContext实例的方式(外文翻译)

    (译者注:使用EF开发应用程序的一个难点就在于对其DbContext的生命周期管理,你的管理策略是否能很好的支持上层服务 使用独立事务,使用嵌套事务,并行执行,异步执行等需求? Mehdi El Gu ...

  5. MySQL数据库事务各隔离级别加锁情况--read uncommitted篇(转)

    本文转自https://m.imooc.com/article/details?article_id=17291,感谢作者 1.目的 1.1 合适人群 1.数据库事务特征我只是背过,并没有很深刻的理解 ...

  6. 论DELPHI跨平台中间件的策略

    论DELPH跨平台中间件的策略 1)起先DELPHI只支持WINDOWS,此时DELPHI三层开发的眼里只有WINDOWS COM. 基于WINDOWS COM的OleVariant组合拳=TData ...

  7. Unity的界面排版: RectTransform

    看Unity3D文档像看国内教课书一样,一些概念,不懂的时候看还是不懂,明白了以后再看,好像也没有说错.好几个做Unity3D的朋友跟我吐槽过U3D的文档质量,相比Apple贴心的技术文档相去甚远. ...

  8. html实现带斜线的表头

    在html.jsp中经常用到table,但在table中如何实现标题表格中画斜线的操作呢?从网上查了很多资料,可以实现的方法有好几种,现在提供一种简单的操作方法,而且不用考虑分辨率的问题,如图: 方法 ...

  9. 观察者模式与Guava EventBus

    观察者模式 结构图 代码实现 public abstract class Subject { private List<Observer> observerList = new Array ...

  10. how to configure logback for Mybatis to print my SQL

    To log SQL statements for particular mybatis mapper set DEBUG (TRACE to see query parameters and res ...