Java入门

1.Java简介

1.1什么是Java

简单地说,Java 是由 Sun Microsystems 公司于 1995 年推出的一门面向对象程序设计语言。2010 年 Oracle 公司收购 Sun Microsystems,之后由 Oracle 公司负责 Java 的维护和版本升级。Java 平台已经嵌入了几乎所有的操作系统。这样 Java 程序只编译一次,就可以在各种系统中运行。

Java最常用的版本是Java8.

1.2Java的特点

Java语言的风格与C语言、C++类似,但是Java是一门纯粹的面向对象语言,它在继承了C++的面向对象的特点之外,还摒弃了C++一些缺点,如指针和多继承等。Java还增加了垃圾回收机制,释放掉不被使用的内存空间,不需要我们手动释放内存。总之,Java有许多优良特性:

  • 面向对象

    Java 是一种面向对象的语言,它对对象中的类、对象、继承、封装、多态、接口、包等均有很好的支持。为了简单起见,Java 只支持类之间的单继承,但是可以使用接口来实现多继承。使用 Java 语言开发程序,需要采用面向对象的思想设计程序和编写代码。

  • 平台无关性

    平台无关性的具体表现在于,Java 是“一次编写,到处运行(Write Once,Run any Where)”的语言,因此采用 Java 语言编写的程序具有很好的可移植性,而保证这一点的正是 Java 的虚拟机机制。在引入虚拟机之后,Java 语言在不同的平台上运行不需要重新编译。

  • 解释执行

    Java 程序在 Java 平台运行时会被编译成字节码文件,然后可以在有 Java 环境的操作系统上运行。在运行文件时,Java 的解释器对这些字节码进行解释执行,执行过程中需要加入的类在连接阶段被载入到运行环境中。

  • 多线程

    Java 语言是多线程的,这也是 Java 语言的一大特性,它必须由 Thread 类和它的子类来创建。Java 支持多个线程同时执行,并提供多线程之间的同步机制。任何一个线程都有自己的 run() 方法,要执行的方法就写在 run() 方法体内。

  • 分布式

    Java 语言支持 Internet 应用的开发,在 Java 的基本应用编程接口中就有一个网络应用编程接口,它提供了网络应用编程的类库,包括 URL、URLConnection、Socket 等。Java 的 RIM 机制也是开发分布式应用的重要手段。

  • 健壮性

    Java 的强类型机制、异常处理、垃圾回收机制等都是 Java 健壮性的重要保证。对指针的丢弃是 Java 的一大进步。另外,Java 的异常机制也是健壮性的一大体现。

  • 安全性高

    Java 通常被用在网络环境中,为此,Java 提供了一个安全机制以防止恶意代码的攻击。除了 Java 语言具有许多的安全特性以外,Java 还对通过网络下载的类增加一个安全防范机制,分配不同的名字空间以防替代本地的同名类,并包含安全管理机制。

1.3JDK、JRE、JVM
  • JVM(Java Virtual Machine),Java虚拟机,java程序需要在jvm上运行

  • JRE(Java Runtime Environment),Java运行环境,包含了JVM和Java的核心类库(可供我们直接使用的代码)

  • JDK(Java Development Kit)称为Java开发工具,包含了JRE和开发工具

2.Java入门

2.1常用Dos命令

win + R 输入cmd进入Dos命令窗口,以下是常用的Dos命令

操作说明
盘符名称:盘符切换。E:回车,表示切换到E盘。
dir查看当前路径下的内容。
cd 目录进入单级目录。cd java
cd …回退到上一级目录。
cd 目录1\目录2…进入多级目录。cd java\JavaSE
cd \回退到盘符目录。
cls清屏。
exit退出命令提示符窗口。
2.2JDK下载及安装

首先我们需要下载 java 开发工具包 JDK,下载地址:https://www.oracle.com/java/technologies/downloads/,在下载页面中根据自己的系统选择对应的版本,傻瓜式安装点击下一步,安装时可以自定义安装目录,如E:\jdk\jdk1.8.0_241,同时也可以自定义JRE的目录

2.3Java环境变量的配置

