今日内容
一. 方法的参数
- 形式参数:用来接收调用该方法时传递的参数。只在此方法内有效
public void swap(int a, int b) { int temp = a; a = b; b = temp; System.out.println("a:" + a + " b:" + b); } 这里边的a,b就是形参
- 实际参数:传递给被调用方法的值,预先创建并赋予确定值
public void swap(int a, int b) { int temp = a; a = b; b = temp; System.out.println("a:" + a + " b:" + b); } swap(1,2) //其中1,2就是实际的参数值,实参
- 形参和实参的关系:在值传递调用过程中,只能把实参传给形参,而不能把形参的值反向作用于实参上。在函数调用过程中,形参的值发生了改变,而实参的值不会发生改变
二.构造方法
- 概念: 构造方法是一种特殊的方法,它是一个与类同名的方法。对象的创建就是通过构造方法来完成,构造方法就是用于构建创造对象的方法。其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。构造方法和其他方法一样也可以重载。
- 类定义顺序:定义属性—>定义构造方法------>定义普通方法
class Person{ private String name; //定义属性 private int age = 10; //定义属性 //无参构造 public Person(){ //定义构造方法 //属性的初始化 //name = null; //age = 10; } //定义普通方法 public void getPersonInfo(){ System.out.println("姓名为:"+name+",年龄为:"+age); } } public class test{ public static void main(String[] args){ //根据Person类生产一个对象 Person per1 = new Person(); per1.getPersonInfo(); } }
- 特点:
- 构造方法名字必须和类名相同
- 构造方法被new调用 用于创建对象
- 每个类中一定要至少存在一个构造方法,如果没有明确定义,系统会自动生成无参构造,若在类中自定义了构造方法,则系统不再默认生成无参构造
- 构造方法没有返回值 不用void表示
- 构造方法只能被关键字new调用 不能被对象调用
- 构造方法的参数列表一般用于给成员变量赋值
- 构造方法和普通方法的区别:
- 概念: 构造:用于构建创造对象的方法 普通:类中用于实现指定功能的代码块
- 相同之处:都是成员方法、都在类中
- 不同之处:
- 命名不同:构造方法的名字必须和定义他的类名完全相同 普通方法名字可以和类名相同
- 格式不同:构造方法没有返回值 不用void表示 普通方法必须有返回值类型的标识
- 调用不同:构造方法被new关键字调用 普通方法被创建的对象调用(对象名.方法)
- 作用不同:构造方法用于创建对象 普通方法代表本类的对象具有的某个功能
Java构造函数 Java方法 构造器用于初始化对象的状态(数据) 方法用于暴露对象的行为 构造函数不能有返回类型 方法一般都有返回类型 构造函数隐式调用 方法要显式调用 如果没有指定任何构造函数,java编译器提供一个默认构造函数 在任何情况下编译器都不会提供默认的方法调用 构造函数名称必须与类名相同 方法名称可以或可以不与类名称相同
三. 给对象的变量赋值方式
- 类中的成员变量----对象的属性
- 一个类中有什么成员变量 直接决定了此类创建的对象有什么属性
- 给对象的变量赋值方式
给对象的变量赋值方式:
- 在类中直接给成员变量赋值 为此类创建的所有对象的此属性指定了初始值
- 通过对象.变量给变量赋值 :::必须创建对象 只能更改当前对象属性的值
- 通过构造方法的参数列表给对象的属性赋值 ::对象一创建就有指定的值 只能更改当前对象属性的值
- 通过普通方法的参数列表给对象的属性赋值:必须先创建对象 只能更改当前对象属性的值
public class OOP02Parametr {
/*
* 类中的成员变量---对象的属性
* 一个有什么成员变量 直接决定了此类创建的对象有什么属性
* 给对象的变量赋值方式
*
*/
public static void main(String[] args) {
Car c1 = new Car();
c1.show();
Car c2 = new Car();
c2.show();
//方式2:通过对象.变量给变量赋值 :::必须创建对象 只能更改当前对象属性的值
c1.logo = "兰博基尼";
//方式3:通过构造方法的参数列表给对象的属性赋值::对象一创建属性就有指定的值 只能更改当前对象属性的值
Car c3 = new Car('黑');
c3 = new Car('红');
c3.show();
//方式4:通过普通方法的参数列表给对象的属性赋值:必须创建对象 只能更改当前对象属性的值
Car c4 = new Car();
c4.setColor('红');
c4.setColor('黑');
c4.show();
c4.setAge(-1);
}
}
class Car{
int age;
//方式1:在类中直接给成员变量赋值 为此类创建的所有对象的此属性指定了初始值
String logo="bmw";
char color = ' ';
void show(){
System.out.println("color="+color+",logo="+logo);
}
//无参构造
Car(){
}
Car(char cc){
color = cc;
}
void setColor(char c){
color = '黑';
}
void setAge(int a){
if(a<0&&a>120){
return;
}
age = a;
}
}
三.this
this:关键字:当前
使用场景1:当成员变量和基本变量重名时:变量名指向的局部变量 通过this.变量名来指向成员变量
注意:方法中调用的成员前面默认有this.
使用场景2:构造方法之间的相互调用(代码的复用) 通过this(参数列表)
注意:this(参数列表) 必须是第一个语句
- 构造方法1调用构造方法2 就是为了指向构造方法2中的代码的
- 构造函数调用必须是构造函数的第一条语句
OOP05This(int age,int a){
this.age=age;
this.a=a;
System.out.println("两个参数的构造方法:::");
}
OOP05This(int age,int a,int b){
//System.out.println(1);
this(age,a);//构造方法1调用构造方法2 就是为了指向构造方法2中的代码的
//Constructor call must be the first statement in a constructor
// this.age=age;
// this.a=a;
// System.out.println("两个参数的构造方法:::");
this.b=b;
}
四.私有化
私有化:让成员对可信任的类或者对象可见 对不可信任的类或者对象隐藏
步骤:
1.成员变量加修饰符 private
只有本类和本类中定义创建的对象可以直接访问该变量
2.为此变量提供getter setter方法
getter方法格式:public 变量类型 getXxx() {return xxx;}
setter方法格式:public void setXxx(变量类型 xxx) {this.xxx = xxx;}
public static void main(String[] args) {
Stu s = new Stu();
//System.out.println(s.age+""+s.score());//报错:s是Stu不可信任的对象
//提供get和set方法之后
System.out.println(s.age+":"+s.getScore());通过getter setter方法间接访问
//The field Stu.score is not visible
}
}
class Stu{
int age;
private float score;
//为此变量提供getter setter方法
public void setScore(float score){
this.score = score;
}
public float getScore() {
return score;
}
void shoe(){
System.out.println(age+":"+this.score);
}
public static void main(String[] args){
Stu s = new Stu();
System.out.println(s.age+":"+s.score);
}
}