可变个数的形参
采用数组形参来定义方法
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());
}
}