1. JAVA中的参数传递总结
    先看两道笔试题:

     public class Test2 { 
    
        public static void main (String [] args)  {
    StringBuffer a = new StringBuffer ("A");
    StringBuffer b = new StringBuffer ("B");
    operate (a,b);
    System.out.println(a+","+b);
    } static void operate(StringBuffer x, StringBuffer y){
    x.append(y);
    y = x;
    }
    }

    该题会输出什么?

     public class Test2 { 
    
          public static void add3 (Integer i){
    int val=i.intValue();
    val += 3;
    i = new Integer (val);
    } public static void main (String args [ ] ) {
    Integer i = new Integer (0);
    add3 (i);
    System.out.println (i.intValue ( ));
    }
    }

    这个又会输出什么?
    答案是: 1:AB,B       2:0
    首先我们应该明白JAVA中的参数传递全是以值传递的。是基本类型,就拷贝一个基本类型传进方法;是引用,就拷贝一个引用变量传进去方法,理解了这两点就能理解方法操作对象的相关问题了。最好能画出引用指向对象的图出来,就能完全理解了。

    第1题,调用operate方法时,传入了两个引用a,b的拷贝x,y,注意这里a,b不是基本类型而是引用!!作为拷贝,x和y也都是引用,指向对象StringBuffer("A")和StringBuffer("B"),这两个x,y都指向原a,b引用所指向的对象。x.append(y)对它指向的对象(即a指向的对象)进行了操作。而x=y,只是两个拷贝变量在赋值,并没有影响到原b所指向的对象。所以b所指向的对象仍然为B。

  

     第2题,i=new Integer(val)  这里等于重新把i的引用指向别的对象了,所以原有对象的数没改,而原来的i仍然是指向对象new Integer(0)的。

     把握住了JAVA都是传值并且传的都是拷贝的话,类似的题大家都能迎刃而解了。

  1. JAVA中的代码执行顺序
  2.  class SingleTon {
    private static SingleTon singleTon = new SingleTon();
    public static int count1;
    public static int count2 = 0; private SingleTon() {
    count1++;
    count2++;
    } public static SingleTon getInstance() {
    return singleTon;
    }
    } public class Test {
    public static void main(String[] args) {
    SingleTon singleTon = SingleTon.getInstance();
    System.out.println("count1=" + singleTon.count1);
    System.out.println("count2=" + singleTon.count2);
    }
    } 正确答案
    count1=1 count2=0 class Singleton
    { public static int counter1;
    public static int counter2=0;
    private static Singleton singleton=new Singleton();
    private Singleton()
    {
    counter1++;
    counter2++;
    }
    public static Singleton getInstance()
    {
    return singleton;
    }
    } public class MyTest
    { public static void main(String[] args)
    {
    Singleton singleton=Singleton.getInstance();
    System.out.println("counter1="+singleton.counter1);
    System.out.println("counter2="+singleton.counter2);
    } } counter1 = 1;
    counter2 = 1;

    原因:

    首先调用类的静态方法(Singleton.getInstance()),会加载这个类(这里指Singleton类)。

    执行过程:
    1.给所有的静态变量赋予一个默认值(int类型的默认值为0)counter1=0,counter2=0(赋值操作未执行),singleton=null
    2.初始化(从上到下开始执行,把右边的值赋值给左边)
    3.new Singleton()要生成对象(实例),会自动调用它的构造方法。

    题目一:此时counter1没有赋值,故counter1还是等于0.counter2被赋值为0,故counter2=0.

    题目二:此时counter1++,所以counter=1;counter2++,counter2=1;   所以最后counter1=1,counter2=1.

    Java变量的初始化顺序为:静态变量或静态语句块–>实例变量或初始化语句块–>构造方法
    有父子级关系的变量的初始化顺序为:父类--静态变量->父类--静态初始化块->子类--静态变量->子类--静态初始化块->父类--变量->父类--初始化块->父类--构造器->子类--变量->子类--初始化块->子类--构造器

     

