Java基础学习09_面线对象02

今日内容

一. 方法的参数

  1. 形式参数:用来接收调用该方法时传递的参数。只在此方法内有效
public void swap(int a, int b) {
       int temp = a;
       a = b;
       b = temp;
       System.out.println("a:" + a + " b:" + b);
   }

这里边的a,b就是形参
  1. 实际参数:传递给被调用方法的值,预先创建并赋予确定值
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就是实际的参数值,实参
  1. 形参和实参的关系:在值传递调用过程中,只能把实参传给形参,而不能把形参的值反向作用于实参上。在函数调用过程中,形参的值发生了改变,而实参的值不会发生改变

二.构造方法

  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();
   }
}
  1. 特点:
  • 构造方法名字必须和类名相同
  • 构造方法被new调用 用于创建对象
  • 每个类中一定要至少存在一个构造方法,如果没有明确定义,系统会自动生成无参构造,若在类中自定义了构造方法,则系统不再默认生成无参构造
  • 构造方法没有返回值 不用void表示
  • 构造方法只能被关键字new调用 不能被对象调用
  • 构造方法的参数列表一般用于给成员变量赋值
  1. 构造方法和普通方法的区别:
  • 概念: 构造:用于构建创造对象的方法 普通:类中用于实现指定功能的代码块
  • 相同之处:都是成员方法、都在类中
  • 不同之处:
    • 命名不同:构造方法的名字必须和定义他的类名完全相同 普通方法名字可以和类名相同
    • 格式不同:构造方法没有返回值 不用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);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值