方法(函数):

格式:

修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) {
方法体语句;
return 返回值;
}

 

详细解释:
修饰符:例如 public static。后面我们再详细的讲解其他的修饰符。
返回值类型:就是功能结果的数据类型。
方法名:符合命名规则即可。方便我们的调用。
参数:
实际参数:就是实际参与运算的。
形式参数;就是方法定义上的,用于接收实际参数的。
参数类型:就是参数的数据类型
参数名:就是变量名
方法体语句:就是完成功能的代码。
return:结束方法的。
返回值:就是功能的结果,由return带给调用者。

调用方法:

public class scanner {
    public  static void main(String[] args){
        int a = 3;
        int b =4;
        //第一种方法:单独调用
        sum(a,b);
        //第二种方法:赋值调用
        int result = sum(a,b);
        //第三种方法:输出调用
        
    }

    public static int sum(int a ,int b){
        int c = a+b;
        return c;
    }
}

在void类型的返回值的方法调用:(void表示没有返回值)

只能进行单独调用

 

方法的重载:

java允许方法使用一个名字,用传入的参数识别这些方法:

例如:

//在下面这个例子中,如果我们不写int的sum方法,他会直接调用float的方法进行使用,会根据大小向下找。
    public static void main(String[] args) {
        //jvm会根据不同的参数去调用不同的功能
     //在下面这个例子中,如果我们不写int的sum方法,他会直接调用float的方法进行使用
System.out.println(sum(10,20)); System.out.println(sum(10,20,30)); System.out.println(sum(10,20,30,40)); System.out.println(sum(10.5f,20f)); } //需求1:求两个数的和 public static int sum(int a,int b) { System.out.println("int"); return a + b; } //需求2:求三数的和 /* public static int sum1(int a,int b,int c) { return a + b + c; } */ public static int sum(int a,int b,int c) { return a + b + c; } //需求3:求四个数的和 /* public static int sum2(int a,int b,int c,int d) { return a + b + c + d; } */ public static int sum(int a,int b,int c,int d) { return a + b + c + d; } public static float sum(float a,float b) { System.out.println("float"); return a + b; }

 

java中的内存分配:

java程序为了提高程序的效率,就对数据进行了不同空间的分配。

具体的是划分为了5个内存空间

1.栈:存放的是局部变量

2.堆:存放的是所有new出来的东西

3.方法区:面向对象有关

4本地方法区:和系统相关

5.寄存器:CPU使用

栈的内存特点:

存储的是一个变量名,当有初始化操作的时候,就会将变量名和堆中的内存地址绑定,

并且在栈内存的数据用完就释放掉。

堆的内存特点:

1.每一个new出来的东西都有地址值

2.每个变量都有默认值

  byte,short,int,long 0

  float,double 0.0

  char “\u0000” (空值)

  boolean false

  引用类型 null

3.使用完毕就变成了垃圾,但是没有立即回收。会在垃圾回收器空闲的时候回收

 

String的地址比较和内容比较:

==:地址值比较

equals()方法:内容比较

System.out.println(ss.equals(str));//比较的是字符串的内容

数组:

数组是存储多个变量的地方,但是这些变量的数据类型要一致。

当多个变量指向一个数组的时候,任意一个变量的操作,对数组都生效,

有点像python的可变类型的列表,

定义格式:

A:数据类型[] 数组名;
B:数据类型 数组名[];

注意:数组只有初始化之后才能进行使用

两种初始化方式的区别:

a:动态初始化 只指定长度,由系统给出初始化值
b:静态初始化 给出初始化值,由系统决定长度(用的较多)

动态初始化数组:

 public static void main(String[] args){

    //动态数组的定义

    int [] arr_d = new  int[3];
    System.out.println(arr_d);
    System.out.println(arr_d[0]);
    System.out.println(arr_d[1]);
    System.out.println(arr_d[2]);
    /*
    [I@1b6d3586
    0
    0
    0
    */

    }

静态初始化数组:

格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};


简化格式: 数据类型[] 数组名 = {元素1,元素2,…};

public static void main(String[] args) {
        //定义数组
        int[] arr = {1,2,3};
        
        System.out.println(arr);
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
    }

数组的逆序

public static void reverse2(int[] arr) {
        for(int start=0,end=arr.length-1; start<=end; start++,end--) {
            int temp = arr[start];
            arr[start] = arr[end];
            arr[end] = temp;
        }
    }

二维数组:

就是数组中的元素还是数组的形式

动态初始化:

int[][] arr = new int[3][2]

静态初始化:

基本格式:
数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2...},{元素1,元素2...},{元素1,元素2...}};
简化版格式:
数据类型[][] 数组名 = {{元素1,元素2...},{元素1,元素2...},{元素1,元素2...}};

例如:

int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
int[][] arr = {{1,2,3},{4,5},{6}};

二维数组的内存绑定:

在堆中将2层数组的地址赋值给第一层数组,

然后栈中的变量在和堆中的一层数组的地址进行绑定

打印杨辉三角练习:

import java.util.Scanner;
public class java_start {
    //打印杨辉三角
    public static void main(String[] args){


        Scanner sc = new Scanner(System.in);

        System.out.println("请输入一个数字(1-9):");
        int n = sc.nextInt(); 
        int [][] sanjiao = new int[n][n];  
        for (int i=0;i<sanjiao.length;i++){
            sanjiao[i][0] =1;
            sanjiao[i][i] = 1;

          
            if (i>1){
                for (int j=1;j<i;j++){
                    sanjiao[i][j] = sanjiao[i-1][j-1]+sanjiao[i-1][j];
                }
            }
            }
        for(int i=0;i<sanjiao.length;i++){
            for (int j=0;j<=i;j++){
                System.out.print(sanjiao[i][j]);
            }
            System.out.println(" ");
        }
        }

    }

 

Java中的参数传递问题:

基本类型:

类比python的不可变类型

形式参数的改变对实际参数没有影响。

引用类型:

数组,一个位置改变了数组,他就变了,类比python的可变类型

形式参数的改变直接影响实际参数。

可变参数:

public static int connInt(int ...is){//可变长参数,数组的扩容
        int sum=0;
        for (int i = 0; i < is.length; i++) {
            sum+=is[i];
        }
        return sum;
    }
    //Object :
    public static String connString(Object ...o){ 
        String s="";
        for (int i = 0; i < o.length; i++) {
            s+=o[i];
        }
        return s;
    }

 

posted on 2019-03-26 20:05  睡觉的阿狸  阅读(164)  评论(0编辑  收藏  举报