方法的构造与重载
构造方法特征: 每一个类中默认都有一个无参的构造方法 构造方法名字必须与类名相同 构造方法没有返回值 且不需要void修饰 如果一个类中定义了有参的构造方法 默认无参的构造方法就会被覆盖掉 需要显性的定义出来 构造方法作用: 主要用来为创建的对象初始化 成员变量的默认值 就在在无参的构造方法中赋值的 方法重载: 在一个类中 有多个名称相同的方法 称为方法重载 当出现多个方法名相同时 可以通过参数的类型 个数 顺序来区分所调用的方法 普通的成员方法也可以方法重载
无参数的构造方法:
public Person(){
System.out.println("Person默认的无参构造方法");
name = null;
age = 0;
gander = null;
}
有参数的构造方法:
public Person(String n,int a,String g){
System.out.println("有参的构造方法");
name = n;
age = a;
gander = g;
}
方法的重载:
public void max(int x,int y){ }
public void max(int x,int y,int z){ }
先设计人类 定义了功能 让人做具体的事情 需要创建一个具体的人对象(实例) Person()是人类中构造方法
public static void main(String[] args) {
Person p1 = new Person();
p1.name = "jim";
System.out.println(p1.name);
Person p2 = new Person("tom",20,"男");
System.out.println(p2.name);
Person p3 = new Person("张三","男",22);
System.out.println(p3.age);
}
值传递
new Person()在内存中创建一个对象 Person 声明一个变量表示对象 1.启动main方法,main就被加载到栈空间中 2.new Person() 把Person.class文件加载到虚拟机内存中(方法区) 3.Person P1 P1只是持有对象在内存空间中的地址,并不是对象本身,所以把这种变量称为引用变量 4. = 只是把堆空间中的内存地址 赋给左边的栈中的变量,栈中的变量只是持有对对象访问的引用地址
public class Test {
public static void main(String[] args) {
int[] a = {};
a[0] = 1;
Person P1 = new Person();
P1.name = "张三";
P1.age = 20;
P1.gander = "男";
P1.show();
Person P2 = new Person();
P2.name = "李四";
P2.age = 22;
P2.gander = "男";
P2.show();
Person P3 = P2;//只是把对象的地址赋给了P3,并没有重新创建出一个新的对象
P3.name = "王五";
System.out.println(P2.name);
System.out.println(P3.name);
Person P4;
P4 = new Person();//P4表示的是一个对象,指向的是一个对象,最好不要说P4就是对象
Person P5 = P4;
}
}
演示的是传参时,参数类型为基本类型,传参时,是将自己的值赋给另一个变量 另一个变量的值改变,不影响实参的结果
public class Demo {
public static void main(String[] args) {
Demo d = new Demo();
int x = 10;
d.test(x);
System.out.println(x);
}
public void test(int a){
a = 20;
System.out.println(a);
}
}
参数类型为引用类型时,不是传对象本身,传递的是对象地址 当形参发生改变时,实参也会发生改变
public class Test {
public static void main(String[] args) {
Car bm = new Car();
bm.name = "宝马";
Test t = new Test();
t.test(bm);//只是把对象的地址传递
System.out.println(bm.name);
}
public void test(Car car){
car.name = "奔驰";
System.out.println(car.name);
}
}
关键字
this:表示当前正在操作的对象,常用来区分同名的成员变量和局部变量
public Person(String name,int age){
//this表示当前正在操作的对象
this.name = name;
this.age = age;
}
static:静态,用来修饰类的属性,方法,代码块和内部类
public class ChinaBank {
//大家都不一样的 不应该定义为静态
String account;
String password;
//被static修饰的变量,在内存中只有一份
//被static修饰的变量和类一样,在内存中只有一份
static String bankname = "中国银行";
static double PI = 3.1415926;
/*
static修饰方法
随着类加载而加载
*/
public static void testbank(){
//System.out.println(account); 静态方法先加载,不能使用非静态的成员
System.out.println(bankname);//静态的方法中只能使用静态成员
}
}
代码块
方法是一个有名字的代码块 代码块:类似一个没有名称的方法 没有名字 怎么调用? 代码块在满足某种条件时,自动被调用执行 非静态代码块:(又称为实例代码块)在创建类的对象时被调用 静态代码块:类加载时被调用(在类中使用main方法,通过类名访问类中静态成员,创建类的对象时) 类只会被加载,静态代码块只执行一次
非静态的代码块,先于构造方法执行 1.加载类 2.先加载静态的成员(静态变量,方法,代码块) 3.创建对象 4.调用构造方法
包
包的概念:
为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。
包的作用:
1.避免类重名
2.按照不同功能管理类
3.控制访问权限
包(package)的命名规范:
在包名中,可以使用.号来区分包的级别;包名一般情况下是小写
第一级 指该项目的类型,如com,org,gov等,
第二级 指项目所开发或者运行的公司名称,如:oracle,sun,huawei
等
第三级 指项目的名称,如:bcms,oa,erp,cms等
第四级 指项目模块的名称,如:bean,action,exception等
权限修饰符
1)public :公共权限 修饰类、属性、方法。可以被任意类访问
2)protected:受保护的权限 修饰属性、方法。
可以被同包类访问,如果不是同包类,必须是该类的子类才可以访问。
3)default:同包权限 修饰类、属性、方法。只能被同包的类访问
4)private:私有权限 修饰属性、方法。 只能在本类中访问
public String pubname;//公共权限
protected String proname;//受保护权限
String name;//默认权限
private String priname;//私有权限