打开高级程序设置,点击环境变量,在系统变量中新建变量名JAVA_HOME,路径选择JDK安装路径,如E:\jdk\jdk1.8.0_241,点击保存

uTools_1663655410136

点击path,在path中新建%JAVA_HOME%\bin和%%JAVA_HOME%\jre\bin,点击确定

uTools_1663655410136

2.4第一个程序HelloWorld

新建文本文档,在文件中书写如下代码,把文件命名为HelloWorld.java

public class HelloWorld {
	public static void main(String[] args) {
		System.out.println("HelloWorld");
	}
}

打开Dos窗口,分别执行

javac HelloWorld.java //生成.class文件

java HelloWorld //运行HelloWorld.class文件

输出结果HelloWorld

3.注释、数据类型、标识符、关键字

3.1注释

注释是对代码的解释和说明,可以提高代码的可读性,注释中的内容不会被执行,注释包括以下三种

3.1.1.单行注释

单行注释的格式是使用//,从//开始至本行结尾的文字将作为注释的内容

例如:

//我写在双斜杠的后面,我是注释内容
3.1.2.多行注释

多行注释的格式是使用/* 和 */将一段较长的注释括起来,即使中间的内容有多行也不会出问题。

例如:

/*我是多行注释,虽然我只有一行*/
/*
	    					  _ooOoo_
                             o8888888o
                             88" . "88
                             (| -_- |)
                             O\  =  /O
                          ____/`---'\____
                        .'  \\|     |//  `.
                       /  \\|||  :  |||//  \
                      /  _||||| -:- |||||-  \
                      |   | \\\  -  /// |   |
                      | \_|  ''\---/''  |   |
                      \  .-\__  `-`  ___/-. /
                    ___`. .'  /--.--\  `. . __
                 ."" '<  `.___\_<|>_/___.'  >'"".
                | | :  `- \`.;`\ _ /`;.`/ - ` : | |
                \  \ `-.   \_ __\ /__ _/   .-` /  /
           ======`-.____`-.___\_____/___.-`____.-'======
                              `=---='
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                      佛祖保佑        永无BUG
             佛曰:
                    写字楼里写字间,写字间里程序员;
                    程序人员写程序,又拿程序换酒钱。
                    酒醒只在网上坐,酒醉还来网下眠;
                    酒醉酒醒日复日,网上网下年复年。
                    但愿老死电脑间,不愿鞠躬老板前;
                    奔驰宝马贵者趣,公交自行程序员。
                    别人笑我忒疯癫,我笑自己命太贱;
                    不见满街漂亮妹,哪个归得程序员?
*/
3.1.3.文档注释

文档注释以/**开始,以*/结束。

/**
    我是神秘的文档注释,
    等你们学习了方法,我再让你看看我的强大。
 */
3.2数据类型
3.2.1基本数据类型

在Java基本数据类型中,整型默认为int,浮点型默认为double

数据类型关键字所占字节范围默认值
整形byte1-27~27 - 10
short2-215~215- 10
int4-231~231 - 10
long8-263~263 - 10L
浮点型float40.0F
double80.0
布尔型boolean2true,falsefalse
字符型char2\u0000-\uffff‘\u0000’与0
3.2.2引用数据类型

String类、集合以及各种类都是引用数据类型,在后续会详细介绍

3.3标识符

Java 所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。在使用标识符时需要注意:

  • 所有的标识符都应该以字母(A-Z 或者 a-z),$、或者 _ 开始
  • 首字符之后可以是字母(A-Z 或者 a-z),$,_ 或数字的任何字符组合
  • 关键字不能用作标识符
  • 标识符是大小写敏感的
3.4关键字

Java中具有特殊含义的单词叫做关键字,这些关键字不能用作变量,关键字包括:

  • 数据类型:byte、short、int、long、float、double、boolean、char、class、interface
  • 流程控制:if、else、do、while、for、switch、case、default、break、continue、return、try、catch、finally
  • 修饰符:public、protected、private、final、void、static、strict、abstract、transient、synchronized、volatile、native。
  • 动作:package、import、throw、throws、extends、implements、this、supper、instanceof、new。
  • 保留字:true、false、null、goto、const

