方法

方法简介

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

使用步骤
  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. 【阿里云】在 Windows Server 2016 下使用 FileZilla Server 安装搭建 FTP 服务

     Windows Server 2016 下使用 FileZilla Server 安装搭建 FTP 服务 一.安装 Filezilla Server 下载最新版本的 Filezilla Server ...

  2. ASP.NET Zero--后端应用程序

    后端应用程序 这是用户名和密码输入的实际应用程序.您将主要在此应用程序上添加您的业务需求. 应用文件夹 后端应用程序默认内置在专用区域,名为“ App ”,但可以在创建解决方案时确定.因此,所有控制器 ...

  3. Cube的高级设置

    分享来源地址:http://bigdata.51cto.com/art/201705/538648.htm Cube的高级设置 随着维度数目的增加,Cuboid 的数量会爆炸式地增长.为了缓解 Cub ...

  4. 这么小的key-val数据库居然也支持事务——与短跑名将同名的数据库Bolt

    传送门: 柏链项目学院 什么是Bolt?   Bolt是一个纯净的基于go语言编写的key-val数据库,该项目受到LMDB项目的启发,目标是提供一个不需要完整服务器的简单.快速.可靠的数据库.    ...

  5. Python简介之探观止矣

    Python是一门什么样的编程语言编程语言主要分为编译型和解释型,静态语言和动态语言,强类型和弱类型,混合语言等.编译型语言:通过编译器把源代码编译(compile)成机器语言,在经过链接(linke ...

  6. c/c++ 网络编程 UDP 改变网卡的硬件地址

    网络编程 UDP 改变网卡的硬件地址 在程序里动态改变网卡的硬件地址 1,取得网卡的硬件地址 #include <stdio.h> #include <string.h> #i ...

  7. Python爬虫之pyquery库的基本使用

    # 字符串初始化 html = ''' <div> <ul> <li class = "item-0">first item</li> ...

  8. 英语口语练习系列-C09-常用动词

    <先秦 · 关雎> 关关雎鸠,在河之洲.窈窕淑女,君子好逑. 参差荇菜,左右流之.窈窕淑女,寤寐求之. 求之不得,寤寐思服.悠哉悠哉,辗转反侧. 参差荇菜,左右采之.窈窕淑女,琴瑟友之. ...

  9. day 6 - 1 知识点小节

    python2 与 python3 的区别 1. print.input.生成器 #python2 print() print 'abc' range() xrange() 生成器 raw_input ...

  10. Django REST framework基础:解析器和渲染器

    解析器 解析器的作用 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据.本质就是对请求体中的数据进行解析. 在了解解析器之前,我们要先知道Accept以及ContentTy ...