第7天

Posted akinodoo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第7天相关的知识,希望对你有一定的参考价值。

 回 顾

方法的定义:

什么是方法?拥有特定功能的一个代码段,称为方法,其他语言中称为Function.

方法定义的格式:

public static 返回值类型 方法名(形参类型 参数名1,形参类型 参数名2,....){

  方法体;

  return [返回值];

}

定义方法的两个明确:

1.返回值类型

2.形参列表

public static : 方法的修饰符,目前的固定格式。以后会又变化。

返回值类型:Java中的数据类型(基本的四类八种,引用的:可以又多种多样:jdk提供的,也可以是我们自己定义的!),表示的是方法执行后需要返回值的类型!

  如果方法不需要返回任何之,就用void.

方法名:可以理解为变量名(就是一段内存空间的标识!方法名就是一段代码的标识!)

  和变量的命名规范是一致的(小驼峰命名法,从第二个单词开始首字母大写)

类名和接口名的命名规则是一致的(大驼峰命名法)

包名:

final变量名:

()里整体称为形参列表,每个形参定义包含两方面:形参类型,形参名!形参之间用逗号分隔,如果方法不需要任何参数,什么都不屑,()必须写!!!

  形参类型:任何可用的数据类型:(基本的和引用的都可以)

  形参名:就是变量名,这个变量就是在方法体中有效,相当于在方法体中定义的局部变量!!!方法被调用时,形参就被赋值了!按照顺序传值!!!

 

方法体:0到若干条可以执行的语句,在方法被调用时,这些语句一次执行!

return : 关键字,表示一个方法的结束,如果方法又明确的返回值类型的话,return后必须有一个值(可以和方法定义时的返回值数据类型一致!或者可以自动类型转换成返回值类型的值:变量;常量;表达式)

  如果方法的定义中,返回值时void型,return后就不能加任何值!!!

  即:return;---此时整条语句都可以省略!!!

 

方法定义的位置:

类定义中,和main方法时平级关系:

方法中不能再定义其它方法(即:方法不能嵌套定义!!!)

 

方法的调用:

1.方法调用时传值:

实参:方法调用时,给方法传递的值,就是实参;

形参:方法定义时,参数列表中出现的参数名

 

赋值方向:实参→形参!!!

 

方法名(实参);

实参的个数一定要和形参的个数对应!

类型:实参要么和形参类型一致,要么可以隐式类型转换!!!

实参的种类:变量,常量,表达式

 

 

2.如何处理方法的返回值:

1>有返回值的方法:

  -不关心返回值:单独调用

  -使用返回值:给其他变量赋值,直接参与表达式运算,当成参数传第给其他方法。

2>没有返回值的方法:

  -只能单独调用

  -不能给其他变量赋值,不能直接参与表达式运算,不能当成参数传第给其他方法。

 

 

方法的重载(overload):

两同一不同!!!

同类,同方法名,形参列表不同(个数不同或者类型的不同都成为形参列表不同)

 

方法的访问权限修饰符,以及返回值类型都不是判断方法重载的标志!

 

练习题:

1.定义方法,用于计算一个int数值的阶乘

//返回值类型:int

//形参列表:int value

/*
    1.定义方法,用于计算一个int数值的阶乘
    //返回值类型:int
    //形参列表:int value
*/
public class HomeworkDemo1{
    public static void main(String[] abc){
        //
        int res = getNum(5);
        System.out.println(res);
        
        //
        System.out.println(getNum(5));
    }
    
    //返回值类型:int
    //形参列表:int value
    public static int getNum(int value){
        //求阶乘思想:
        int res = 1;
        for(int i = 1;i<=value;i++){
            res *= i;
        }
        return res;
    }
}

 

2.定义方法,用于获取指定范围内的一个随机值(int)

//返回值类型:int

//形参列表:int start ,int end