4.常量和变量

4.1常量

常量就是一个确定的值,通过数据直接进行表示,包括整型、浮点型、字符型、布尔型。

4.1.1常量的定义

在Java中用关键字final来定义一个常量,用来表示一个不变的量,如

public class Demo {
    // 静态常量
   public static final int   MIN_VALUE = 0x80000000;
   public static final int   MAX_VALUE = 0x7fffffff;
    // 声明成员常量
    final int y = 10;
    public static void main(String[] args) {
        // 声明局部常量
        final double x = 3.3;
    }
}
4.1.2常量的分类

如上述代码所示,常量分为三种

  • 静态常量

    在类中用static final修饰,无需创建对象就可使用,如用public修饰,在类外部可以通过类名.常量的方法使用

  • 成员常量

    在类中用final修饰

  • 局部常量

    在方法中final修饰,只能在方法内部使用

4.1.3使用常量的注意点
  • 为了与变量进行区分,常量在使用时通常全大写;
  • 常量在定义时就要初始化;
  • final在修饰基本数据类型时表示是常量,在修饰类时表示该类不能继承
4.2变量

变量表示可以进行修改,在变量使用时要注意先声明后使用

4.2.1变量的声明及使用
int x;
x = 1;
double y = 3.14
String cxk = "练习时长两年半的个人练习生";

变量可以先声明后赋值,也可以在声明时直接进行赋值

4.2.2变量的分类
public class Demo {
    // 静态变量
   public static String cxk = "练习时长两年半的个人练习生";
    // 声明全局常量
    int y = 10;
}

4.2.2.1静态变量

在类中用static修饰,与静态常量相似,可通过Demo.cxk进行访问,无需创建对象

4.2.2.2全局变量

在类中可以直接使用,在类外通过创建对象的方式进行使用

4.2.2.3局部变量
 public static void main(String[] args) {
    	for(int i = 0;i < 10;i++){
    		//局部变量
    		int x = 0;
    		System.out.println("唱,跳,rap,篮球")
    	}
    	String cxk = "练习时长两年半的个人练习生";
        try {
            int x = 10 / 0;
        } catch (Exception e) {//局部代码块变量
            e.printStackTrace();
        } finally {
            System.out.println("cxk");
        }
    	
    }
  • 方法形参变量

    作为方法的参数变量使用,作用域是整个方法

  • 方法内部变量

    在方法内进行定义,在定义到方法结束的这一段时间有效

  • 局部代码块变量

    在局部代码块内进行定义,从定义这个变量开始到代码块结束这一段时间内有效。

5.运算符

计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。我们可以把运算符按照数量分成单目运算符,双目运算符和三目运算符,最基本的运算符包括算术运算符、赋值运算符、逻辑运算符和关系运算符等

5.1运算符分类
5.1.1算数运算符
操作符描述例子
+加法 - 相加运算符两侧的值a+b
-减法 - 左操作数减去右操作数a-b
*乘法 - 相乘操作符两侧的值a*b
/除法 - 左操作数除以右操作a/b
取余 - 左操作数除以右操作数的余数a%b
++自增: 操作数的值增加1a++或++a
自减: 操作数的值减少1a–或–a
public static void main(String[] args) {
    int a = 2;
    int b = 1;
    System.out.println(a + b);
    System.out.println(a - b);
    System.out.println(a * b);
    System.out.println(a / b);
    System.out.println(a % b);
    System.out.println(a++);//先运算再自增
    System.out.println(++a);//先自增再运算
    System.out.println(b--);//先运算再自减
    System.out.println(--b);//先自减再运算
}
5.1.2关系运算符
运算符描述例子
==检查如果两个操作数的值是否相等,如果相等则条件为真。a == b
!=检查如果两个操作数的值是否相等,如果值不相等则条件为真。a != b
>检查左操作数的值是否大于右操作数的值,如果是那么条件为真。a > b
<检查左操作数的值是否小于右操作数的值,如果是那么条件为真。a < b
>=检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。a >= b
<=检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。a <= b
public static void main(String[] args) {
    int a = 2;
    int b = 1;
    System.out.println(a == b);//
    System.out.println(a != b);
    System.out.println(a > b);
    System.out.println(a < b);
    System.out.println(a >= b);
    System.out.println(  a <= b);
}
5.1.3位运算符

