1.为什么要用带参数的方法?
工作原理:榨汁机扔个苹果到榨汁机里,出来苹果汁;扔桃子进去就出来桃汁;扔个梨进去就出来梨汁。(水果就是参数,汁是返回值)
举例:
package demo2;
public class Zhazhiji {
//带参数的 带返回值的方法
public String zhazhi(String fruit){
String juice=null;
if (fruit.equals("apple")) {
juice="apple juice";
}else if(fruit.equals("peach")){
juice="peach juice";
}else if(fruit.equals("pear")){
juice="pear juice";
}
return juice;
}
}
package demo2;
public class ZhaizhijiTest {
public static void main(String[] args) {
Zhazhiji zz=new Zhazhiji();
String juice=zz.zhazhi("peach");
System.out.println(juice);
}
}
2.如何使用带参数的方法
package demo2;
public class Zhazhziji1 {
public String zhazhi(String fruit){
String juice=fruit+"汁";
return juice;
}
}
package demo2;
public class test {
public static void main(String[] args) {
Zhazhziji1 zz=new Zhazhziji1();
String juice=zz.zhazhi("西瓜");
System.out.println(juice);
}
}
1.定义带参数的方法
语法 <访问修饰符> 返回类型 <方法名>(<形式参数列表>) {
//方法的主体
}
举例:
public class StudentsBiz {
String[ ] names = new String[30];
public void addName(String name) {
//增加学生姓名
}
public void showNames() { //显示全部学生姓名 }
}
2.调用带参数的方法
语法 对象名.方法名(参数1, 参数2,……,参数n)
举例:
public static void main(String[] args) {
StudentsBiz st = new StudentsBiz(); 先实例化对象,再使用方法
Scanner input = new Scanner(System.in);
for(int i=0;i<5;i++){
System.out.print("请输入学生姓名:");
String newName = input.next;
st.addName(newName);
st.addName(newName); 实参的类型、数量、顺序都要与形参一一对应
}
st.showNames();
}
3.带多个参数的方法(增删改学生人数)
举例:
package demo3;
public class StudentBiz {
public String[] students=new String[6]; 里面放的是字符
//添加学生
public void add(String name){
for (int i = 0; i < students.length; i++) {
if (students[i]==null) { 遍历数组使用循环
students[i]=name;
break;
}
}
}
//查看所有学生
public void show(){
for (int i = 0; i < students.length; i++) {
System.out.println(students[i]+" ");
}
}
//查找
public boolean find(int begin,int end,String name){
boolean rs=false;
for (int i = begin; i < end; i++) {
if (students[i].equals(name)) {
rs=true;
break;
}
}
return rs;
}
}
package demo3;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
StudentBiz sbz=new StudentBiz();
//添加学生信息
for (int i = 0; i < sbz.students.length; i++) {
System.out.println("添加第"+(i+1)+"个学生的信息");
String name=input.next();
sbz.add(name);
}
//显示所有学生信息
for (int i = 0; i < sbz.students.length; i++) {
System.out.println(sbz.students[i]);
}
//查找
System.out.println("请输入查找的学生名字");
String findName=input.next();
boolean rs=sbz.find(1, 4, findName);
if (rs) {
System.out.println("success");
}else{
System.out.println("fail");
}
}
}
4.带参方法常见错误
1.调用方法时不能指定实参类型!
//方法定义
public void addName(String name){
//方法体
}
//方法调用
对象名.addName(String "张三");
2.形参和实参数据类型不一致!
//方法定义
public boolean searchName(int start ,int end ,String name){
//方法体
}
//方法调用
String s="开始";
int e=3;
String name="张三";
boolean flag=对象名. searchName(s ,e ,name)
方法调用的是形式上的参数,没有实际值
调用的时候里面写的才是实际参数
3.形参和实参数量不一致!
//方法定义
public boolean searchName(int start,int end,String name){
//方法体
}
//方法调用
int s=1;
int e=3;
boolean flag= 对象名.searchName(s,e);
4.调用方法后没有对返回值作任何处理!
//方法定义
public boolean searchName(int start,int end,String name){
//方法体
}
//方法调用
int s=1;
int e=3;
String name="张三";
对象名.searchName(s,e,name);
作业:修改学生信息
package zuoye;
public class editName {
public String[] customer=new String[5];
//添加客户
public void add(String name){
for (int i = 0; i < customer.length; i++) {
if (customer[i]==null) {
customer[i]=name;
break;
}
}
}
//修改信息
public boolean editName(String oldName,String newName){
boolean find=false;
for (int i = 0; i <customer.length ; i++) {
if (customer[i].equals(oldName)) {
customer[i]=newName;
find=true;
break;
}
}
return find;
}
//显示信息
public void show(){
System.out.println("*****************");
System.out.println("客户姓名列表:");
System.out.println("*****************");
for (int i = 0; i < customer.length; i++) {
System.out.print(customer[i]+" ");
}
System.out.println();
}
}
package zuoye;
import java.util.Scanner;
public class editNameTest {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
//输入客户
editName a=new editName();
for (int i = 0; i < a.customer.length; i++) {
System.out.print("请输入客户信息:");
String name=input.next();
a.add(name);
}
//显示客户
a.show();
//修改客户
System.out.println("请输入要修改的客户姓名");
String oldName=input.next();
System.out.println("请输入新客户的姓名");
String newName=input.next();
System.out.println("*****修改成功*****");
boolean rs=a.editName(oldName,newName);
if(rs){
System.out.println("找到并修改成功");
}else{
System.out.println("没有找到!");
}
/*if (a.editName(oldName,newName)) {
System.out.println("找到并修改成功");
}else{
System.out.println("没有找到!");
}
*/
a.show();
}
}
5.数组作为参数的方法
举例:
public class Mark {
/*求最大值*/
public double calcMax(double[] marks){ 定义数组的房间
double max=0;
for (int i = 0; i < marks.length; i++) {
if (marks[i]>max) {
max=marks[i];
}
}
return max;
}
/*求平均值*/
public double calcAvg(double[] marks){
double sum=0;
double avg=0;
for (int i = 0; i < marks.length; i++) {
sum=sum+marks[i];
}
avg=sum/marks.length;
return avg;
}
}
public class MarksTest {
public static void main(String[] args) {
double[] marks={10,20,30,40,50,60,70,80,90,100};
Mark m=new Mark();
double max=m.calcMax(marks);
double avg=m.calcAvg(marks);
System.out.println("max"+max);
System.out.println("avg"+avg);
}
}
心得:
6.对象作为参数的方法
可以将多个相关的信息封装成对象,作为参数传递,避免方法有太多的参数
package 对象作为参数;
public class Student {
/*学生生类实体 */
public String name;
public int age;
public double mark;
public String id;
/*方法*/
public void info(){
System.out.println("学生姓名"+name+"学生年龄"+age+"学生成绩"+mark+"学生学号"+id);
}
}
package 对象作为参数;
/*学生管理类*/
public class StudentBiz2 {
/*初始化学生数组*/
public Student[] students=new Student[5];
/* 添加学生*/
public void save(Student stu){
for (int i = 0; i < students.length; i++) {
if (students[i]==null) {
students[i]=stu;
break;
}
}
}
/*
* 根据学生id
* 查找学生信息
* */
public Student find(String id) {
Student s=null;//存放结果
for (int i = 0; i < students.length; i++) {
if(students[i].id.equals(id)) {
s=students[i];
break;
}
}
return s;
}
/*显示所有学生信息*/
public void show(){
System.out.println("************************");
System.out.println("学生学号 学生姓名 学生成绩 学生年龄");
for (int i = 0; i < students.length; i++) {
System.out.println(students[i].id+" "+students[i].name+" "+students[i].mark+" "+students[i].age);
}
System.out.println("************************");
}
/* 修改学生信息*/
public boolean editStudent(Student s){
boolean find=false;
for (int i = 0; i <students.length ; i++) {
if (students[i].id.equals(s.id)) {
students[i].name=s.name;
students[i].age=s.age;
students[i].mark=s.mark;
find=true;
break;
}
}
return find;
}
}
package 对象作为参数;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
StudentBiz2 sbz=new StudentBiz2();
//添加学生信息
for (int i = 0; i < sbz.students.length; i++) {
Student s=new Student();
System.out.println("添加第"+(i+1)+"个学生的信息");
System.out.println("请输入学生编号");
s.id=input.next();
System.out.println("请输入学生姓名");
s.name=input.next();
System.out.println("请输入学生年龄");
s.age=input.nextInt();
System.out.println("请输入学生成绩");
s.mark=input.nextDouble();
sbz.save(s);
}
//显示所有学生信息
sbz.show();
//根据学生id查找学生信息
System.out.println("请输入您要查找的学生id");
String id=input.next();
Student stu=sbz.find(id);
stu.info();
//修改学生信息
Student sEdit=new Student();
System.out.println("请输入要修改的学生编号");
sEdit.id=input.next();
System.out.println("请输入该学生的名字的修改值");
sEdit.name=input.next();
System.out.println("请输入该学生的年龄的修改值");
sEdit.age=input.nextInt();
System.out.println("请输入该学生的成绩的修改值");
sEdit.mark=input.nextDouble();
boolean rs=sbz.editStudent(sEdit);
if(rs){
System.out.println("success");
}else{
System.out.println("fail !");
}
//重新打印
sbz.show();
}
}
练习:对客户姓名排序
package paixu;
import java.util.Arrays;
public class SortName {
public void sortN(String[] str){
System.out.println("排序前...");
for (int i = 0; i < str.length; i++) {
System.out.print(str[i]+" ");
}
System.out.println();
System.out.println("**********************************");
// Array
Arrays.sort(str);
System.out.println("排序后...");
for (int i = 0; i < str.length; i++) {
System.out.print(str[i]+" ");
}
}
}
package paixu;
public class SortTest {
public static void main(String[] args) {
String[] str={"A","C","B","E","D"};
SortName sn=new SortName();
sn.sortN(str);
}
}
7.为什么需要包
解决类的重名
8.什么是junit
帮助我们快速建立test
9.如何使用Junit
下载junit的包,导入到工程里面(点到工程上---> 右键--->Build Path---->Add Libraries--->JUnit---->选择junit4----finish
点到要测试的.java文件下--->new--->JUnit Test Case--->选New JUnit 4 test--->类名自动生成---->next--->选择要测试的方法--->生成一个@test的public---->添加要测试的数据
红条代表出现错误,蓝条代表正常
举例:
public class JunitUse {
/*加法*/
public int add(int a,int b){
int c=a+b;
return c;
}
/*减法*/
public int minus(int a,int b){
int c=a-b;
return c;
}
}
import static org.junit.Assert.*;
import org.junit.Test;
public class JunitUseTest {
@Test
public void testAdd() {
JunitUse ju=new JunitUse();
assertEquals(14, ju.add(10, 4));
}
@Test
public void testMinus() {
JunitUse ju=new JunitUse();
assertEquals(6, ju.minus(10, 4));
}
}
10.为什么需要包?
一个文件夹会有同名的,文件比较多,管理起来比较乱
11.包的作用
解决类的同名问题
1)允许类组成较小的单元(类似文件夹),易于找到和使用相应的文件
2)更好的保护类、属性和方法
3)防止命名
12.如何创建包?
点击跟目录,new---> Package-->起名字
13.包命名规范
1)包名由小写字母组成,不能以圆点开头或结尾
2)包名之前最好加上唯一的前缀,通常使用组织倒置的网络域名
举例:
www.wei.com
com.wei.entity 存放实体类
com.wei. dao 存放数据库相关文件
com.wei. util 存放所有工具类
3)包名后续部分依不同机构内部的规范不同而不同
14.如何导入包
为了使用不在同一包中的类,需要在Java程序中使用import关键字导入这个类
15查看源码
首先关联window-->preferences---->java--->Installed JRES---->点jret--->点edi--->选后缀为rt.jar--->Souerce Attach --->找到jd安装的位置-- > 点src---->一直ok
ctrl+点击单词
作业:方法类