***********************学习技巧(原则)******************************

3W1H


一.why 为什么用、为什么学

为什么用数组、什么时候用


二.what 是什么


什么是数组


三.how 怎么用


如何定义数组、语法


四.where 用在哪


实际需求 实际的使用场景

 


***********************方法 Method ******************************


一.why 为什么用方法 什么时候用


凡是碰到重复(出现二次或者是二次以上的代码)的代码,考虑使用方法


需求1:

打印三行数字

111
222
333

System.out.println("111");
System.out.println("444");
System.out.println("333");


需求2:

再打印一遍

System.out.println("111");
System.out.println("444");
System.out.println("333");


只给50分


虽然实现了需求,但是违反软件编程中一个原则:DRY原则


Don't Repeat Yourself 不要重复你自己 不要复制、粘贴代码


缺点:


(1)代码冗余、不可复用


(2)不可维护


需求变了222----->444 每处都要改 改动多 浪费时间 叫做不可维护

 

二.什么是方法


复用代码的最基本的单位........相当于c中的函数

 

三.how 如何定义方法

 

程序员自己定义方法,可以参照main方法


public static void main(String[] args){


}


public 公有的


static 静态的 自己的定义的方法 static 可写 可不写

1. 静态方法

2. 实例方法


void 返回值
1. 如果方法没有返回值 写void void代表没有返回值

2. 如果方法有返回值 写上返回值的类型 int String ...


main 方法名, 使用小驼峰命名方式 LowerCamelCase


String[] args 形参 如果定义多个,多个形参之间使用 ,隔开

 

*****************************静态方法的定义和调用*********************************


1.定义

需要加static

2.调用


类名.方法名();

演示代码如下:

public class TestStaticMethod{

public static void main(String[] args){

System.out.println("演示静态方法的使用");
//2.调用
//类名.方法名()
TestStaticMethod.print123();

System.out.println("程序结束!");

}


//1.定义
//需要加static
public static void print123(){

System.out.println("111");
System.out.println("222");
System.out.println("333");
}
}

 


*****************************实例方法的定义和调用*********************************


/**
作者: zhangzy<br>
公司: 蓝桥软件学院<br>
时间: 2017-06-26上午
功能: 演示实例方法的定义和调用
*/


public class TestNoneStaticMethod{

public static void main(String[] args){

System.out.println("演示实例方法的使用");
//2.调用
//(1) 创建对象
// 类名 对象名 = new 类名();
TestNoneStaticMethod test = new TestNoneStaticMethod();
//(2) 对象名.方法名()
test.print123();
test.print123();
System.out.println("程序结束!");

}


//1.实例方法的定义
//不需要加static
public void print123(){

System.out.println("111");
System.out.println("444");
System.out.println("333");
}
}

 

*****************************按照带不带返回值来划分方法*********************************


一.不带返回值的方法


void 表示没有返回值


没有返回值的方法 不需要写return


public void print123(){

System.out.println("111");
System.out.println("444");
System.out.println("333");
}


二.带返回值的方法

需要写上返回值的类型

带返回值的方法 一定要加return


需求: 求两数之和

 

public static void main(String[] args){

int result = 演示带返回值的方法.sum(10,20);

System.out.println("result=" + result);

}


//需求: 求两数之和
public static int sum(int x,int y){

int z = x + y;

return z;// 作用: 1. 结束该方法 2.并且返回一个值 (谁调用返回给谁)

}
}


***********************方法的按值传递******************************


需求: 如何实现两数交换

 

方法的按值传递, 顺便讲解 虚拟机栈

数据结构:


栈: 先进后出

生活中 米缸

 

虚拟机栈: java程序执行的时候 需要用到的一种内存空间...内层结构类似于数据结构中栈的概念。

方法的执行需要用到虚拟机栈


1.方法调用的时候要入栈

2.方法执行完毕以后要出栈


局部变量是在栈里的

 

 

演示代码:

public class TestChange{

public static void main(String[] args){

int x = 10;
int y = 20;

//int temp x y
TestChange.change(x,y);
System.out.println("交换后x=" + x);
System.out.println("交换后y=" + y);

 

}


//按值传递
//实质 相当于 二进制位的拷贝
//就是赋值 x(change)= x(main 10) y(change)=y(main 20)
public static void change(int x,int y){
System.out.println("change");
int temp = x;
x = y;
y = temp;

System.out.println("change方法中x=" + x);
System.out.println("change方法中y=" + y);

}
}

***************************递归***********************************

一.什么是递归


方法自己调用自己叫做递归...


public void test(){

test();
}


死循环


递归程序一定要有 递归出口:


递归出口: 当满足某一个条件的时候,能让递归程序结束..这个条件叫做递归出口...


二.how


if(递归出口){

return 值;
}else{

执行递归公式
}

 

需求: 使用递归实现 求 1..n的累加和
sum(n) = n + sum(n-1)

sum(100) = 100 + sum(99)

sum(99) = 99 + sum(98)

sum(98) = 98 + sum(97)

...

sum(1) = 1


演示代码:


/**
作者: zhangzy<br>
公司: 蓝桥软件学院<br>
时间: 2017-06-26 下午
功能: 演示递归
*/
public class TestDiGui{

public static void main(String[] args){

int result = TestDiGui.sum(100);
System.out.println("result=" + result);
}

public static int sum(int n){

if(n==1){
return 1;
}else{

return n + sum(n-1);
}
}


}

 

需求2: 递归实现斐波那契数列

 

递归的特点:

优点

代码简单、精巧、易懂

缺点

执行效率低、浪费内存,如果对效率要求比较高 尽量不要使用递归....

 

**递归都可以使用 循环 来改写