假设a = 60,b = 13;它们的二进制格式表示将如下:

a = 0011 1100
B = 0000 1101
-----------------
a&b  = 0000 1100
a | B = 0011 1101
a ^ B = 0011 0001
~a= 1100 0011
操作符描述例子
按位与,如果相对应位都是1,则结果为1,否则为0(a&B),得到12,即0000 1100
|按位或如果相对应位都是 0,则结果为 0,否则为 1(a | B)得到61,即 0011 1101
^如果相对应位值相同,则结果为0,否则为1(a ^ B)得到49,即 0011 0001
按位取反运算符翻转操作数的每一位,即0变成1,1变成0。(〜a)得到-61,即1100 0011
<<按位左移运算符。左操作数按位左移右操作数指定的位数。a << 2得到240,即 1111 0000
>>按位右移运算符。左操作数按位右移右操作数指定的位数。a >> 2得到15即 1111
>>>按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。a>>>2得到15即0000 1111
public static void main(String[] args) {
    int a = 60;
    int b = 13;
    System.out.println(a & b);//12
    System.out.println(a | b);//61
    System.out.println(a ^ b);//49
    System.out.println(~a);//-61
    System.out.println(a<<2);//240
    System.out.println(a>>2);//15
    System.out.println(a>>>2);//15
}
5.1.4逻辑运算符

若A = true,B = false

操作符描述例子
&&逻辑与,当且仅当两个操作数都为真,条件才为真。(A && B)为假。
| |逻辑或,如果任何两个操作数任何一个为真,条件为真。(A | | B)为真。
逻辑非,用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。!(A && B)为真。
public static void main(String[] args) {
    boolean a = true;
    boolean b= false;
    System.out.println(a && b);//false
    System.out.println(a || b);//true
    System.out.println(!a);//false
}
5.1.5赋值运算符
操作符描述例子
=简单的赋值运算符,将右操作数的值赋给左侧操作数C = A + B将把A + B得到的值赋给C
+ =加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数C + = A等价于C = C + A
- =减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数C - = A等价于C = C - A
* =乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数C * = A等价于C = C * A
/ =除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数C / = A,C 与 A 同类型时等价于 C = C / A
(%)=取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数C%= A等价于C = C%A
<< =左移位赋值运算符C << = 2等价于C = C << 2
>> =右移位赋值运算符C >> = 2等价于C = C >> 2
&=按位与赋值运算符C&= 2等价于C = C&2
^ =按位异或赋值操作符C ^ = 2等价于C = C ^ 2
| =按位或赋值操作符C | = 2等价于C = C | 2
5.1.6三目运算符

? :

该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量。

int a = 2;
int b = 1; 
int x = a == b ? a : b;//如果a == b为真,将a赋值给x,如果a == b为假,将b赋值给x

5.1.7 instanceof

该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)

   public static void main(String[] args) {
        String cxk = "练习时长两年半的个人练习生";
        boolean iKun = cxk instanceof String;
        System.out.println(iKun);
    }
5.2运算符优先级

一般而言,单目运算符优先级较高,赋值运算符优先级较低。算术运算符优先级较高,关系和逻辑运算符优先级较低。多数运算符具有左结合性,单目运算符、三目运算符、赋值运算符具有右结合性。

优先级运算符结合性
1()、[]、{}从左向右
2!、+、-、~、++、–从右向左
3*、/、%从左向右
4+、-从左向右
5<<、>>、>>>从左向右
6<、<=、>、>=、instanceof从左向右
7==、!=从左向右
8&从左向右
9^从左向右
10|从左向右
11&&从左向右
12||从左向右
13?:从右向左
14=、+=、-=、*=、/=、&=、|=、^=、~=、<=、>=、>>>=从右向左

6.流程控制语句

