目录
一、方法带参学习
1、构造方法带参
语法
访问修饰符 类名 (数据类型1 变量名1, 数据类型2 变量名2, …… ,数据类型n 变量名n) {
}
使用优点:每创建一个对象,都会出现重复为对象的属性赋值,这样会造成大量的同格式代码重复使用,占用较多内存,可以使用带参构造方法来进行优化。
例子
/*
车类构建
*/
public class Car {
public double price;//价钱
public String brand;//品牌
public String type;//类型
//如果现在没有构造方法,那么编译器会自动为这个类添加默认的无参构建方法
//如果一个类中定义了构造方法,那么这个编译器不会为这个类添加默认的无参构建方法
//如果在一个类中已经定义了带参数的构造方法,此时还想使用无构建方法,那么必须将无参构造方法也定义出来
public Car(){ }
//此时在类中定义了带参数的构造方法,那么编译器不会为这个类添加默认的无参构建方法
//构造方法的( )表示的是参数列表,这里的列表是形式参数
public Car(double price,String brand,String type){
this.price=price;
this.brand=brand;
this.type=type;
}
}
public class Cars {
public static void main(String[] args) {
Car p1 = new Car();
p1.price=15000;
p1.brand="宝马";
p1.type="RX-03";
//调用带参构造方法创建对象时,必须注意参数列表传递的值要与构造方法定义时的形式列表一一对应
Car p2=new Car(16000,"奥迪","PX-01");
}
}
2、方法带参
方法带参语法
访问修饰符 返回值类型 方法名 (数据类型1 变量名1, 数据类型2 变量名2, …… ,数据类型n 变量名n) {
[return 返回值;]
}
//带参方法使用
对象名.方法名( 实参1, 实参2, …… ,实参n );
例子
/*
计算器
*/
public class Calculator {
public double number1;
public double number2;
public String operator;
//如果一个方法的返回值不为void,那么要有一个返回return
public double calculate(double number1,double number2,String operator){
switch(operator){
case "+":return number1+number2;
case "-":return number1-number2;
case "*":return number1*number2;
case "/":return number1/number2;
default:return 0;
}
}
}
public class calculate {
public static void main(String[] args) {
Calculator a=new Calculator();
double b=a.calculate(453,53,"+");
System.out.println(b);
}
}
补充另一种使用方式
/*
计算器
*/
public class Calculator {
public double number1;
public double number2;
public String operator;
public Calculator(double number1,double number2,String operator){
this.number1=number1;
this.number2=number2;
this.operator=operator;
}
public double calculate(){
switch(operator){
case "+":return number1+number2;
case "-":return number1-number2;
case "*":return number1*number2;
case "/":return number1/number2;
default:return 0;
}
}
}
public class calculate {
public static void main(String[] args) {
Calculator a=new Calculator(453,53,"+");
double b=a.calculate();
System.out.println(b);
}
}
3、对象数组
接下来通过案例来认识:
已知学生有姓名和年龄,问如何使用数组储存一个班的信息,要涉及带参。
代码解析
public class Students {
public int age;
public String name;
public Students(String name,int age){
this.name=name;
this.age=age;
}
}
public class student {
public static void main(String[] args) {
//创建一个能储存两个学生信息的对象数组
Students[] stu=new Students[2];
stu[0]=new Students("张三",15);
stu[1]=new Students("李四",16);
}
}
4、引用数据类型作为方法参数
接下来通过案例来认识:
某手机店现有100个手机展架,销售员现依次向展架上摆放手机,请使用面向对象的设计思路描述这一过程(手机有品牌、型号和价格)。
分析
a、此次涉及手机和销售员两类,因此我们要为两个对象构建类。
b、其中要对类进行描述。
c、这有100个手机,因此需要使用对象数组来存储。
代码分析
public class Mobile {
public String brand;
public String type;
public double price;
public Mobile(String brand,String type,double price){
this.brand=brand;
this.type=type;
this.price=price;
}
}
public class Saler {
public Mobile[] mobiles=new Mobile[100];
//引用数据类型作为方法的参数
public void get(Mobile mobile){
for(int i=1;i<mobiles.length;i++){
if(mobiles[i]==null){
mobiles[i]=mobile;
break;
}
}
}
}
public class SalerTest {
public static void main(String[] args) {
Saler saler=new Saler();
saler.get(new Mobile("小米","k70",3000));
}
}
5、数组作为方法参数及参数传递规则
接下来通过案例来认识:
现对两班级进行成绩排名,使用带参来设计程序。
代码分析
import java.util.Arrays;
//甲班:85、89、88、78、92、90、82
//乙班:89、86、88、92、93、81
public class ArraySort {
public static void main(String[] args) {
int[] arr1={85,89,88,78,92,92,82};
int[] arr2={89,86,88,92,93,81};
sort(arr1);
sort(arr2);
System.out.println(Arrays.toString(arr1));
System.out.println(Arrays.toString(arr2));
}
public static void sort(int[] arr){
//使用冒泡排序进行降序排序
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr.length-i-1;j++){
if(arr[j]<arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
}
6、方法参数传递规则
官方说明:
基本数据类型的参数(例如int或double)按值传递给方法。这意味着对参数值的任何更改仅存在于 方法范围内。当方法返回时, 参数消失, 对它们的任何更改都将丢失。
引用数据类型参数(例如对象)也按值传递到方法中。这意味着当方法返回时, 传入的引用仍然引用与以前相同的对象。但是, 如果对象的字段的值具有适当的访问级别,则可以在方法中更改它们。
补充:
基础本数据类型传值时传递的是值的拷贝。
引用数据类型传值时传递的是对象在堆内存上的空间地址。
二、方法重载
1、概念
在一个类中,方法名相同,参数列表不同的多个方法构成方法重载。
2、示例
public class example1{
public double stu(double a,double b){
a+=b;
return a;
}
public double stu(double a,double b,double c){
a+=b;
a+=c;
return a;
}
}
注意:参数列表不同是指里面的数据类型和参数数目不完全和匹配
3、补充
构造方法也是方法,因此构造方法可以重载。如果在一个类中出现多个构造方法的定义,那么这些构造方法就形成构造方法重载。
this关键字调用构造方法,必须是这个构造方法的第一句。
代码解析
public class example1{
public int age;
public int grade;
public example1(){
age=18,grade=60;//编译器会报错,应该把这行去掉
this(18,60);//这行放最前面
}
public example1(int age,int grade){
this.age=age;
this.grade=grade;
}
}
三、初辨析——面向过程与面向对象的区别
面向过程侧重于过程的实现上,面向对象侧重于对象上,需要利用对象的行为来完成过程的组装。