zoukankan      html  css  js  c++  java
  • java 面向对象三

    1.基本数据类型的包装类

    Java提倡的万物皆对象,但是数据类型的划分出现了基本数据类型和引用数据类型,那么我们怎么能把基本数据类型称为对象呢?

    • 除了Integer和Character定义的名称和对应的基本类型差异大,其他六种都是将首字母大写就可以了。
    • Integer,Byte,Float,Double,Short,Long都是Number类的子类。;
    • Character和Boolean都是Object直接子类;
    • 8个类都是final修饰的(不可被继承)。
    • 涉及到享元模式:在操作整数的时候,系统缓存一个-128~127 范围的数

    2.自动装箱&自动拆箱

    • 自动装箱:可把一个基本类型变量直接赋给对应的包装类对象或则Object对象
    • 自动拆箱:允许把 包装类对象直接赋给对应的基本数据类型

    3.基本类型和String之间的转换

    • String → 基本类型,除了Character外所有的包装类提供parseXxx(String s)静态方法,用于把一个特定的字符串转换成基本类型变量;
    • 基本类型 → String,String 类有静态方法valueOf(),用于将基本类型的变量转换成String类型。
    String str = "17";
    int i = Integer.parseInt(str);//String  --> 基本类型
    String s1 = String.valueOf(i);//基本类型 --> String
    

    4.Object类

    • 所有类的公共父类,一旦一个类没有显示地继承一个类则其直接父类一定是Object。

    • 一切数据类型都可用Object接收

    • class OOXX extends Object{}等价于class ooXX {}

    • 常见方法
      public boolean equals(Object obj):对象比较
      public int hashCode():取得该对象的Hash码
      public String toString():对象描述

    • Object类的 toString()方法:“对象的描述”
      建议所有类都覆写此方法
      直接打印输出对象时,会调用该对象的toString()方法。

    • 打印对象的时候,实际调用的对象实际指向的类的自我描述;
      全限定类名+@+十六进制的hashCode值,等价于
      全限定类名+@+IntegertoHexString(该对象.hashCode) ;

    • equals也是判断是否指向同一个对象
      没有实际意义,有必要可以重写
      public boolean equals(Object obj) {}

    • String 覆写了 Object的equals方法:只比较字符的序列是否相同

    • ==用于判断两个变量是否相等
      基本类型:
      引用类型:必须指向同一个对象,才true
      只能比较有父子或平级关系的两个对象

    5.代码块

    • 代码块指的是使用"{}"括起来的一段代码,根据代码块存在的位置可以分为4种:
      普通代码块;
      构造代码块;
      优先于构造方法执行,每次实例化对象之前都会执行构造代码块。
    {
    	 System.out.println("我是构造代码块");
        }
        public Demo(){
    	System.out.println("我是构造方法");
        }
        public static void main(String[] args) {
    	 Demo d1  = new Demo();
    	 Demo d2  = new Demo();
        }
    
    
        静态代码块;
              优先于主方法执行,优先于构造代码块执行,不管有创建多少对象,静态代码块只执行一次,可用于给静态变量赋值;
    
      {
    	System.out.println("我是构造代码块");
        }
        public Demo(){
    	System.out.println("我是构造方法");
        }
        static {
    	System.out.println("我是静态代码块");
        }
        public static void main(String[] args) {
    	System.out.println("Main");
    	new Demo();
    	new Demo();
       }
    
        同步代码块。
    
    • 代码块里变量的作用域:
      只在自己所在区域(前后的{})内有效;

    6.Singleton模式(单态模式)

    目的:整个应用中有且只有一个实例,所有指向该类型实例的引用都指向这个实例

    • 饿汉式

    private static Singleton1 s = new Singleton1();

    public static Singleton1 getInstance(){
    	return s;
    }
    
    private Singleton1(){
    	
    }
    ```
    
    • 懒汉式
    	private static Singleton2 s2 = null;
    	
    	public static Singleton2 getInstance(){
    		if(s2 == null){
    			s2 = new Singleton2();
    			return s2;
    		}
    		return s2;
    	}
    	
    	private Singleton2(){}
    
    • 双重检查锁定
    private static Singleton3 s3= null;
    	
    	public static Singleton3 getInstance(){
    		
    		if(s3 == null){
    			
    			synchronized(Singleton3.class){
    				if(s3 == null){
    					s3 = new Singleton3();
    				}
    			}
    			
    		}
    		return s3;
    	}
    	
    	private Singleton3(){}
    

    7.final关键字

    1. 用final修饰的类不能被继承
    2. 用final修饰的方法不能被子类重写,但可以本类重载
    3. 用final修饰的变量或常量只能被赋值一次。不能更改值。通常用作全局常量。
      如:常量名称所有字母大写,若有多个单词组成,单词间使用下划线连接。
      public static final double PI = 3.14159265358979323846;
      public static final String APP_SEPARATOR = "/";

    8.抽象类

    • 当编写一个类时,我们往往会为该类定义一些方法,这些方法时用来描述该类的行为方式,那么这些方法都有具体的方法体。
    • 但是有的时候,某个父类只是知道子类应该包含怎么样的方法,但是无法准确知道子类如何实现这些方法。
      比如一个图形类应该有一个求周长的方法,但是不同的图形求周长的算法不一样。那该怎么办呢?
    • abstract 关键字
    1. 通过abstract关键字来修饰的类称为抽象类;
    2. 可以定义被abstract修饰的抽象方法
    3. 抽象方法只有返回类型和方法签名,没有方法体。
    4. 抽象类可以含有普通方法
    5. 抽象类不能创建实例对象(不能new)
    6. 需要子类覆盖掉所有的抽象方法后才可以创建子类对象,否则子类也必须作为抽象类

    例子:求不同图形的周长

    • 抽象类 图形:
    	public abstract double getZc();
    	public void printName(){
    		System.out.println("printName");
    	}
    
    • 三角形:
            private double a;
    	private double b;
    	private double c;
    	@Override
    	public double getZc() {
    		return this.a + this.b + this.c;
    	}
    	public SanJiaoXing(double a,double b,double c) {
    		this.a = a;
    		this.b = b;
    		this.c = c;
    	}
    
    • 四边形
            private double a;
    	private double b;
    	private double c;
    	private double d;
    	
    	@Override
    	public double getZc() {
    		// TODO Auto-generated method stub
    		return this.a + this.b + this.c + this.d;
    	}
    
    	public SiBianXing(double a, double b, double c, double d) {
    		super();
    		this.a = a;
    		this.b = b;
    		this.c = c;
    		this.d = d;
    	}
    
    	public SiBianXing() {
    		super();
    	}	
    
    • 测试:
            public static void main(String[] args) {
            TuXing san = new SanJiaoXing(2, 3, 5);
    	System.out.println(san.getZc());
    	TuXing si = new SiBianXing(6, 5, 2, 1);
    	System.out.println(si.getZc());
    	}
    
  • 相关阅读:
    Atitit 集团与个人的完整入口列表 attilax的完整入口 1. 集团与个人的完整入口列表 1 2. 流量入口概念 2 3. 流量入口的历史与发展 2 1.集团与个人的完整入口列表
    atitit 每季度日程表 每季度流程 v3 qaf.docx Ver history V2 add diary cyar data 3 cate V3 fix detail 3cate ,
    Atitit react 详细使用总结 绑定列表显示 attilax总结 1. 前言 1 1.1. 资料数量在百度内的数量对比 1 1.2. 版本16 v15.6.1 1 1.3. 引入js 2
    Atitit r2017 r3 doc list on home ntpc.docx
    Atitit r2017 ra doc list on home ntpc.docx
    Atiitt attilax掌握的前后技术放在简历里面.docx
    Atitit q2016 qa doc list on home ntpc.docx
    Atitit r7 doc list on home ntpc.docx 驱动器 D 中的卷是 p2soft 卷的序列号是 9AD0D3C8 D:\ati\r2017 v3 r01\
    Atitit 可移植性之道attilax著
    Atitit q2016 q5 doc list on home ntpc.docx
  • 原文地址:https://www.cnblogs.com/linbin7/p/14525531.html
Copyright © 2011-2022 走看看