在Java中,我们需要对不同的情况进行不同的处理,此时我们就需要流程控制语句进行处理,流程控制语句分为if语句和switch语句

6.1if语句
6.1.1if

if即为条件判断语句,格式如下

if(布尔表达式){
//如果为true执行的操作
}
int a = 2;
int b = 2;
if(a == b){
	System.out.println("你干嘛~~~");
}
6.1.2if else
if(布尔表达式){
//如果为true执行的操作
}else{
//如果为false执行的操作 
}
int a = 2;
int b = 1;
if(a == b){
	System.out.println("你干嘛~~~");
}else{
	System.out.println("你好烦~~~");
}
6.1.3if else if else
if(布尔表达式1){
    布尔表达式1true时执行;
}else if(布尔表达式2){
    布尔表达式2true时执行;
}else if(布尔表达式3){
    布尔表达式3true时执行;
 ...
}else{
    以上布尔表达式都为false时执行;
}
int a = 2;
int b = 1;
if(a == b){
	System.out.println("你干嘛~~~");
}else if(a > b){
	System.out.println("鸡你太美");
}else{
	System.out.println("你好烦~~~");
}

注意:

一旦执行了一个大括号中的语句体,整个if语句就结束了.不可能出现执行两个语句体的情况.
如果大括号中的语句体只有一行代码的时候可以把大括号省略.但是建议永远不要省略

6.2switch语句

使用switch也可以根据判断不同的情况做不同的处理。

switch (表达式) {
			case1:
				语句体1;
				break;//跳出
			case2:
				语句体2;
				break;
			case3:
				语句体3;
				break;
			...
			default:
				语句体n+1;
				break; // 最后一个break语句可以省略,但是推荐不要省略
		}

switch语句从上到下依次执行,直到遇到与表达式值相等的case,此时将会执行case中的语句,如若遇不到则执行default

public class Test {
    public static void main(String[] args) {
        System.out.println("ikun等级考试,请输入1~5分成绩");
        int score = 0;
        boolean temp = true;
        while (temp) {
            Scanner scanner = new Scanner(System.in);
            score = scanner.nextInt();
            temp = false;
            if (score > 5 || score < 0) {
                System.out.println("您的输入有误,请重新输入");
                temp = true;
            }
        }
        test(score);
    }
    static void test(int score){
        switch (score){
            case 5 :
                System.out.println("骨灰级ikun");
                break;
            case 4 :
                System.out.println("真爱粉");
                break;
            case 3 :
                System.out.println("漏出鸡脚");
                break;
            default:
                System.out.println("小黑子");
                break;
        }
    }
}

注意:

如果在case语句中不写break,则会造成case穿透的问题,使程序遇到符合条件的case后一直向下执行,直到遇到break或整个switch执行结束

default可以不写,但是最好写上

if适用于条件复杂的判断,switch适合个数确定的简单判断

7.循环结构

顺序结构的语句只能执行一次,而很多时候我们想重复执行一些语句,这时候就需要使用到循环结构了

循环结构分为以下三种

7.1for循环

for循环的结构如下所示,适用于循环次数确定的情况

for(初始化语句;布尔表达式语句;运算操作){
	循环执行语句
}
public static void main(String[] args) {
    for (int i = 0; i < 5; i++) {
        System.out.println("小黑子你食不食油饼");
    }
}

​ ①先执行初始化语句,

​ ②然后看布尔表达式的结果,

​ 如果为false 循环结束,

​ 如果为true 执行循环体.

​ ③循环体执行完后执行步进语句.然后继续执行②判断布尔表达式的结果(PS:注意,不是初始化语句)

​ 以此类推.

注意:

初始化语句,布尔表达式,运算操作之间用分号进行分隔,但是多个初始化语句和多个运算操作之间用逗号分隔,如

for(int i = 0,j = 1;i < 5;i++,j++){
	System.out.println("cxk rap了" + j + "次");
}

for循环中括号内可以不进行各种操作,但是;不能省略

for(;;){
	System.out.println("小黑子漏出鸡脚了吧");
}

小练习:

1.分别输出1-100和100-1

2.输出1-100的和

3.分别输出1-100内的所有奇数和偶数

