方法概念
为解决某些问题的行为
方法的好处
如果需要使用,随时调用;方法定义一次就够了;提高开发效率;
方法定义
访问修饰符 返回值类型 方法名(参数类型1 参数名,...){
//方法体
return 返回值;
}
访问修饰符:public protected private default static final
返回值类型:基本数据类型 引用数据类型
参数类型:基本数据类型 引用数据类型
return:结束该方法
返回值:返回给调用者使用,注:类型一定与返回值类型一致。常量、赋值过的变量、有计算结果的表达式。
访问修饰符 void 方法名(){
//方法体
}
package com.m.demo;
public class Person {
public void showInfo() {
System.out.println("hello");
}
}
class Demo1 {//测试类
public static void main(String[] args) {
Person p=new Person();
p.showInfo();
}
}
package com.m.demo;
//无参无返回值
public class PrintStart {
public void showStart() {
for(int i=0;i<3;i++) {
for(int j=0;j<4;j++) {
System.out.print("*");
}
System.out.println();
}
}
}
class demo2{
public static void main(String[] args) {
PrintStart ps=new PrintStart();
ps.showStart();
}
}
package com.m.demo;
//有参无返回值
public class Counter {
public void compter(int a,int b) {
System.out.printf("%d+%d=%d",a,b,a+b);
}
}
class demo3{
public static void main(String[] args) {
Counter c=new Counter();
c.compter(1, 2);
}
}
package com.m.demo;
//无参有返回值
public class Ten {
public int tenT() {
int t=1;
for(int i=1;i<=10;i++) {
t*=i;
}
return t;
}
}
class demo4{
public static void main(String[] args) {
System.out.println("10的阶乘:"+new Ten().tenT());
}
}
调用方法
- 创建对象
- 对象名.方法名()
调用注意
- 是否有返回值
- 形参实参保持一致
- 方法返回值的特点(个数、类型)接收要保持一致
方法重载
实现功能的时候,遇到功能一样,但是可以使用多种方法来实现,如果方法名取不一样,使用效率不高
- 方法名一样
- 方法形参列表不一样:个数,类型,顺序
- return和访问修饰符无影响
- 方法重载需写在一个类中
package com.m.demo;
public class Counter {
public void computer(int a,int b) {
System.out.printf("%d+%d=%d",a,b,a+b);
}
public int computer1(int a,int b) {//名字不一样
return a+b;
}
public void computer(int a,int b,int c) {
System.out.printf("%d+%d+%d=%d",a,b,c,a+b+c);
}
public void computer(double a,double b) {
System.out.printf("%.2f+%.2f=%d",a,b,a+b);
}
}
class demo3{
public static void main(String[] args) {
Counter c=new Counter();
System.out.println(c.computer1(1, 2));
}
}
//小例子
package com.m.demo;
import java.util.Scanner;
public class User {
String username="abc";
String password="123";
// 方法1
public boolean login(String usn,String psw) {
boolean f=false;
if(username.equals(usn)&&password.equals(psw)) {
f=true;
}
return f;
}
// 方法2
public boolean login(String usn,String psw,boolean flag) {
if(username.equals(usn)&&password.equals(psw)) {
flag=true;
}
return flag;
}
}
class demo5{
public static void main(String[] args) {
User u=new User();
System.out.println("请输入用户名密码:");
Scanner s=new Scanner(System.in);
if(u.login(s.next(), s.next())) {
System.out.println("成功");
}else {
System.out.println("失败");
}
}
}
单元测试
用来简化,更方便来进行代码测试工作
jar包用来封装java的类
步骤:
- 导入2个第三方的jar包。(java本身不提供单元测试)
- hamcrest-core-1.3.jar;junit-4.12.jar;
- 新建文件夹lib->拷贝到目录下
- files->project Structure->Model->dependens->+选择第一个 选择jar包->应用
全局变量、局部变量
全局变量:成员变量,定义在类中,方法外
局部变量:定义在方法中、{}、形参
区别:
1 初始值不同:
成员变量会自动被赋值:默认值
局部变量不会默认初始值,需手动赋值
2. 定义的位置不同
3. 在内存中的位置不同:
成员变量:堆内存中
局部变量:栈内存中
4 生命周期不同:
成员变量:当new对象的时候,jvm会在堆空间中,创建出来成员变量并附初始值,堆空间销毁时,成员变量也销毁
局部变量:当方法被压入栈中的时候,就会产生局部变量,如果方法弹栈,局部变量随之销毁
5.使用范围不同:
成员变量:类中的任何位置
局部变量:方法中使用,不能跨方法