zoukankan      html  css  js  c++  java
  • Java学习笔记[第5章-第7章]

    对象的行为

    方法调用栈

    所有的方法都维护在一个称为调用栈的结构中,当前正在执行的方法位于调用栈。

    对于基本类型的变量:java虚拟机将其放在栈中。

    对于引用类型的变量:引用变量本身放在栈中,而引用所指向的对象是放在java堆中。引用不包含它所指向的对象的实际数据,而是指向内存中对象所在的位置。

    如果一个变量是引用类型的,那么变量的值就是一个内存地址,这个内存地址是引用指向的对象的位置。

     

    按值调用

    指的是在方法调用时,传递的参数是按值的拷贝传递。

    示例如下:

    public class TempTest {

    private void test1(int a){

    //做点事情

    }

    public static void main(String[] args) {

    TempTest t = new TempTest();

    int a = 3;

    t.test1(a);//这里传递的参数a就是按值传递

    }

    }

    按值传递重要特点:传递的是值的拷贝,也就是说传递后就互不相关了。

    示例如下:

    public class TempTest {

    private void test1(int a){

    a = 5;

    System.out.println("test1方法中的a==="+a);

    }

    public static void main(String[] args) {

    TempTest t = new TempTest();

    int a = 3;

    t.test1(a);//传递后,test1方法对变量值的改变不影响这里的a

    System.out.println("main方法中的a==="+a);

    }

    }

    运行结果是: test1方法中的a===5

          main 方法中的 a===3


    3.2:按引用传递是什么 指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是 变量所对应的内存空间的地址。

    3.3:按引用传递的重要特点 传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存 空间)。

    示例如下: 第1行 public class TempTest {

     private void test1(A a){

    a.age = 20;

    System.out.println("test1方法中的age="+a.age);

    }

    public static void main(String[] args) {

     TempTest t = new TempTest();

     A a = new A();

    a.age = 10;

     t.test1(a);

     System.out.println("main方法中的age="+a.age);

     }

    }

    class A{

     public int age = 0;

    }

    运行结果如下: test1方法中的age=20

            main 方法中的 age=20

    (1): “在 Java 里面参数传递都是按值传递”这句话的意思是:按值传递是传递的值的 拷贝,按引用传递其实传递的是引用的地址值,所以统称按值传递。

    (2):在 Java 里面只有基本类型和按照下面这种定义方式的 String 是按值传递,其它 的都是按引用传递。就是直接使用双引号定义字符串方式:String str = “Java 私塾”;   

    方法的重载

    当一个类有两到多个同名 但是有不同的参数列表的方法。

    重载示例 如下例所示:

    void getArea(int w,int h);

    void getArea(float w,float h);

    在第二种情况下,成员方法 getArea()接受两个浮点变量作为它的参数,编译器根据调 用时的不同参数来决定该调用哪一种成员方法,假如你把两个整数提供给成员方法,就 调 用 第 一个成员方法;假如你把两个浮点数提供给成员方法,第二个成员方法就被调用。 当写代码来调用这些方法中的一个方法时,便以其会根据提供的参数的类型来选择合适 的方法。
    注意:跟成员方法一样,构造方法也可以重载。
    2.2:方法的重载的规则
    (1):方法名称必须相同

    (2):参数列表必须不同(个数不同,或类型不同,或参数排列顺序不同) 。

    (3):方法的返回类型可以相同也可以不相同。仅仅返回类型不同不足以成为方法的重 载。

    数组

    数组是由相同类型的若干项数据组成的一个数据集合。也就是说数组是用来集合相同类 型的对象并通过一个名称来引用这个集合,数组是引用类型。 

    声明方法:

    声明一:  int x[];

    声明二:int [] x=new int[3];

    声明三:int[]x=new int[]{3,4,5};

    数组复制的方法是使用System类提供的arraycopy()方法,其语法如下:

    System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);

    System.arraycopy(源数组,源数组中的起始位置,目标数组,目标数据中的起始位置,要复制的数组元素的数量);

     

    public class T {

           public static void main(String args[]){

                  int arr1[] = {1,2,3,4,5};

                  int arr2[] = new int[5];

                  System.arraycopy(arr1, 0, arr2, 0, 5);

                  for (int i = 0; i < arr2.length; i++) {

                         System.out.println(arr2[i]);

                  }

           }

    }

    Arrays类

    对数组的一些基本操作,像排序、搜索与比较等都是很常见的。在java中提供了Array是类可以协助您作这几个操作,Array是类位于java.util包中,他提供了几个方法可以直接使用。

    sort()                       帮助您对指定的数组排序,所使用的是快速排序法

    binarySearch()      让您对已排序的数组进行二元搜索,如果找到指定的值就返回该值所在的索引,否则就返回负值

    fill()                           当您配置一个数组之后,会依据数据类型来给定默认值。例如整数数组就初始值为0,可以使用Arrays.fill()方法将所有的元素设置为指定的值

    equals()                   比较两个数组中的元素值是否全部相等,如果是将返回true,否则返回false

    继承

    public class Employee {  

    String name;

      Date hireDate;  

    Date dateOfBirth;  

    String jobTitle;   int grade;  

    ... }

    public class Manager extends Employee {  

    String department;  

    Employee[] subordinates;  

    ... }

    在这样的定义中,Manager 类被定义,具有 Employee 所拥有的所有变量及方法。所有 这些变量和方法都是从父类的定义中继承来的。

    关键字是extends.

    在 Java 编程语言中,对象的初始化是非常结构化的,这样做是为了保证安全。在前面 的模块中,看到了当一个特定对象被创建时发生了什么。由于继承性,对象被完成,而且下 述行为按顺序发生:

    (1)存储空间被分配并初始化到 0 值    

    (2)进行显式初始化    

    (3)调用构造方法 

    关键字 super

    关键字 super 可被用来引用该类的父类,它被用来引用父类的成员变量或方法。父类行 为被调用,就好象该行为是本类的行为一样,而且调用行为不必发生在父类中,它能自动向 上层类追溯。
    super 关键字的功能:

    (1):点取父类中被子类隐藏了的数据成员

    (2):点取已经覆盖了的方法

    (3):作为方法名表示父类构造方法

    例如:

    public class Employee {

    private String name;

    private int salary;

    public String getDetails() {

    return "Name: " + name + " Salary: " + salary; }

    }

    public class Manager extends Employee {

    private String department;
    public String getDetails() {

    return super.getDetails() + // 调用父类的方法 " Department: " + department;

    }

    }

    构造方法不能被继承                                                              

     尽管一个子类从父类继承所有的方法和变量,但 它不继承构造方法,掌握这一点很重要。 一个类能得到构造方法,只有两个办法。或者写构造方法,或者根本没有写构造方法, 类有一个默认的构造方法。 

    调用父类构造方法

    在许多情况下,使用默认构造方法来对父类对象进行初始化。 当然也可以使用 super 来显示调用父类的构造方法。
    public class Employee {

    String name;

    public Employee(String n) {

    name = n;

    }

    }
    public class Manager extends Employee {

    String department;

    public Manager(String s, String d) {

    super(s);

    department = d;

    }

    }

    注意:无论是 super 还是 this,都必须放在构造方法的第一行。

    单继承性                         

    单继承性:当一个类从一个唯一的类继承时,被称做单继承性。单继承性使代码更可靠。 接口提供多继承性的好处,而且没有(多继承的)缺点。 Java 编程语言允许一个类仅能继承一个其它类,即一个类只能有一个父类。这个限制 被称做单继承性。单继承性与多继承性的优点是面向对象程序员之间广泛讨论的话题。Java 编程语言加强了单继承性限制而使代码更为可靠,尽管这样有时会增加程序员的工作。后面 会学到一个被叫做接口(interface)的语言特征,它允许多继承性的大部分好处,而不受 其缺点的影响。

     

  • 相关阅读:
    # ConfigureAwait常见问题解答
    # Oracle 常用语句
    # C# 中的Task创建指南
    ASP.NET Core Web API 跨域(CORS) Cookie问题
    Order by 优化
    VMware 安装 CentOS 7
    ThreadLocal 内存泄漏问题深入分析
    Zookeeper 如何保证分布式系统数据一致性
    Redis 5.0 安装
    Redisson 实现分布式锁的原理分析
  • 原文地址:https://www.cnblogs.com/Melony/p/4392282.html
Copyright © 2011-2022 走看看