7.2while循环

while循环的结构如下所示,适用于循环次数不确定的情况

while(布尔表达式){
	循环执行语句;
}
int i = 0;
while(i < 5){
	System.out.println(i + ".别发那些清朝老图了");
	i++;
}

while循环在执行时,遵循以下规则

①看布尔表达式的结果

​ 如果为false循环结束

​ 如果为true,则执行循环体.

②循环体执行完后继续执行①以此类推

7.3do while

do while和while类似,格式如下,但基本不用

do{
	循环执行语句;
}while(布尔表达式)
int i = 0;
do{
	System.out.println(i);//0 1 2 ...5
}while(i <= 5)

do while在执行时,遵循以下流程

​ ①执行循环体

​ ②然后看布尔表达式的结果

​ 如果为true则继续执行①循环体

​ 如果判断表达式的结果为false则循环结束

​ 以此类推

do while 与 while 的区别就是while先判断后执行,do while先执行再判断

7.4 break continue

在进行循环操作时,有时我们希望跳出某次循环或跳出当前循环,此时我们就需要使用到continue和break

7.4.1 continue

跳过本次循环,只能用在循环中

String cxk = "鸡你太美";
for(int i = 0;i < 10;i++){
    if(cxk.length == 4){
        System.out.println(i);//0 1 2 3 5 ...9
        continue;
	}
}
7.4.2 break

跳过当前循环,只能用于循环和switch语句中

String cxk = "鸡你太美";
for(int i = 0;i < 10;i++){
    if(cxk.length == 4){
        System.out.println(i);//0 1 2 3 4
        break;
	}
}
7.4.3 break跳转到指定标签

Java 提供了一种带标签的 break 语句,用于跳出多重嵌套的循环语句

String cxk = "鸡你太美";
tag:for(int i = 0;i < 10;i++){
  for(int i = 0;i < 10;i++){
  	if(cxk.length == 4){
        System.out.println(i);//0 1 2 3 4
        break tag;
	}
  }
}

循环练习:

1.打印九九乘法表

2.用*打印一个等腰三角形,要求输入数字几,就能打印几层

//输入数字4
   *
  ***
 *****
*******

8.数组

当我们需要存储多个同种数据类型的数据时,一个变量一个变量来声明显然太麻烦了,所以此时我们需要使用数组来解决这个问题

8.1 数组的特点
  • 数组只能保存相同类型的数据,可以是任意数据类型

  • 数组中的数据是有序的,通过数组下标进行访问,数组的下标都是从0开始的

  • 数组的内存空间的地址是连续的

  • 数组一旦初始化,其长度就不能修改

8.2数组的声明和创建
int[] arr = new int[10];//动态初始化,适用于数组长度确定,但是值不确定的情况
int[] arr = new int[]{1,2,3,4};静态初始化,在声明时将值赋给数组
int[] arr = {1,2,3,4};//简单写法,推荐使用
8.3获取数组元素(遍历)

数组中的元素可以通过访问数组下标来获取

int[] arr = {1,2,3,4};
System.out.println(arr[2]);//获取单个元素
char[] str = {'小','黑','子','你','干','嘛'};
for (int i = 0; i < str.length; i++) {//获取全部元素
            System.out.print(arr[i]);
}
//数组中的数据可以进行覆盖
arr[2] = 5;
8.4 For-Each 循环

JDK1.5 引进了一种新的循环类型,被称为 For-Each 循环或者加强型循环,它能在不使用下标的情况下遍历数组。

语法格式如下:

for(type element: array){
    System.out.println(element);
}
//例:
char[] str = {'小','黑','子','你','干','嘛'};
for (char str1 : str) {//获取全部元素
            System.out.print(str1);
}
8.5二维数组(多维数组)

多维数组可以看做数组的数组,以二维数组为例,可以把二维数组看做一个一维数组,其中每一个元素都是一个一维数组

