第三章 面向对象编程2

可变个数的形参

采用数组形参来定义方法

public class Person3 {
	public void printInfo (String[] args) {  //打印的信息来源于方法中的参数也就是形参的传递,如果传递不同的参数
		for(int i=0;i<args.length;i++ ) {
			System.out.println(args[i]);
		}
	}
	
	public void printInfo1 (String...args//int... i) {//Java特有的方式
		for(int i=0;i<args.length;i++ ) {
			System.out.println(args[i]);
	}
	}
}//数组方式传递时如果没有参数需要定义一个空数组,或者p.printInfo(null)
 //...方式则不需要

public class Test5 {
	public static void main(String[] args) {
		 Person3 p =new Person3();
		 String[] ss =new String[] {"小明","11"};
		 p.printInfo(ss);
		 
		 String[] ss1 =new String[] {"北京市","11","444444..."};
		 p.printInfo(ss1);
		 
		 p.printInfo1("s","a","ss");//两种方式,第一个直接传参数第二个先存到数组输出数组
		 String[] ss2 =new String[] {"北京市","11","444sadsadasd444..."};
		 p.printInfo1(ss2);
	}
}

方法的参数传递

方法,必须有其所在类或对象调用才有意义。若方法含有参数:
形参:方法声明时的参数
实参:方法调用时实际传给形参的参数值

Java的实参值如何传入方法呢?
Java里方法的参数传递方式只有一种:值传递。(变量在栈内存中的值) 即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。

JVM的内存模型
在这里插入图片描述

包package和引用import

面向对象特性之一:封装和隐藏

封装的意思就是通过printAge方法获得了被隐藏的age属性

public class Person3 {
	private int age;//不让调用者随意使用属性 所以做封装和隐藏
	
	public void printAge() {
		System.out.println("年龄是:"+age);
	}
	
	public void setAge(int a) { //设置的age属性被隐藏了,专门设置一个setAge方法设置年龄
		if(a<=150 && a>=0) {
			age=a;
		}else {System.out.println("输入的年龄"+a+"不在范围内");
			}
		
	}
}
public class Test5 {
	public static void main(String[] args) {
		 Person3 p =new Person3();
		 p.setAge(-100);
	}
}

Java中通过将数据声明为私有的(private),再提供公共的(public)方法:getXxx()和setXxx()实现对该属性的操作,以实现下述目的
隐藏一个类中不需要对外提供的实现细节;
使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑(比如上面那个例子加入了if判断),限制对属性的不合理操作;
便于修改,增强代码的可维护性

类的成员之三:构造器(构造方法)

Java语言中,每个类都至少有一个构造器
默认构造器的修饰符与所属类的修饰符一致
一旦显式定义了构造器,则系统不再提供默认构造器
一个类可以创建多个重载的构造器
父类的构造器不可被子类继承

1. 在前面定义的Person类中添加构造器,利用构造器设置所有人的age属性初始值都为18。

public class Person3 {
	public Person3() {
		age =18;
	}
	public int age;
	
}
public class Test5 {
	public static void main(String[] args) {
		 Person3 p =new Person3();
		 int s=p.age;
		 System.out.println(s);
	}
}  //输出是18

2. 修改上题中类和构造器,增加name属性,使得每次创建Person对象的同时初始化对象的age属性值和name属性值

public class Person3 {
	public Person3(int a,String n) {
		age =a;
		name=n;
	}
	public int age;
	public String name;
	
	
}

public class Test5 {
	public static void main(String[] args) {
		 Person3 p =new Person3(12,"zhangsan");
		 System.out.println(p.age);
		 System.out.println(p.name);
		 
		 
	}
}

3.定义一个“点”(Point)类用来表示三维空间中的点(有三个坐标)。要求如下:
1)可以生成具有特定坐标的点对象。
2)提供可以设置三个坐标的方法。

public class Point {
	public Point(int m,int n,int k) {
		x=m;
		y=n;
		z=k;
		
	}
	
	
	int x;
	int y;
	int z;
	
	public void setPoint(int m,int n,int k) {
		x=m;
		y=n;
		z=k;
		
	}
}
public class Test5 {
	public static void main(String[] args) {
		 Point p =new Point(3,4,5);
		 p.setPoint(5, 6, 7);
		 
	}
}

构造器重载

等同于方法重载,使得创建的对象灵活创造不同需求的对象,重载的多个构造方法提供了多个new对象的模板

关键字-this

它在方法内部使用,即这个方法所属对象的引用;
它在构造器内部使用,表示该构造器正在初始化的对象
this表示当前对象,可以调用类的属性、方法和构造器
当在方法内需要用到调用该方法的对象时,就用this。

public class Person3 {
	
	public Person3() {
		
	}//无参构造器
	public Person3(int age) {
		this.age=age;
	}//一个参数的构造器
	
	public Person3(String name) {
		this();//等同于调用public Person3() 
		this.name=name;
		
	}//一个参数的构造器
	
	public Person3(int a,String n) {
		this(1);//等同于调用public Person3(int age) 
		
		this.age =age;
		
		this.name=name;
	}//构造器
	public int age;//类成员变量
	public String name;
	
	public void setName(String name) {
		this.name=name;//this.name是指成员变量,name是指形参,this是指这个类
	}
	
	public void setName11(String name) {
		this.setName(name);
	}
	public void showInfo() {
		System.out.println("当前的姓名是: "+this.name);
	}
	
}

JavaBean

JavaBean是一种Java语言写成的可重用组件

所谓javaBean,是指符合如下标准的Java类:
类是公共的
有一个无参的公共的构造器
有属性,且有对应的get、set方法

/**
 * 一个完整的JavaBean
 * 私有的属性
 * 属性对应的get set方法
 * @author xrh
 *
 */
public class Person3 {
	private String name;
	private int sex;
	private int age;//右键 source 有一键生成get set方法
	
	public void setName(String name){
		this.name=name;
	}
	public String getName() {
		return this.name;
	}
	
	
	public void setSex(int sex){
		this.sex=sex;
	}
	public int getSex() {
		return this.sex;
	}
	
	public void setAge(int age) {
		this.age=age;
	}
	public int getAge() {
		return this.age;
	}
}


public class Test5 {
	public static void main(String[] args) {
		 Person3 p=new Person3 ();
		
		 
		 p.setAge(20);
		 p.setName("张三");
		 p.setSex(0);
		 
		 
		System.out.println(p.getAge()); 
		System.out.println(p.getName());
		System.out.println(p.getSex());
	}
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值