重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
首先理解public boolean addBook(Book book )这句话的含义是创建一个大家都能使用的公共方法(public的作用),该方法返回一个布尔类型的值(boolean的作用),该方法的名字是addBooke(调用方法需要名字啊,没名字怎么用它),这个方法需要的参数是一个Book类型的对象book(Book book的作用);
创新互联公司基于成都重庆香港及美国等地区分布式IDC机房数据中心构建的电信大带宽,联通大带宽,移动大带宽,多线BGP大带宽租用,是为众多客户提供专业成都移动机房托管报价,主机托管价格性价比高,为金融证券行业服务器托管,ai人工智能服务器托管提供bgp线路100M独享,G口带宽及机柜租用的专业成都idc公司。
每一个方法都有一个方法签名:方法签名就是方法名和参数列表(在这里就是 addBook(Book book))通过方法签名我们就能正确的找到并执行该方法;
方法名,顾名思义就是方法的名字,一个类中可以有很多相同方法名的方法,就拿addBook来所,是添加书,添加书的渠道很多,可以通过书名添加,也可以通过id添加,只不过执行的逻辑和需要的参数不同;所以一个类中可以有很多的同名方法,那么程序如何区分这些方法呢?那就是通过方法签名的另一个元素——参数列表,在java中称方法名相同,参数列表不同的情况为方法的重载;
这位大哥问的就是参数列表的问题,参数列表中需要的是参数的数据类型,和一个引用来临时在方法中保存用户给的数据;这里Book就是数据类型,book就是一个临时的引用在方法体内可以代表用户给的数据的;这里有需要有栈桢和堆的概念了,在没有这些基础知识的时候我们只要知道,book是一个引用,在方法体中我么可以使用book来操作一个不属于我们的外部对象;
纯手打望采纳;
请采纳啊,不明白的在追问,谢谢。
//声明包
package cn.jbit.classandobject;
//导入包
import java.util.Scanner;
/**
* 上机阶段4:登录并购买商品
*/
// 声明类Goods
public class Goods
{
// 声明String类型的数组:goods,并初始化。
String[] goods = new String[] { "电风扇", "洗衣机", "电视机", "冰 箱", "空调机" }; // 定义数组是干什么用的
// 声明double类型的数组:price,并初始化。
double[] price = new double[] { 124.23, 4500, 8800.90, 5000.88, 4456,
12000.46 };
// 声明返回值类型为:boolean的login()方法
public boolean login()
{
// 声明变量flag,类型为boolean,初始值为:false,作为是否登录成功的标志
boolean flag = false;
// 键盘输入
Scanner input = new Scanner(System.in);
// 打印
System.out.print("请输入用户名: ");
// 声明变量name,接收输入用户名
String name = input.next();
// 打印
System.out.print("请输入密码: ");
// 声明变量pwd,接收输入密码
String pwd = input.next();
// if判断用户名和密码是否正确
if (name.equals("TOM") pwd.equals("123"))
{
// 打印
System.out.println("登录成功! ");
// 修改是否登录成功的标志
flag = true;
}
// else情况
else
{
// 打印
System.out.println("用户名或密码不匹配,登录失败!");
}
// 返回是否登录成功的标志:成功(true),失败(false)
return flag;// 这段代码为什么要加返回值
}
// 声明返回值为StringBuffer类型的方法change(double d),参数为double类型的d
public StringBuffer change(double d)// 这是什么意思啊
{
// StringBuffer str:声明StringBuffer类型的变量str
// String.valueOf(d):获取d的字符串值
// new StringBuffer(String.valueOf(d)):实例化str,调用了StringBuffer的构造方法
StringBuffer str = new StringBuffer(String.valueOf(d));// 这一句
// str.indexOf("."):返回第一个.所在位置:如果该值返回大于等于4,则进入for循环,否则跳过
for (int i = str.indexOf(".") - 3; i 0; i = i - 3)
{// 这一句
// 在i出添加,如8,800.9
str.insert(i, ',');// 还有这一句
}
// 返回StringBuffer类型的字符串
return str;
}
// 声明返回值为void的方法showGoods()
public void showGoods()
{
// 打印
System.out.print("*********欢迎进入商品批发城*********");
// 打印
System.out.print("\n\t编号\t商品\t价格\n");
// for循环输出商品:goods.length用到开始声明的goods来获取数组长度
for (int i = 0; i goods.length; i++)
{
// 打印:因为数组从0开始,而商品只能从1开始,所以i+1。\t制表符
System.out.print("\t" + (i + 1));
// 打印第i个商品
System.out.print("\t" + goods[i]);
// 打印第i个商品的价格。\n回车
System.out.print("\t" + change(price[i]) + "\n");
}
// 打印
System.out.println("**********************************");
}
// 主方法
public static void main(String[] args)
{
// 键盘输入
Scanner input = new Scanner(System.in);
// 声明Goods类的对象g,并实例化
Goods g = new Goods();
// 声明int变量serial, num
int serial, num;
// 声明double变量total
double total = 0;
// 判断是否登录成功
if (g.login())
{
// 打印商品信息
g.showGoods();
// 输入商品编号
System.out.print("请输入您批发的商品编号:");
// 接收
serial = input.nextInt();
// 输入批发数量
System.out.print("请输入批发数量:");
// 接收
num = input.nextInt();
// 计算总金额:price数组是从0开始的,商品数量是从1开始,第一个商品对应第0个价格
total = g.price[serial - 1] * num;// 计算总金额 //这一句
// 打印总金额
System.out.print("您需要付款:" + g.change(total));
}
}
}
1 我所接触过的编程语言,基本都可以把字符串作为参数传入吧?(或者是字符数组),其实就是传值
2 这里"156".xxx属于特殊写法,java虚拟机会自动给一个独立字符串new一个String对象,然后实际上是类似于 String abc = new String("156"); abc.xxx,相当于这两步
public Static Animal get(String choice)//这句是定义一个静态方法get ,static表示该方法是静态方法, void表示方法没有返回值(在方法没有返回值时用),而该句的返回值类型是Animal (Animal是一个用户自定义的类 类似你熟知的int,string,char等), 例如public viod get(){}这个方法就没有返回值且是非静态方法 而public static string set(){}这个方法就是静态方法且返回值的string类型。请不要混淆返回值类型与static二者并非一个概念
静态与非静态:当一个函数或者一个变量前面加上static时表示该方法或变量是静态的,否则就是非静态的。java和c#一样是面向对象的语言,创建一个类后需要实例类的对象调用方法或者变量,当声明的方法或者变量时静态时就可以直接用类名调用,因为静态的是属于类所有,并非属于类的某个对象
choice是什么意思? choice是get方法的形式参数(形参)通俗一些就是个傀儡,只有这个get方法被调用的时候形参就被赋予了实参的值,才真正有了意义。例如你的例子Animal al=Store.get("dog");中调用了get方法并传递实参"dog" ,此时choice的值就是"dog","dog"与"dog"当然是俩个相等的字符串 所以程序最后输出的肯定和狗有关。如果get方法被调用时传的实参不是"dog",Animal al=Store.get("pig");此时choice值就是"pig","pig"与“dog”不是相同的字符串所以最后结果肯定和猫又关(呵呵)
if(choice.equalsIgnoreCase("dog"))是什么意思? 这是判断当get函数被调用时传递的实参是否是“dog”, java中equalsIgnoreCase是判断两个字符串是否相等它不考虑大小写,如果两个字符串的长度相等,并且两个字符串中的相应字符都相等(忽略大小写),则认为这两个字符串是相等的。(当get被调用时choice的值就变为实参的值)
正如LS所说main 方法是java程序的入口,当程序运行时首先运行main方法中的内容 ,记住main方法的格式就行,以后你会慢慢理解main
如果还有不是很清楚的地方 百度hi我……
这回答应该通俗易懂不知lz满意否?怎么样给分吧……