在Java中一切皆对象
什么是对象?
一个人、一只猫、一条狗…这些就是一个对象;
每个对象都有属性和行为。
什么是类?
类即同类别,例如不论男人、女人、黑人、白人…,都是人类,即同一类事务的统称。
类的组成(类长什么样?)
1、Java程序的基本组成单元是类
2、类中包含属性
和方法
两部分
实例1:下面定义了一个Human类,
1、有name属性和heart 属性(其中heart 是静态成员变量)、
2、getName()方法和setName(String name)方法、静态方法(类方法) hello()
class Human {
String name = "二毛";; //name属性(实例成员变量)
static int heart = 1; //使用static定义静态成员变量heart
String getName() { //getName()方法
return name;
}
void setName(String name) { //setName(String name)方法
this.name = name;
}
static void hello(){ //静态方法(类方法) hello()
System.out.println("静态方法(类方法)hello");
}
Human() {
System.out.println("构造方法Human");
}
}
对象的创建和使用(对象长什么样?)
对象的创建
其实对象也是变量,只是对象这个变量的数据类型是一个确切的类
对象的创建叫实例化类的对象
class Human {
String name = "二毛";
static int heart = 1;
String getName() {
return name;
}
void setName(String name) {
this.name = name;
}
/*main方法*/
public static void main(String[] args){
// 下面的语句将创建一个Human对象叫human
Human human = new Human();
}
}
从上面可以看出,对象的创建格式为:
类名 对象名 = new 类名();
对象的使用(访问实例变量和方法)
通过对象只能访问到实例对象和方法,不能访问静态成员变量
对象访问实例变量和方法的格式:
对象名.实例变量
或
对象名.方法名(参数)
class Human {
String name = "二毛"; //name属性(实例成员变量)
static int heart = 1; //使用static定义静态成员变量heart
String getName() { //getName()方法
System.out.println(name);
return name;
}
/*mian方法*/
public static void main(String[] args){
// 下面的语句将创建一个Human对象叫human
/*对象的创建其实分为两步
1、声明:声明一个对象,包括对象名称和对象类型。
2、实例化+初始化:使用关键字 new 来创建一个对象。使用 new 创建对象时,会调用构造方法初始化对象。
*/
Human human = new Human();
System.out.println(human.name);//访问实例变量和方法
human.getName();//访问方法
}
}
构造方法
创建对象的补充说明
对象的创建其实分为两步:1、声明,2、实例化+初始化
class Human {
String name = "二毛";
static int heart = 1;
String getName() {
System.out.println(name);
return name;
}
/*mian方法*/
public static void main(String[] args){
// 下面的语句将创建一个Human对象叫human
/*对象的创建其实分为两步
1、声明:声明一个对象,包括对象名称和对象类型。
2、实例化+初始化:使用关键字 new 来创建一个对象。使用 new 创建对象时,会调用构造方法初始化对象。
*/
Human human = new Human();
System.out.println(human.name);
human.getName();
}
}
什么是构造方法?
上面代码注释中提到了构造方法
,下面来说明一下什么是构造方法
1、构造方法,顾名思义还是方法,只是构造方法的名称必须与类名称一样,也就是方法名和类名一样的方法就是构造方法
//示例
class Human {
Human(){//无参构造
}
Human(String name){//有参构造
System.out.println(name );
}
}
说明:
1、构造方法的名称必须与类名称一样。
2、一个类可以有多个构造方法。
3、构造方法分为有参构造和无参构造。
4、对象的创建就是通过构造方法完成的。
5、构造方法没有返回值,也不能用void修饰
对于第4点说明,有人就有疑惑了,在上面创建对象的例子中,Human类中根本就没有看到构造方法,怎么又说对象的创建就是通过构造方法完成的
呢?
其实,在你定义一个类的时候Java就自动给你添加了一个隐藏的无参构造方法,也就是这样
//示例
class Human {
Human(){//无参构造
}
}
只不过这个无参构造没有向我们这样显式的写出来,它是隐藏起来的,也就是这样
//示例
class Human {
/*Human(){//无参构造
}*/
}
当我们使用new关键字创建对象的时候就会调用相应的构造方法(无参构造或有参构造)
前面Human human = new Human();使用的是默认的无参构造方法创建对象。你也可以定义有参构造来创建对象
class Human {
String name = "二毛";
Human(){//无参构造
}
Human(String name){//有参构造
this.name = name;
System.out.println(name );
}
public static void main(String[] args){
// 下面的语句使用有参构造创建一个Human对象叫human,并初始化humen对象的name等于“三毛”
Human human = new Human("三毛");
System.out.println(human.name);
}
}
static关键字&静态变量和静态方法
在类中被static修饰的变量将静态变量(类变量),被static修饰的方法叫静态方法
静态变量
class Human {
String name = "二毛";; //name属性(实例成员变量)
static int heart = 1; //使用static定义静态成员变量heart,也叫类变量
}
实例变量和静态成员变量的区别
一、实例变量
1、只能被对象访问
2、不同对象之间不共享数据值二、静态成员变量
1、可以被对象访问(格式:对象名.静态变量名),也可以用类名词访问(格式:类名.静态变量名)
2、不同对象之间共享数据值
静态方法
class Human {
int method1(int num){
System.out.println("这是一个实例方法");
return 1+num;
}
//静态方法
static int method2(int num){
System.out.println("这是一个静态方法");
return 1+num;
}
}
实例方法与静态方法【类方法】的区别
一、实例变量
1、实例方法只能对象访问,
2、实例方法只在方法调用时分配运行空间,二、静态方法【类方法】
1、 静态方法【类方法】 可以对象访问,也可以类名访问
2、静态方法【类方法】在方法调用前已经分配好运行空间。
3、静态方法不可以使用this关键字
4、静态方法不可以直接调用非静态方法,都是可以调用其他静态方法
this 关键字
在上面的对象的创建和使用中的setName()方法中,使用了一个关键字this,如下:
class Human {
String name = "二毛";
static int heart = 1;
String getName() {
return name;
}
void setName(String name) {
this.name = name;
}
/*main方法*/
public static void main(String[] args){
// 下面的语句将创建一个Human对象叫human
Human human = new Human();
}
}
现在说明this代表什么?
this英文意思位“这”
,在Java中表示当前调用类中属性或方法的对象,例如上面例子中的this就代表对象human。
实际上this代表当前对象的引用
class Human {
String name = "二毛";
static int heart = 1;
String getName() {
return name;
}
void setName(String name) {
this.name = name;
}
/*main方法*/
public static void main(String[] args){
// 下面的语句将创建一个Human对象叫human
Human human1 = new Human();
Human human2 = new Human();
human1.setName("小红");//此时this代表的是human1的引用
human2.setName("小明");//此时this代表的是human2的引用
}
}
即哪个对象去操作类,这时的this就代表该对象,或者说该对象的引用。