目录
基本概念
类:对某一类事物的描述,是抽象的,概念上的定义。
对象:是实际存在的属于该类事物的具体个体,也称为实例。
类是对象的模板、图纸,而对象是类的一个实例,是实实在在的个体,一个类可以创建出来多个对象。如果将现实中的汽车比作对象,那么创建该汽车的设计图就是类。
eg:简历
简历模板是一个类,将它打印或者是下载之后就相当于是创建了一个对象。
类的定义
由于类是将数据和方法封装在一起的一种数据结构,其中数据表示类的属性,方法表示类的行为,所以定义类实际上就是定义类的属性与方法。
成员变量也叫域变量,全局变量,属性。
成员方法:方法。
class Student {
private String name;//姓名
private char sex;//性别
private int age;//年龄
private int no;//学号
private String hobbit;//爱好
public void sleep(){
System.out.println("sleep...");
}
public void expense(){
int eat=800,shopping=200;
System.out.println("消费:"+(eat+shopping));
}
@Override
public boolean equals(Object obj) {
if(this==obj)
return true;
if(obj instanceof Student){
Student student=(Student)obj;
if(student.name.equals(this.name)&&student.no==this.no&&student.sex==this.sex){
return true;
}
}
return false;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getHobbit() {
return hobbit;
}
public void setHobbit(String hobbit) {
this.hobbit = hobbit;
}
public Student() {
}
public Student(String name, char sex, int no) {
this.name = name;
this.sex = sex;
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
类的权限修饰符
成员变量修饰符
//用final定义常量
public static final double PI=3.14;
成员变量和局部变量的区别
在类和方法中均可定义属于自己的变量。类中定义的变量是成员变量,而方法中定义的变量是局部变量。
(1)从语法形式上看,成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员变量可以被public、private、static等修饰符所修饰,而局部变量则不能被访问控制修饰符及static所修饰;成员变量和局部变量都可以被final所修饰。
(2)从变量在内存中的存储方式上看,成员变量是对象的一部分,而对象是存在于堆内存的,而局部变量是存在于栈内存的。
(3)从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而产生,随着方法调用的结束而自动消失。
(4)成员变量如果没有被赋初值,则会自动以类型的默认值赋值(有一种情况例外,被final修饰但没有被static修饰的成员变量必须显式地赋值);而局部变量则不会自动赋值,必须显式地赋值后才能使用。
对象的创建和使用
创建新的对象之后,就可以对对象的成员进行访问。通过对象来调用对象成员的格式如下:
对象名.对象成员
Student student1 = new Student();
student1.sleep();
参数的传递
java的参数传递机制 :值传递
对于基本数据类型:方法中传进来的参数就是数据的值
对于引用数据类型:传入方法的是对象的地址值
匿名对象
当一个对象被创建之后,在调用该对象的方法时,也可以不定义对象的引用变量,而直接调用这个对象的方法,这样的对象称为匿名对象。
new Student().getAge();
使用匿名对象通常有如下两种情况。
(1)如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。
(2)将匿名对象作为实参传递给一个方法调用。
类的特性
私有成员和公共成员
对于类中的属性为什么用private不用public?
当我们把属性的修饰符设置为public时,在类外我们可以使用引用变量.变量名的方式进行赋值,虽然更方便一点,但是也用弊端。比如
如果没有一个机制来限制对类中成员的访问,则很可能会造成错误的输入。为了防止这种情况的发生,Java语言提供了私有成员访问控制修饰符private。也就是说,如果在类的成员声明的前面加上修饰符private,则就无法从该类的外部访问到该类内部的成员,而只能被该类自身访问和修改,而不能被任何其他类(包括该类的子类)获取或引用,因此达到了对数据最高级别保护的目的。
既然属性用private修饰,在类外不能被直接访问,那该如何访问?创建公共成员。
既然在类的外部无法访问到类内部的私有成员,那么Java就必须提供另外的机制,使得私有成员得以通过这个机制来供外界访问。解决此问题的办法就是创建公共成员。为此,Java提供了公共访问控制符public。如果在类的成员声明的前面加上修饰符public,则表示该成员可以被所有其他的类所访问。
方法的重载
重载是指在同一个类内具有相同名称的多个方法,这多个同名方法如果参数个数不同,或者是参数个数相同但类型不同,则这些同名的方法就具有不同的功能。
注意:方法的重载中参数的类型是关键,仅仅是参数的变量名不同是不行的。也就是说参数的列表必须不同,即:或者参数个数不同,或者参数类型不同,或者参数的顺序不同。
构造方法
构造方法(constructor)是一种特殊的方法,它是在对象被创建时初始化对象成员的方法。构造方法的名称必须与它所在的类名完全相同。构造方法没有返回值,但在定义构造方法时,构造方法名前不能用修饰符void来修饰,这是因为一个类的构造方法的返回值类型就是该类本身。构造方法定义后,创建对象时就会自动调用它,因此构造方法不需要在程序中直接调用,而是在对象创建时自动调用并执行。这一点不同于一般的方法,一般的方法在用到时才调用。
语法:public 类名(){}//无参构造
public 类名(参数列表){根据传传进来的参数赋初值}//有参构造
静态成员
既static修饰的成员,不用static修饰的成员都是实例成员。
静态成员的访问:类名.成员