/*

定义方法,用于获取指定范围内的一个随机值(int)
//返回值类型:int
//形参列表:int start,int end
*/ public class HomeworkDemo2{ public static void main(String[] args){ int start = 10; int end = 20; System.out.println("随机值是: " + getRandom(start,end)); } //返回值类型:int //形参列表:int start,int end public static int getRandom(int start,int end){ return (int)(Math.random() * (end - start + 1) + start); } }
/*

定义方法,用于获取指定范围内的一个随机值(int)
//返回值类型:int
//形参列表:int start,int end

练习:
    改造: 从键盘录入起始和结束值:
*/
import java.util.Scanner;
public class HomeworkDemo2{
    public static void main(String[] args){
        Scanner s = new Scanner(System.in);
        System.out.print("请输入起始值:");
        int start = s.nextInt();
        System.out.println("请输入最终值:");        
        int end = s.nextInt();
        System.out.print("随机值是: " + getRandom(start,end));
        
    }
    
    //返回值类型:int
    //形参列表:int start,int end
    public static int getRandom(int start,int end){
        return (int)(Math.random() * (end - start + 1) + start);
    }
    
    
}

 

第七天  数组

/*
    数组:array
        同一种数据类型的 〇到多个 数据的组合.
    
    数组的数据类型:就是元素的数据类型
    数组的长度(length):就是数组中数值的个数:
    元素(element):数组的各个数值称为元素
    索引(index):数组中各个元素的编号:从0开始,最大值是:数组的长度-1
    
    数组类型是引用数据类型:
        数组名保存的是一段内存空间的地址!
        真正的元素保存在那段内存空间中!!!
        
    
    
    
    为什么使用数组:
        减少定义变量名
        方便对一组数据进行操作
    
    定义数组的格式:(即:初始化数组的方式:)
        两种:
        > 定义时不指定初始值:只指定数组的长度,(动态初始化)
            数据类型 变量名 = 初始值;
            
            元素类型[] 数组名 = new 元素类型[数组长度];
            例如:
                定义一个数组,可以存放5个int型数据.
                int[] arrInt = new int[5];
            
        > 定义时就指定初始值:(静态初始化)
            元素类型[] 数组名 = new 元素类型[]{元素1,元素2,...};
            例如:
                int[] arr = new int[]{1,2,3,5};
*/
public class ArrayDemo1{
    public static void main(String[] args){
        //定义数组
        //动态初始化:定义数组时只指定长度,不指定具体的元素值!!
        int[] arr1 = new int[5];
        //arr1保存的是一段内存地址值!
        System.out.println(arr1);//[[email protected]
        
        //打印引用数据类型的结构:
        //[I : 表示的是数据类型:[ 表示的就是数组,I表示的是元素的类型!
        //@ : 固定的分隔符
        //15db9742 : 一个十六进制的字符串:真实的内存地址值计算出来的!!!
        
        //定义byte类型数组
        byte[] arr2 = new byte[2];
        System.out.println(arr2);
        
        boolean[] arr4 = new boolean[3];
        System.out.println(arr4);
        
        
        //初始化数组的第二种方式:定义数组时指定元素值!此时不能指定数组的长度!
        int[] arr3 = new int[]{1,2,3,4,5,6};
        System.out.println(arr3);
        
        //静态初始化的简化写法:
        int[] arr5 = {1,2,3,45};
    }
}
练习:
考察一下,基本数据类型的数组的变量 ,直接打印时,其中的类型是什么字符?
/*
    考察基本数据类型的数组变量,直接打印的结果:
    
*/
public class ArrayDemo2{
    public static void main(String[] args){
        byte[] a1 = new byte[2];
        short[] a2 = new short[2];
        char[] a3 = new char[]{‘a‘,‘b‘,‘c‘};
        int[] a4 = new int[]{1,2,4};
        boolean[] a5 = new boolean[3];
        float[] a6 = new float[2];
        double[] a7 = new double[2];
        long[] a8 = new long[2];
        
        //
        System.out.println(a1);
        System.out.println(a2);
        System.out.println(a3);
        //println这个方法对字符型的数组有特殊的处理方式:重载这个方法的结果是打印数组里的所有字符!
        System.out.println(a4);
        System.out.println(a5);
        System.out.println(a6);
        System.out.println(a7);
        System.out.println(a8);
    }
}

技术分享图片

//考察基本数据类型的数组变量,直接打印的结果:
public
class PractiseDemo{ public static void main(String[] args){ System.out.print("int :"); int[] arr1 = new int[5]; System.out.println(arr1); System.out.print("byte :"); byte[] arr2 = new byte[5]; System.out.println(arr2); System.out.print("short :"); short[] arr3 = new short[5]; System.out.println(arr3); System.out.print("long :"); long[] arr4 = new long[5]; System.out.println(arr4); System.out.print("char :"); char[] arr5 = new char[5]; System.out.println(arr5); System.out.print("float :"); float[] arr6 = new float[5]; System.out.println(arr6); System.out.print("double :"); double[] arr7 = new double[5]; System.out.println(arr7); System.out.print("boolean :"); boolean[] arr8 = new boolean[5]; System.out.println(arr8); } }

打印结果:注意long型开始时J,boolean型区别于byte是Z,而char类型字符型的数组有特殊的处理方式:重载这个方法的结果是打印数组里的所有字符!

技术分享图片

 

jvm

jvm:实际上也是一种软件.
jvm实际上只是一种标准,任何组织都可以自己开发jvm虚拟机:
Tao JVM

jvm如何对内存进行区域的划分:
对内存的划分就是方便对数据的管理:

通常会划分5大区域:
栈区:stack
堆区:heap
方法区:method area

本地方法栈:native method stack
程序计数器:program counter

不同的jvm虚拟机对内存空间的划分是不一样的.

栈区:stack
方法中定义的局部变量(和形参)都是在栈区:
栈区中的变量没有初始值,使用之前必须手动赋值!!
堆区:heap
凡是new出来的对象都是在堆区!
Scanner s = new ...
int[] arr = new ...
堆区中的变量都有初始值!!!

方法区:method area
用来存放.class字节码文件和方法定义的!

.java -> .class -> 方法区!!

 技术分享图片

 1 /*
 2     验证:
 3         1.数组的默认值:
 4         2.数组元素的访问方式:
 5             数组名[索引值]
 6     练习:定义基本数据类型的数组,有2个元素.考察他们的默认值:
 7         
 8 */
 9 public class ArrayDemo3{
10     public static void main(String[] args){
11         //定义一个数组
12         int[] arr = new int[3];  
13         //在堆空间中开辟3个空间,每个空间可以存放一个int型元素.初始值为0.
14         //然后把首元素的地址(也就是整个数组的地址)赋值给栈空间中的变量arr
15         
16         //验证默认值:
17         System.out.println(arr[0]);
18         System.out.println(arr[1]);
19         System.out.println(arr[2]);
20         
21         //如何对数组元素赋值:
22         arr[2] = 10;
23         System.out.println(arr[2]);
24         
25         arr[2] = 20;
26         System.out.println(arr[2]);
27         
28     }
29 }

 

 1 /*
 2     考察基本数据类型和引用数据类型的数组的默认值!
 3     整数:0
 4     浮点数:0.0
 5     布尔型:false
 6     引用数据类型:null
 7 */
 8 public class ArrayDemo4{
 9     public static void main(String[] args){
10         byte[] arr1 = new byte[2];
11         System.out.println(arr1[0]);
12         System.out.println(arr1[1]);
13         System.out.println("------------------");
14         char[] arr2 = new char[2];
15         System.out.println(arr2[0]);
16         System.out.println(arr2[1]);
17         System.out.println("------------------");
18         short[] arr3 = new short[2];
19         System.out.println(arr3[0]);
20         System.out.println(arr3[1]);
21         System.out.println("------------------");
22         int[] arr4 = new int[2];
23         System.out.println(arr4[0]);
24         System.out.println(arr4[1]);
25         System.out.println("------------------");
26         long[] arr5 = new long[2];
27         System.out.println(arr5[0]);
28         System.out.println(arr5[1]);
29         System.out.println("------------------");
30         boolean[] arr6 = new boolean[2];
31         System.out.println(arr6[0]);
32         System.out.println(arr6[1]);
33         System.out.println("------------------");
34         float[] arr7 = new float[2];
35         System.out.println(arr7[0]);
36         System.out.println(arr7[1]);
37         System.out.println("------------------");
38         double[] arr8 = new double[2];
39         System.out.println(arr8[0]);
40         System.out.println(arr8[1]);
41         System.out.println("------------------");
42         //定义字符串数组
43         String[] arr9 = new String[2];
44         System.out.println(arr9[0]);
45         System.out.println(arr9[1]);
46         
47     }
48     
49     
50 }

 

 

 

































以上是关于第7天的主要内容,如果未能解决你的问题,请参考以下文章

第7天

第 7 行的 InflateException 二进制 XML 文件:膨胀类片段时出错

30天Python入门到进阶——第7天:函数

android.view.inflateexception 二进制 xml 文件第 7 行错误膨胀类片段

Java日志第14天 2020.7.19

第17月第7天 iOS 数组越界,防Crash处理