***********************学习技巧(原则)******************************
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: 递归实现斐波那契数列
递归的特点:
优点
代码简单、精巧、易懂
缺点
执行效率低、浪费内存,如果对效率要求比较高 尽量不要使用递归....
**递归都可以使用 循环 来改写