JAVA常用知识总结(二)的更多相关文章

  1. Java 常用API(二)

    目录 Java 常用API(二) 1. Object类 2. Date类 概述 构造方法和成员方法 3. DateFormat类 概述 SimpleDateFormat类 练习 4. Calendar ...

  2. JAVA常用知识总结(十二)——数据库(二)

    MySQL主从热备份工作原理 简单的说:就是主服务器上执行过的sql语句会保存在binLog里面,别的从服务器把他同步过来,然后重复执行一遍,那么它们就能一直同步啦. 整体上来说,复制有3个步骤: 作 ...

  3. Java基础知识(二)

    一.基本概念 1. Java程序初始化的顺序是怎么样的 2. Java和C++的区别 3. 反射 先看一个知乎回答 什么是反射 主要用途 获得Class对象 4. 注解 什么是注解 为什么要用注解 基 ...

  4. Java常用类(二)String类详解

    前言 在我们开发中经常会用到很多的常用的工具类,这里做一个总结.他们有很多的方法都是我们经常要用到的.所以我们一定要把它好好的掌握起来! 一.String简介 1.1.String(字符串常量)概述 ...

  5. java常用公共代码二之分页代码的实现

    在项目中,我们经常会写到一些公共的代码,来让开发人员调用,减少代码重复,下面,我就将一些常用到的公共类贴出来和大家分享!! 二.分页代码实现:在项目中,分页是一个项目中必不可少的,它可以防止我们从数据 ...

  6. JAVA常用知识总结(十三)——数据库(三)

    Mysql的主键选择(主键自增,UUID,snowflake)? 使用自增长做主键的优点:1.很小的数据存储空间2.性能最好3.容易记忆使用自增长做主键的缺点:1.如果存在大量的数据,可能会超出自增长 ...

  7. JAVA常用知识总结(七)——Spring

    如果一个接口有2个不同的实现, 如何Autowire某一个指定的实现? 1.通过增加@Qualifier(实现类的名字): @Autowired @Qualifier("GirlStuden ...

  8. JAVA常用知识总结(六)——Mybatis

    为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里? Hibernate属于全自动ORM映射工具,使用Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取, ...

  9. JAVA常用知识总结(三)——JAVA虚拟机

    先附一张JAVA虚拟机内存结构图: 其中JAVA虚拟机的线程问题<为什么JAVA虚拟机分为线程共享和非线程共享?>一文中已经有详细介绍,本文从面试中常问的一些JAVA虚拟机问题出发,主要从 ...

随机推荐

  1. 0 lrwxrwxrwx. 1 root root 13 Nov 20 12:44 scala -> scala-2.12.4

    符号链接的文件属性相同,真正的权限属性由符号链接所指向的实际文件决定.

  2. redis13-----配置文件

    ==配置文件全解=== ==基本配置 daemonize no 是否以后台进程启动 databases 创建database的数量(默认选中的是database ) #刷新快照到硬盘中,必须满足两者要 ...

  3. ActiveMQ 入门使用p2p模型-主动消费

    生产者 package clc.active; import com.sun.xml.internal.bind.v2.runtime.unmarshaller.XmlVisitor; import ...

  4. Tomcat启动报:invalid LOC header (bad signature)的问题

    原因:这种一般是因为项目依赖的某个jar包损坏引起的, 解决办法: 1.右键项目,选择maven,更新(update maven project) 2.通过右击项目名 ->  Run as -& ...

  5. LR问题汇总

    关于录制打开IE问题 1.LR11用IE11录制脚本时能打开web页面,但是一直是0事件,也没有脚本代码; 解决方法: LR版本和IE版本兼容性问题,这个问题是我们安装环境时不注意,导致LR无法录制. ...

  6. codeforces B. Sereja and Mirroring 解题报告

    题目链接:http://codeforces.com/contest/426/problem/B 题目意思:给出一个n * m的矩阵a,需要找出一个最小的矩阵b,它能通过several次的mirror ...

  7. web 基本概念辨异 —— URI 与 URL

    两者的相同点: 都是唯一的,对资源(R:Resource)起到唯一的标识作用: 两者的不同点: URL 是 URI 的子集(URI 是父类,URL 是子类),是一种特定的实现形式: URI 可以是身份 ...

  8. 数据库几种Top子句的使用方法

    转自:https://blog.csdn.net/melody_susan/article/details/47011331

  9. 家庭wifi,如何组网最合适

    wifi信号通过电磁波在空中传播的,属于微波通信的一种,因为微波本身及发射功率的限制,导致wifi的穿透能力比较差,北方比较厚的承重强,铁门.家具等对都会对wifi信号有较强的削弱作用.穿过的障碍物越 ...

  10. python 面向对象十三 枚举类

    from enum import Enum Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', ...