zoukankan      html  css  js  c++  java
  • Java基础-方法(2)和数组

    方法的特点

    定义方法可以将功能代码进行封装

             封装:两方面含义:

    1. 将有特定逻辑的多条代码组合成一个整体!
    2. 只暴露想让外界看到的,隐藏不想让外界看到的

    对于方法的调用者来说:只能看到方法的返回值,方法内部的操作过程,外界看不到

    提高了代码的复用性和可维护性!!!

    方法只有被调用才会被执行!!(方法调用的流程)

    方法定义和调用练习:

    获取最值

    /*
    定义方法,用于获取两个int数中的最大值
        返回值类型:int
        形参列表:int ,int 
        
        方法定义时,参数称为形参:
        方法调用时,传递的参数称为实参.
            实参有多种形式:
                变量,常量,表达式.
    */
    
    import java.util.Scanner;
    
    public class GetMaxDemo{
        public static void main(String[] args){
            Scanner s = new Scanner(System.in);
            int a = s.nextInt();
            int b = s.nextInt();
            int c = s.nextInt();
            System.out.println(getMax(a,b,c));
        }
        public static int getMax(int x,int y,int z){
            return (((x>y)?x:y)>z)?((x>y)?x:y):z;
        }
    }
    View Code

    方法的重载

    “两同一不同”:

             同类,同方法名

             形参列表不同

    方法的返回值不是判断方法重载的标志!

    /*
        方法的重载:
            在同一个类中.出现方法名相同,但是参数列表不同的多个方法,称为方法的重载..
        参数列表不同的含义是:
            1.要么参数的个数不同
            2.要么是参数的类型不同
            
    方法的重载:
            五个字:
                两同一不同!!
                    同类,同方法名!!!
                    形参列表不同!!!
            
        虚拟机就是根据参数列表的不同,去调用不同的方法.
        
        注意:
            1.方法的返回值不能作为方法重载的标志!!
            2.方法调用时,首先找形参列表对应的,如果没有对应的形参列表的方法定义,
                就去找可以隐式转换成类中定义方法的形参列表的方法.
        
    */
    public class OverLoadDemo1{
        public static void main(String[] args){
            //
            int a = 10;
            int b = 20;
            System.out.println(add(a,b));
            //
            double d1 = 1.0;
            double d2 = 2.0;
            System.out.println(add(d1,d2));
            
        }
        
        //方法1:
        // public static int add(int a,int b){
            // System.out.println("参数是int型的方法被调用了");
            // return a + b;
        // }
        
        //方法2:double类型的参数可以调用它,int型的参数也可以调用它
        public static double add(double d1,double d2){
            System.out.println("参数是double型的方法被调用了");
            return d1 + d2;
        }
    }
    View Code

    数组的概念:

    同一种数据类型的多个组成的一个”逻辑单元”.

    数组的长度:数组元素的个数.

    数组的索引:从0开始,最大值是元素的个数-1.

    数组的定义:

    数据类型:数组类型,其实就是元素的类型加上[],就表示一个数组类型.

    如: int[], double[ ]等

    数组类型变量的定义:

    int[] arr;

    boolean[] booleanArray;

    /*
        数组的定义:
            元素类型[] 数组名;
            
        数组初始化方式一:
            动态初始化:定义和赋值相分离
                定义:
                int[] arr1 = new int[3];
                在以后的程序中可以对其中的元素进行赋值
            静态初始化:定义数组时,元素值就定了.
                int[] arr2 = new int[]{1,2,3};
                
                
    */
    
    public class ArrayDemo{
        public static void main(String[] args){
            //定义一个元素为int型的数组.
            // int[] arr1;
            //动态初始化一个int型数组,长度是3.
            //其中的元素值是默认值:int -> 0,float,double->0.0,boolean -> false
            /*
            int[] arr1 = new int[3];
            System.out.println(arr1);//[I@15db9742 : 内存地址的一个映射
            System.out.println(arr1[0]);
            System.out.println(arr1[1]);
            System.out.println(arr1[2]);
            */
            
            /*
            //静态初始化:定义数组时,就指定元素值
            int[] arr2 = new int[]{1,2,3};
            System.out.println(arr2);//[I@15db9742 : 内存地址的一个映射
            
            //考察数组中的元素值
            System.out.println(arr2[0]);
            System.out.println(arr2[1]);
            System.out.println(arr2[2]);
            */
            
            double[] arr3 = new double[3];
            System.out.println(arr3[0]);//0.0   double默认值为0.0
            System.out.println(arr3[1]);
            System.out.println(arr3[2]);
            System.out.println(arr3);  //[D@15db9742
            
            
            boolean[] arr4 = new boolean[2];
            System.out.println(arr4[0]);  //false  boolean默认是false
            System.out.println(arr4[1]);
            System.out.println(arr4);  //[Z@6d06d69c
            
            
            
            
            
            
        }
    }
    View Code

    数组的初始化:

    1.动态初始化:先定义数组的长度,其中元素的值在以后的程序中赋值.此时元素有默认值.

    2.静态初始化:定义数组的时候,就把其中的元素值定了.

    不论是动态还是静态初始化,元素的值都可以再次进行修改,因为数组元素其本质就是一段内存空间而已!!!

    JVM虚拟机的内存管理:

    主要有三个区域:

    栈:主要用于存储局部变量(方法中定义的变量),方法在被调用时,就进入到栈中.

             栈空间的特点是:先进后出,或者是后进先出.

    堆:主要是存放程序中创建出来的对象或者是实例.也就是凡是使用new创建的都出现在堆空间中.堆空间往往比较大.通常用来保存长时间驻留内存的对象.

    堆内存也最容易产生垃圾,Java的垃圾回收器线程会在不确定的时间去回收堆内存的空间.

    方法区:(面向对象再讲)

    方法中定义的变量:

    基本数据类型:就在方法所在的栈空间中.

    引用数据类型:真实的对象在堆空间中,方法所在的栈空间中只是保存了对象的一个引用而已.

    数组常见操作异常

    1.数组索引越界异常:

    索引值不在正常范围之内.

    2.空指针异常:

    数组变量不再指向数组实例,也就无法通过数组名+索引的方式访问到元素所在的空间.

    两种异常都是运行时异常,在编译器不会报错!!!

    /*
        JVM内存划分:
            引用数据类型变量的含义:保存的是内存地址值.
        数组操作常见的异常:
            1.数组索引越界异常
            2.空指针异常
    */
    public class ArrayDemo2{
        public static void main(String[] args){
            int[] arr1 = {1,5,2};
            /*
            //数组索引越界异常
            // System.out.println(arr1[1]);
            System.out.println(arr1[3]); // java.lang.ArrayIndexOutOfBoundsException: 3
            */
            /*
            //空指针异常
            arr1 = null; // 让arr1变量不再保存数组实例的内存地址
            System.out.println(arr1[2]); // java.lang.NullPointerException
            */
            
        }
    }

    数组的遍历:

    循环:长度属性值
    int[] arr = {1,3,5};
    for(int i = 0;i<arr.length;i++){
        System.out.println(arr[i]);
    }
    /*
        数组遍历:提供一种途径,可以访问到数组中的每个元素.
        数组的属性:length
            
        
    */
    public class ArrayDemo3{
        public static void main(String[] args){
            
            //静态初始化int型数组
            int[] arr = {15,75,48,59,3};
            //
            // System.out.println(arr[0]);
            // System.out.println(arr[1]);
            
            //用循环改进访问元素
            // for(int i = 0;i<5;i++){
                
                // System.out.println(arr[i] + " ");
            // }
            
            //数组的长度,不是数出来的,是利用数组的属性值得到的
            // System.out.println("数组的长度(元素的个数)是: " + arr.length);
            
            //使用数组的length属性来确定循环中的边界值
            // for(int i = 0;i<arr.length;i++){
                // System.out.print(arr[i] + " ");
            // }
            
            printArray(arr);
            
        }
        //定义方法:打印数组的元素
        //两个明确:void
        //数组
        public static void printArray(int[] arr){
            
            for(int i = 0;i<arr.length;i++){
                
                System.out.print(arr[i] + " ");
            }
            System.out.println();
            
        }
        
    }
    View Code
  • 相关阅读:
    2016年3月3日
    性能测试之我解
    Vim命令合集
    vi-vim常用命令
    架构的本质是
    网站三层架构学习之一 分层式结构
    Spring 4 + Quartz 2.2.1 Scheduler Integration Example
    “城市民族工作条例”详解--建议废止
    字符串匹配处理
    LogBack简易教程
  • 原文地址:https://www.cnblogs.com/Z-xiaoshuai/p/9508060.html
Copyright © 2011-2022 走看看