zoukankan      html  css  js  c++  java
  • JAVA SE 基础部分小程序

    程序一:  i++

    i = i++; //等效于如下三行

     int  temp = i ; //temp是指其保留值

    i = i+1;           //++的执行效果

    i = temp;         //i的最后赋值是由temp决定的  故而i依然为其本值(temp将i+1覆盖掉了)

    小实例如下:

    public static void main(String[] args)

    {    

        Demo inc = new Demo();   

        int i = 0;   

        inc.fermin(i);                      //此处必须要用实例化后的对象来调用fermin()方法,因为fermin()方法非静态    

        i = i++;                               //此处的i的temp依旧是0,temp将1覆盖掉了  

        System.out.println(i);

     }

       private void fermin(int i) //此处的函数是一个void(无返回值)类型,i++虽然变成1,但并不返回

       {

            i++;  

        }

    深度探究例子二:

    public static void main(String[] args)//此程序是++运算符的完美体现

    {
      int i = 0;
      i = i++ + ++i;                              //先执行i++(其值为1)  在执行++i(其值为1)   再要补增i++(自增是右边执行完毕后自增),所以结果为2
      int j = 0;
      j = ++j + j++ + j++ + j++;        //先执行++j(其值为1)     在执行j++(其值为1)  再执行j++(仍是1,但是补加前一个j++,结果为2),

      int k = 0;                                                                   //  再执行最后一个j++(仍是2,补加上前面的(j++为2)结果为3) 1+1+2+3=7
      k = k++ + k++ + k++ + ++k;    //k++(其值为0),在执行k++(加上前一个为1),再执行k++(加上前一个为2)
      int h = 0;                                                                   //最后执行++k的时候,自增加1,前一个k++增1,结果为4   输出为0+1+2+4 = 7
      h = ++h + ++h;
      int p1 = 0,p2 = 0;                     //此处四个变量体现的是++放在变量的前后的不同效果即是  ++i  和  i++的区别
      int q1 = 0,q2 = 0;                      
      q1 = ++p1;                               //++放在变量前直接自增 p1为1  q1也为1
      q2 = p2++;                               //++放在变量后的话如上语句执行所示,执行完毕后自增
      System.out.println("i-->"+i);
      System.out.println("j-->"+j);
      System.out.println("k-->"+k);
      System.out.println("h-->"+h);
      System.out.println("p1-->"+p1);
      System.out.println("p2-->"+p2);
      System.out.println("q1-->"+q1);
      System.out.println("q2-->"+q2);
     }

    程序运行结果如下;

    i-->2
    j-->7
    k-->7
    h-->3
    p1-->1
    p2-->1
    q1-->1
    q2-->0

    程序二:初始化构造器解析

    //程序创建了三个类,Root,Mid,Leaf,类中均有静态初始化块和普通初始化块,展现的目的就是观察实例化构造器,静态初始化块的执行先后,以便更好的理解程序

    创建一个对象的时候,先为该对象的所有实例属性分配内存(该类已经被加载过了),然后对实例属性进行初始化:一下就是执行顺序的解释

    package com.itheima;
    public class Demo

    {
     
     public static void main(String[] args)

       {
         new Leaf();//匿名实例化对象,

        new Leaf();//第二次实例化对象,Leaf类中在虚拟机中存在,有关静态的块也就是存在,无需对Leaf进行初始化
       }
    }
     
    class Root

    {
       static
       {
         System.out.println("Root的静态初始化块");   //静态初始化块是属于类级别的,在类初始化的时候方才执行
        }
       {
        System.out.println("Root的普通初始化块");  //初始化块是对构造器的补充,在构造器执行之前执行,也可使用初始化块来进行对象的初始化操作(固定的代码不接受参数)
       }
     public Root()
     {
         System.out.println("Root的无参构造器");
      }
    }
    class Mid extends Root{
     static
     {
      System.out.println("Mid的静态初始化块");
     }
     {
      System.out.println("Mid的普通初始化块");
     }
     public Mid()                                          //有时候会用到无参构造器,但很多时候会被覆盖,此时就必须显示写出构造器
     {
      System.out.println("Mid的无参构造器");
     }
     public Mid(String msg)
       { 
        this();                                     //通过this 调用同一类中重载的构造器,要求必须显示写出无参构造器
        System.out.println("Mid的带参数的构造器,其参数值为"+msg);
       }
    }
    class Leaf extends Mid{//这里实现继承就是为了更好的体现隐藏在内的java.lang.Object,更能体现对象实例化的时候是其父类先实例化
     static 
       {
          System.out.println("Leaf的静态初始化块");
       }
       {
         System.out.println("Leaf的普通初始化块");
       }
     public Leaf()
       {
        
        super("调用父类有一个参数的构造器");    //通过super 调用父类有一个参数(String类型)的构造器
        System.out.println("执行leaf的构造器");
       }
    }

    运行结果如下:

    小程序三:

    1.==比较时若是变量且都是基本类型的变量,即数值型(不一定要求数据类型严格相等)   则只要变量的值相等,就会返回true  

                   引用变量必须指向同一个对象, (==不可比较类型上没有父子关系的两个对象)

    2.equals方法是Object类提供的一个实例方法,所有引用变量都可以调用此方法来判断

    3.其实String中已经重写了Object的equals()方法 就像数组中重写了Object的toString()方法一样

      标准是:只要两个字符串所包含的字符串序列相等,通过equals比较将返回true

    4.易混淆点: Object中的equals和String中的equals不一样          

       Object中的equals()方法实际中没有多大意义(只是比较的对象的地址)  

       int it = 63;  

       float it2 = 63.0f;                                                       //不加f默认是double

      System.out.print("63和63.0f是否相等"+"-->"+(it==it2));  //true 数值类型的判定

      char ch = 'a';  

      int ch2 = 97;     

      System.out.print("\na和97是否相等"+"-->"+(ch==ch2));//true   此处为一个比较特殊的实例,char类型在底层也是属于int类型范围

      String str = new String("a为63");  

      String str2 = new String("a为63");

      System.out.print("\nstr和str2是否相等"+"-->"+(str==str2));   //false   引用类型的判定,本人第一篇写过其内部引用不同

      System.out.print(   "\nstr和str2是否相等用equals判断"+"-->"+(str.equals(str2)));//true

     由于instanceof的特殊性,即当前对象是后面类的实例或其子类时都将返回true

    实际上使用重写equlas()方法判断两个对象的是否是同一个类的实例时是有问题的 成熟的equals()方法如下:

    private String name;

    private String idStr;

    public boolean equals(Object obj)

    {

       if(this==obj)

      {

        return true;

       }

    }

  • 相关阅读:
    HDU 1501 Zipper(DFS)
    HDU 2181 哈密顿绕行世界问题(DFS)
    HDU 1254 推箱子(BFS)
    HDU 1045 Fire Net (DFS)
    HDU 2212 DFS
    HDU 1241Oil Deposits (DFS)
    HDU 1312 Red and Black (DFS)
    HDU 1010 Tempter of the Bone(DFS+奇偶剪枝)
    HDU 1022 Train Problem I(栈)
    HDU 1008 u Calculate e
  • 原文地址:https://www.cnblogs.com/nauy/p/2805484.html
Copyright © 2011-2022 走看看