8.5.1二维数组的声明和赋值
int[][] arr1 = new int[2][3];//直接为每一维分配空间,动态初始化
int[][] arr1 =new int[][]{{1,2,3},{4,5,6}};//静态初始化
String s[][] = new String[2][];//从最高维开始,为每一维分配空间
s[0] = new String[2];
s[1] = new String[3];
s[0][0] = new String("Good");
s[0][1] = new String("Luck");
s[1][0] = new String("to");
s[1][1] = new String("you");
s[1][2] = new String("!");
8.5.2二维数组的遍历
int[][] arr1 =new int[][]{{1,2,3},{4,5,6}};
for (int i = 0; i < arr1.length; i++) {
    for (int j = 0; j < arr1[i].length; j++) {
        System.out.println(arr1[i][j]);
    }
}

练习:

1.定义一个长度为100的int数组,要求里面的元素分别为1,3,5,7,9…最后还要把数组里面的每个元素都打印出来

2.从键盘录入一个数组,要求使用代码对该数组进行从大到小的排序,输出排序后的结果

9.方法

为了解决某一类问题,我们需要学习方法,与C语言中的函数类似

9.1什么是方法

方法是封装的为了解决某一问题的语句集合,方法有以下优点

  • 使程序变得更简短而清晰。
  • 以提高程序开发的效率。
  • 提高了代码的复用性,降低了程序的耦合度。
9.2方法的定义
修饰符 返回值类型 方法名(参数类型 参数名){
    ...
    方法体
    ...
    return 返回值;
}
//例:计算 0 ~ num 的和
public static int test(int num){
	if(num > 0){
		int sum = 0;
		for(int i = 0;i <= num;i++){
			sum += i;
		}
        return sum;
	}else{
		int sum = 0;
		for(int i = 0;i <= num;i--){
			sum += i;
		}
        return sum;
	}
}

方法包含以下部分:

  • 修饰符:这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型
  • 返回值类型:方法可能会返回值,返回值要与返回值类型是一样的数据类型
  • 方法名:方法的实际名称
  • 形参列表:方法括号中定义的变量,方法可以没有形参
  • 实参列表:调用方法时实际传入的值,与形参列表的数据类型一致
  • 方法体:方法执行的语句,是具体解决问题的语句
9.3方法的调用

方法的调用可以分为有返回值的调用和无返回值的调用

无返回值的方法调用是一条语句,当方法返回一个值的时候,方法调用通常被当做一个值。

//
public class TestMax {
   /** 主方法 */
   public static void main(String[] args) {
      int i = 5;
      int j = 2;
      int k = max(i, j);
      System.out.println( i + " 和 " + j + " 比较,最大值是:" + k);
   }

   /** 返回两个整数变量较大的值 */
   public static int max(int num1, int num2) {
      int result;
      if (num1 > num2)
         result = num1;
      else
         result = num2;

      return result; 
   }
     /** 返回两个整数变量较大的值 */
   public static void maxNum(int num1, int num2) {
      int result;
      if (num1 > num2)
         result = num1;
      else
         result = num2;
	 System.out.println("最大值是" + result );
   }
}
9.4方法的重载

在Java中,在同一个类中方法名可以相同,只要方法形参的数据类型不同,形参数量不同即可,即需要形参列表不同

//计算和
public static void add(int a,int b){
        System.out.println(a + b);
    }
    public static void add(double a,double b){
        System.out.println(a + b);
    }
    public static void add(int a,int b,int c){
        System.out.println(a + b + c);
    }
}
9.5可变参数

JDK 1.5 开始,Java支持传递同类型的可变参数给一个方法。

方法的可变参数的声明如下所示:

数据类型... 变量名
typeName... parameterName

在方法声明中,在指定参数类型后加一个省略号(…) 。

一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。

public class VarargsDemo {
    public static void main(String args[]) {
        // 调用可变参数的方法
        printMax(34, 3, 3, 2, 56.5);
        printMax(new double[]{1, 2, 3});
    }
public static void printMax( double... numbers) {
    if (numbers.length == 0) {
        System.out.println("No argument passed");
        return;
    }

    double result = numbers[0];

    for (int i = 1; i <  numbers.length; i++){
        if (numbers[i] >  result) {
            result = numbers[i];
        }
    }
    System.out.println("The max value is " + result);
}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值