方法

方法简介

方法是实现特定功能的代码段的封装,在需要时可以多次调用方法来完成该功能,实现代码复用。

使用步骤
  1. 定义方法
  2. 调用方法

自定义方法

语法:
  修饰符 返回值类型 方法名(参数){ //方法体 }
说明:
  修饰符:对方法的修饰,本篇暂时都写为public static
  返回值类型:方法执行后的返回值类型,如果没有返回值则指定为void
  方法名:采用驼峰命名法,一般使用动词
  参数:执行方法时所需要的信息,参数由参数类型和参数名组成,多个参数之间以逗号隔开

main方法是程序的入口,程序运行时会自动调用该方法。

方法返回值

结束方法执行,后面代码不执行

return关键字的作用:
* 1.返回方法执行后的结果
* 2.结束方法的执行

if (age >= 18) {
return "成年";
} else {
return "未成年";
} 等价于 if (age >= 18) {
return "成年";
}
return "未成年";

方法的调用

在同一个类中,直接使用方法名()调用静态方法
在不同类中,需要使用类名.方法名()调用静态方法

package com.qzcsbj;

public class Test {
public static void main(String[] args) { // Java提供了Math类
int a = 5;
int b = 2;
System.out.println(Math.max(a, b)); // 5
System.out.println(Math.min(a, b)); // 2
System.out.println(Math.random()); // 随机生成[0,1)之间的随机数
// 随机生成[1,100)之间的随机整数
System.out.println((int)(Math.random()*99)+1); //[1,100)
//随机生成[20,100]之间的随机整数
System.out.println((int)(Math.random()*81)+20); //[20,100] getMsg();
}
public static void getMsg(){
System.out.println("hello");
}

递归

方法自己调用自己,称为递归,该方法称为递归方法

必须有退出条件,否则可能会出现死循环,报栈溢出异常

示例:计算x的y次方,如2的5次方

常规方法

public class Test {
public static void main(String[] args) {
System.out.println(calc(2, 5));
}
public static int calc(int x, int y) {
if (y == 0) {
return 1;
}
int result = x;
for (int i = 1; i < y; i++) {
result = result * x;
}
return result;
}
}

递归

public class Test {
public static void main(String[] args) {
System.out.println(calc(2, 5));
}
/*
* 计算x的y次方,如2的5次方
*/
public static int calc(int x, int y) { if (y == 0) {
return 1;
}
return x * calc(x, y - 1);
}
}

其它方法举例

math

数组概述

数组是多个相同类型数据的组合,用来存储相同数据类型的一组数据,实现对这些数据的统一管理
数组属引用类型,数组型数据是对象(Object),数组中的每个元素相当于该对象的成员变量
数组中的元素可以是任何数据类型,包括基本类型和引用类型

声明一个变量就是在内存中划出一块空间
声明一个数组就是在内存中划出一串连续的空间

一维数组

基本用法

声明数组--分配空间--数组赋值--访问元素

声明数组

指定元素的类型

数据类型[] 数组名称; 或 数据类型 数组名称[];    推荐前者

type var[] 或 type[] var;
例如:
  int a[];
  int[] a1;
  double b[];
  Mydate []c; //对象数组
Java语言中声明数组时不能指定其长度(数组中元素的数), 例如: int a[5];  // 非法

分配空间

指定数组长度(长度一旦指定,不能修改),即分配几个连续的空间
数组名称=new 数组类型[大小];

数组赋值

向数组中添加元素,数组名称[下标]=值;

数组元素的引用:访问元素

获取数组中的元素
数组名称[下标];

Java中使用关键字 new 创建数组对象
定义并用运算符 new 为之分配空间后,才可以引用数组中的每个元素;
数组元素的引用方式:数组名[数组元素下标]
  数组元素下标可以是整型常量或整型表达式。如a[3] , b[i] , c[6*i];
  数组元素下标从0开始;长度为n的数组合法下标取值范围: 0 - n-1;如int a[]=new int[3]; 可引用的数组元素为a[0]、a[1]、a[2],最后一个元素是a[a.lenth-1],如果报数组越界(ArrayIndexOutOfBoundsException),那么可能是下标大于等于数组长度、或者下标小于0

  直接访问数组名称会显示数组在内存中的首地址
每个数组都有一个属性 length 指明它的长度,例如:a.length 指明数组 a 的长度(元素个数)

数组元素的默认初始化

数组是引用类型,它的元素相当于类的成员变量,因此数组一经分配空间,其中的每个元素也被按照成员变量同样的方式被隐式初始化。例如:

public class Test {
public static void main(String argv[]){
int a[]= new int[5]; 
System.out.println(a[3]); //a[3]的默认值为0
}
}

数组元素的默认初始值

byte 0
short 0
int 0
long 0
float 0.0
double 0.0
char 空字符
boolean false
String null
public class Test2 {
public static void main(String[] args) { byte[] a = new byte[3];
short[] b = new short[3];
int[] c = new int[3];
long[] d = new long[3];
float[] e = new float[3];
double[] f = new double[3];
char[] g = new char[3];
boolean[] h = new boolean[3];
String[] str = new String[3];
System.out.println(a[0]);
System.out.println(b[0]);
System.out.println(c[0]);
System.out.println(d[0]);
System.out.println(e[0]);
System.out.println(f[0]);
System.out.println(g[0]);
System.out.println(h[0]);
System.out.println(str[0]);
}
}

输出:

0
0
0
0
0.0
0.0 false
null

注意:局部变量没有默认值

int aa;
System.out.println(aa);

Error:(6, 28) java: 可能尚未初始化变量aa

创建基本数据类型数组

Java中使用关键字new 创建数组对象

public class Test{
public static void main(String args[]){
int[] s;
s = new int[10];
for ( int i=0; i<10; i++ ) {
s[i] =2*i+1;
System.out.println(s[i]);
}
}
}

若访问数组的下标超过合法范围, 则在运行时会抛出 ArrayIndexOutOfBoundsException,编译时不会抛

创建对象数组

class MyDate{
private int day;
private int month;
private int year;
public MyDate(int d, int m, int y){
day = d;
month = m;
year = y;
}
public void display(){
System.out.println(day + "-" + month + "-" + year);
}
}

  

public class Test{
public static void main(String args[]){
MyDate[] m;
m = new MyDate[10];
for ( int i=0; i<10; i++ ) {
m[i] =new MyDate(i+1, i+1,1990+i);
m[i].display();
}
}
}

数组初始化

注意:

Java语言中声明数组时(等号左侧变量的声明)不能指定其长度(数组中元素的数)
new后面,如果同时初始化了值,此时不能指定数组长度,否则,必须指定数组长度

        int[] a ;
a = new int[4];
a[0] = 1; int[] a2 = new int[3];
int[] a3 = new int[]{1,2,3};
int[] a4 = {1,2,3};
动态初始化

数组定义与为数组元素分配空间并赋值的操作分开进行。

int a[];
a = new int[3];
a[0] = 3;
a[1] = 9;
a[2] = 8; MyDate dates[];
dates = new MyDate[3];
dates[0] = new MyDate(22, 7, 1964);
dates[1] = new MyDate(1, 1, 2000);
dates[2] = new MyDate(22, 12, 1964);

  

注意:不支持下面写法

int[] a = new int[3];
a = {1, 2, 3};

  

静态初始化

在定义数组的同时就为数组元素分配空间并赋值。此时等号右侧不能指定数组长度。

int [] d = new int[]{2, 3, 4, 5, 6};
可简写为:int[] d = (2, 3, 4, 5, 6); int a[] = {3, 9, 8};

String[] hobbies = new String[]{"游戏", "运动"}; 可简写为:String[] hobbies = {"游戏", "运动"};
 
MyDate dates[] = {   new MyDate(22, 7, 1964),   new MyDate(1, 1, 2000),   new MyDate(22, 12, 1964) };

  

示例

package com.uncleyong;

public class TestArray {
public static void main(String[] args) { //1. 数组的声明
//int i = 0;
int [] a = null; //推荐使用此种方式进行声明.
int b [] = null; //注意: Java语言中声明数组时不能指定其长度(数组中元素的数)
//int [5] c = null; //注意: 若没有为数组变量分配指向的内存空间, 就调用其属性, 会在运行时发生 "空指针异常",也就是调用了地址为null的对象的属性
//System.out.println(a.length); //2. 为数组分配内存空间,new后面必须指定数组长度
a = new int[10]; //3. 获取数组的长度
System.out.println(a.length); //10 //5. 对数组元素进行初始化
for(int i = 0; i < a.length; i++){
a[i] = 100 + i;
} //4. 访问数组的元素: 数组名[数组元素下标]. 注意: 下标从 0 开始, 所以最大值是 lengh - 1, 而不是length;
//数组元素会进行默认的初始化:
for(int i = 0; i < a.length; i++){
System.out.println(a[i]);
} //若访问数组的下标超过合法范围, 则在运行时会抛出 ArrayIndexOutOfBoundsException,编译时不会抛
//a[10] = 10; //数组的静态初始化
int [] c = {1, 2, 3, 4, 5};
int [] d = new int[]{2, 3, 4, 5, 6}; for(int i = 0; i < d.length; i++){
System.out.println(d[i]);
}
}
}
package com.uncleyong;

import java.util.Scanner;

public class Score {
public static void main(String[] args) {
/**
* 从键盘读入学生成绩,找出最高分,并输出学生成绩等级。
* 成绩>=最高分-10 等级为’A’ 成绩>=最高分-20 等级为’B’
* 成绩>=最高分-30 等级为’C’ 其余 等级为’D’
* 提示:先读入学生人数,根据人数创建int数组,存放学生成绩。
*/
//1. 创建 Scanner 类
Scanner scanner = new Scanner(System.in); //2. 读入要录入的学生人数
System.out.print("请输入学生人数:");
int count = scanner.nextInt(); //3. 创建一个 int 类型的数组, 用于存放学员的成绩, 数组的长度为 2 所录入数值
int [] scores = new int[count]; //4. 利用循环录入学生的成绩, 同时得到最高分. 把学生成绩录入到 3 声明的数组中.
int highScore = 0; for(int i = 0; i < scores.length; i++){
System.out.print("请输入score:");
scores[i] = scanner.nextInt(); if(scores[i] > highScore){
highScore = scores[i];
}
} //5. 遍历 3 声明的数组, 根据最高分, 获取学生的升级等级.
for(int i = 0; i < scores.length; i++){
if(scores[i] >= highScore - 10){
System.out.println("student " + i + " score is " + scores[i] + " grade is A");
}else if(scores[i] >= highScore - 20){
System.out.println("student " + i + " score is " + scores[i] + " grade is B");
}else if(scores[i] >= highScore - 30){
System.out.println("student " + i + " score is " + scores[i] + " grade is C");
}else{
System.out.println("student " + i + " score is " + scores[i] + " grade is D");
}
}
}
}

  

增强for循环

增强for循环,用来对集合进行遍历操作,也称为foreach循环(foreach本身并不是java关键字)
语法:for(元素类型 循环变量:集合){ }
适用于遍历所有元素

import java.util.Arrays;

public class Test {
public static void main(String[] args) {
int[] nums = { 1, 2, 3 }; // 普通的for循环
for (int i = 0; i < 5; i++) {
System.out.println(nums[i]);
}
System.out.println(); // 增强for循环
for (int n : nums) {
System.out.println(n);
} //Arrays类的toString()方法,将数组转换为字符串
System.out.println(Arrays.toString(nums)); // [1, 2, 3],数组元素以逗号隔开,放到中括号里
}
}

栈和堆

Java中内存的分类:栈内存、堆内存

区别是:
  栈的存取速度比堆要快
  栈内存要小于堆内存

基本数据类型和引用数据类型的存储方式

根据存储方式的不同,数据类型主要分为两种:
  基本数据类型(共8种)
    byte short int long float double boolean char
    定义方式: 数据类型 变量名=值;

  引用数据类型
    除了基本数据类型和null以外的其他数据类型,如String、数组、类、接口....
    定义方式: 数据类型 变量名=new 数据类型(); 其中,String类型比较特殊,因为特别常用,所以JVM对其做了优化,String name = "jack"; 定义数组,new后面不是括号,是[],如:int[] nums = new int[3];
    引用类型的默认值是null

基本数据类型的值存储在栈内存中
引用数据类型的名称存储在栈内存中、值存储在堆内存中

值传递和引用传递

对于基本数据类型,传递的是值
对于引用数据类型,传递的是内存地址
方法传参,与变量赋值是相同的

import java.util.Arrays;

public class Test {
public static void main(String[] args) {
/*
* 基本数据类型
*/
int a = 1;
int b = a; // 将a的值传递给b
b = 2;
System.out.println(a);
System.out.println(b); /*
* 引用数据类型
*/
int[] c = { 1, 2, 3 };
int[] d = c; // 将c的内存地址传递给d,本质上指向同一块内存空间
d[0] = 666;
System.out.println(Arrays.toString(c));
System.out.println(Arrays.toString(d)); /*
* 方法传参,与变量赋值是相同的
*/
change(a,c);
System.out.println(a);
System.out.println(Arrays.toString(c)); } public static void change(int i, int[] arr) {
i = 888;
arr[arr.length - 1] = 999;
}
}

  

多维数组

二维数组

二维数组可以认为是特殊的一维数组,一维数组中的每个元素又是一个一维数组
  分类:
    规则的二维数组:第二维长度相同
    不规则的二维数组:第二维长度不同

二维数组举例

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

Java中多维数组被做为数组的数组处理

Java中多维数组的声明和初始化应按从高维到低维的顺序进行

int t [][] = new int [4][];//t有4行,第一个维数不空即可
t[0] = new int[5]; //每一行都是一个有5个元素的一维数组
t[1] = new int[5];
int t1[][] = new int [][4];    // 非法,等号右侧,一维必须指定,二维可以指定也可以不指定

Java中多维数组不必须是规则矩阵形式
int[][] tt = new int[4][];
tt[0] = new int[2];
tt[1] = new int[4];
tt[2] = new int[6];
tt[3] = new int[8];

int tt[][] = new int[4][5];  // tt是一个4行5列的二维数组

多维数组初始化

静态初始化
int intArray[][] = {{1,2},{2,3},{3,4,5}};
int intArray1[3][2] = {{1,2},{2,3},{4,5}}; //illegal,等号左边不能指定维数
动态初始化
int a[][] = new int[4][5];
int b[][] = new int[3][]
b[0] = new int[2];
b[1] = new int[3];
b[2] = new int[5];

示例

package com.uncleyong;

public class TestArray {
public static void main(String[] args) {
//声明一个二维数组
int [][] aa = new int[5][]; //对二维数组的元素进行初始化: 二维数组的元素是一个一维数组!
//遍历需要使用嵌套的 for 循环.
for(int i = 0; i < aa.length; i++){
aa[i] = new int[i + 1]; // 初始化
for(int j = 0; j < aa[i].length; j++){
aa[i][j] = 1 + i * j;
}
} //对二维数组进行遍历
for(int i = 0; i < aa.length; i++){
for(int j = 0; j < aa[i].length; j++){
System.out.print(aa[i][j] + " ");
} System.out.println();
} }
}

冒泡

import java.util.Arrays;

public class Test {
public static void main(String[] args) {
int[] nums = { 1,2,3,99,128}; // 外层循环控制比较的轮数
for (int i = 0; i < nums.length - 1; i++) {
// 内层循环控制每一轮比较的次数
for (int j = 0; j < nums.length - i - 1; j++) {
if (nums[j] > nums[j + 1]) {
int temp = nums[j + 1];
nums[j + 1] = nums[j];
nums[j] = temp;
}
}
System.out.println("第" + (i + 1) + "轮:" + Arrays.toString(nums));
}
System.out.println("排序后的数组:" + Arrays.toString(nums));
}
}

数组排序

Java.util.Arrays类的 sort() 方法提供了数组元素排序功能,升序

package com.uncleyong;

import java.util.Arrays;

public class Sort {
public static void main(String[] args) {
int [] number = {5,900,1,5,77,30,64,700};
Arrays.sort(number); for(int i = 0; i < number.length; i++)
System.out.print(number[i] + " ");
}
}

1 5 5 30 64 77 700 900

不定长参数

数据类型... 表示不定长参数,特点:
  只能是方法的最后一个参数
  调用方法时参数的个数任意
  一个方法最多只有一个不定长参数
  本质上就是一种特殊的数组,只能作为方法的形参使用
  调用的时候,不定长参数个数可以是0个

public class Test{
public static void main(String[] args) {
// String[] names=new String[]{"tom","jack"};
m1(6, new String[] { "tom", "jack" }); //参数个数固定 m2(6,"tom","jack","alice"); //传递的参数个数任意
m2(6,"tom");
m2(6); //也可以不传
m2(6,new String[] { "tom", "jack" }); //本质上就是数组 }
// 使用数组作为参数
public static void m1(int n, String[] args) {
System.out.println("m1");
} //使用不定长参数
public static void m2(int n,String... args){
System.out.println("不定长参数个数:"+args.length);
if (args.length > 0){
System.out.println("不定长参数第一个:"+args[0]);
}
}
}

练习题(参考答案已放在Q群文件中)

1、随机生成[0,100]之间的随机数,让用户猜生成的数字,如果大了,显示猜大了,如果小了,显示猜小了,如果猜对了,提示共猜了多少次

2、实现将数组中元素反转,int[] nums = {1,2,3,4,5,6,7};

3、使用二维数组打印 10 行的杨辉三角

/**
* 1 (a+b)^0
* 1 1 (a+b)^1
* 1 2 1 (a+b)^2
* 1 3 3 1 (a+b)^3
* 1 4 6 4 1
* 1 5 10 10 5 1
*/

Java【第五篇】基本语法之--数组的更多相关文章

  1. java第五天之---方法与数组

    案例一:从键盘输入两个数据,比较大小 import java.util.Scanner;class FunctionTest { public static void main(String[] ar ...

  2. Java基础语法(8)-数组中的常见排序算法

    title: Java基础语法(8)-数组中的常见排序算法 blog: CSDN data: Java学习路线及视频 1.基本概念 排序: 是计算机程序设计中的一项重要操作,其功能是指一个数据元素集合 ...

  3. 第五篇 :微信公众平台开发实战Java版之如何获取公众号的access_token以及缓存access_token

    一.access_token简介 为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台 开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等, 开 ...

  4. 用仿ActionScript的语法来编写html5——第五篇,Graphics绘图

    用仿ActionScript的语法来编写html5——第五篇,Graphics绘图 canvas本身就是一个Graphics,可以直接进行绘图在actionscript里面,每个Sprite都有一个G ...

  5. JavaSE入门学习9:Java基础语法之数组

    一数组的定义 数组能够理解为是一个巨大的"盒子",里面能够按顺序存放多个类型同样的数据.比方能够定义int型的数组 scores存储4名学生的成绩. watermark/2/tex ...

  6. Java基础语法(数组)

    第4天 Java基础语法 今日内容介绍 u 流程控制语句(switch) u 数组 第1章 流程控制语句 1.1 选择结构switch switch 条件语句也是一种很常用的选择语句,它和if条件语句 ...

  7. Java 泛型 五:泛型与数组

    简介 上一篇文章介绍了泛型的基本用法以及类型擦除的问题,现在来看看泛型和数组的关系.数组相比于Java 类库中的容器类是比较特殊的,主要体现在三个方面: 数组创建后大小便固定,但效率更高 数组能追踪它 ...

  8. IT兄弟连 Java语法教程 数组 数组的声明

    Java语言支持两种语法格式来定义数组: type[] arrayName; type arrayName[]; 对这两种语法格式而言,通常推荐使用第一种格式,因为第一种格式不仅具有更好的语义,而且具 ...

  9. Java基础语法(7)-数组

    title: Java基础语法(7)-数组 blog: CSDN data: Java学习路线及视频 1.数组的概述 数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并 ...

  10. 【Python五篇慢慢弹】快速上手学python

    快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...

随机推荐

  1. EBGP在非直连网络时,需要配置ebgp的最大跳数,否则无法建立非直连的EBGP邻居

    结论: 1.默认情况下,EBGP只能在物理直连的路由器之间建立邻居. 2.要想配置非直连设备间的BGP邻居,必须加配置. 组网图: 抓包: 1.默认情况下,EBGP邻居之间的BGP报文的TTL为1. ...

  2. asp.net core webApi 参数保护

    asp.net core webApi 参数保护 Intro asp.net core data protection 扩展,基于 IDataProtector 扩展的数据保护组件,自动化的实现某些参 ...

  3. MySQL5.7参数log_timestamps

    最近测试MySQL 5.7.21  Community Server这个版本的MySQL数据库时,发现其错误日志的时间跟系统当前时间不一致,后面检查发现日期时间格式都是UTC时间,查了一下相关资料,原 ...

  4. Page Cache与Page回写

    综述 Page cache是通过将磁盘中的数据缓存到内存中,从而减少磁盘I/O操作,从而提高性能.此外,还要确保在page cache中的数据更改时能够被同步到磁盘上,后者被称为page回写(page ...

  5. Codechef Bear and Clique Distances

    题目:Bear and Clique Distances 描述:共有N个点,前1—K个点任意两点之间有一条无向边,边的权值为X,再任意给M条边(u,v,w)(不重复),求任意一点到其余各点的最短路. ...

  6. Angular创建路由从主界面跳转到我们的cesium界面

    我们要在一个独立的顶级模块中加载和配置路由器,它专注于路由功能,然后由根模块 AppModule 导入它. 按照惯例,这个模块类的名字叫做 APPRoutingModule,并且位于 src/app  ...

  7. springcloud ribbon 客户端负载均衡用法

    org.springframework.web.util.NestedServletException: Request processing failed; nested exception is ...

  8. ios和安卓H5交互桥接

    ios交互 demo1(摘自网络) <!doctype html> <html> <head> <meta charset="UTF-8" ...

  9. opn要求

    1.在公司 ♦可以通过阿里云的公网ip访问pg 2.不在公司 ♦需要连接VPN才可访问阿里云的公网ip的应用(假定pg),但是特别的应用不在公司也可直接访问(假定gitlab) 思路提示:vpn黑白名 ...

  10. AI AutoML

    AutoML 参考链接: https://arxiv.org/pdf/1810.13306.pdf http://nooverfit.com/wp/7%E4%B8%AA%E4%BD%A0%E5%8F% ...