面向对象开发:
就是不断的创建对象、使用对象,指挥对象做事情
面向对象的特征:
封装、继承、多态
对象就是用来描述现实世界的事物的
现实世界的事物由 属性 和 行为 组成
Java中最基本的单位就是 类,所以我们就应该把事物通过类来体现
事物: 类:
属性 成员变量
行为 成员方法
类:是一组相关的属性和行为的集合
对象:是该类事物的具体表现
举例:
类: 学生
对象:张三(某个学生)
类:汽车设计的图纸/模型
对象: 汽车
类的定义:
java中用class描述事物也和上面一样
拥有成员变量和成员方法,定义一个类其实就是定义类的成员方法和成员属性
class Student{
}
类的使用
类名 对象名=new 类名();
对象名.变量名/方法名();
注意:
关于类的成员变量,就和之前数组的数组元素值一样,当数组被创建的时候,如果没有给成员
变量赋初值的话(在数组中这种情况叫做动态初始化),那么系统会给成员变量默认附上初值
各种数据类型默认情况下的初值
byte short int long :0
float double 0.0
char '\u0000'
boolean false
引用类型 null
具体如下:
class Student{
//学生事物:属性:姓名、年龄、地址
//行为 学习 吃饭 睡觉
/*
成员变量:和以前的定义一样的格式,只不过在类中方法外
成员方法: 去掉static
*/
String name;
int age;
String address;
//定义方法
public void study(){
System.out.println("学习!!!!");
}
public void eat(){
System.out.println("学习累了,要吃饭!");
}
public void sleep(){
System.out.println("学习累了,要困高高!");
}
}
//文件名称和测试的类要一致
class StudentDemo{
public static void main(String[] args){
/**/
Student s = new Student();
System.out.println(s.name+s.age+s.address);
}
}
在上面的代码中,学生类有成员变量name age address,但是创建对象的并没有给成员变量赋值,于是在new这个类创建对象的时候,系统会给成员变量
赋初值。
注意:
我们如果在一个文件写了2个或2个以上的类,那么在编译的时候会将这个文件中与之相关的类都进行编译
补充一点内存结构的思想:
在进行编译的时候,首先,class文件存储与方法区中,程序运行的时候,通过new会在堆中创建一个类对象
在栈中创建一个变量通过类对象在堆中的地址指向对象,类中方法最先是存储于方法区中,并且会有一个对应的地址
通过这个地址可以在方法区中找到这个方法,在堆中创建对象之后会将类中方法的地址都记录到堆中的类中,之后
如果需要调用到类的方法只要通过方法的地址就可以在方法区中找到方法了,要注意的是,由于方法是存储于方法区中
所以如果一个类创建了多个对象的时候,那么这多个对象的方法其实都是指向的方法区中的同一个方法。
就是不断的创建对象、使用对象,指挥对象做事情
面向对象的特征:
封装、继承、多态
对象就是用来描述现实世界的事物的
现实世界的事物由 属性 和 行为 组成
Java中最基本的单位就是 类,所以我们就应该把事物通过类来体现
事物: 类:
属性 成员变量
行为 成员方法
类:是一组相关的属性和行为的集合
对象:是该类事物的具体表现
举例:
类: 学生
对象:张三(某个学生)
类:汽车设计的图纸/模型
对象: 汽车
类的定义:
java中用class描述事物也和上面一样
拥有成员变量和成员方法,定义一个类其实就是定义类的成员方法和成员属性
class Student{
}
类的使用
类名 对象名=new 类名();
对象名.变量名/方法名();
注意:
关于类的成员变量,就和之前数组的数组元素值一样,当数组被创建的时候,如果没有给成员
变量赋初值的话(在数组中这种情况叫做动态初始化),那么系统会给成员变量默认附上初值
各种数据类型默认情况下的初值
byte short int long :0
float double 0.0
char '\u0000'
boolean false
引用类型 null
具体如下:
class Student{
//学生事物:属性:姓名、年龄、地址
//行为 学习 吃饭 睡觉
/*
成员变量:和以前的定义一样的格式,只不过在类中方法外
成员方法: 去掉static
*/
String name;
int age;
String address;
//定义方法
public void study(){
System.out.println("学习!!!!");
}
public void eat(){
System.out.println("学习累了,要吃饭!");
}
public void sleep(){
System.out.println("学习累了,要困高高!");
}
}
//文件名称和测试的类要一致
class StudentDemo{
public static void main(String[] args){
/**/
Student s = new Student();
System.out.println(s.name+s.age+s.address);
}
}
在上面的代码中,学生类有成员变量name age address,但是创建对象的并没有给成员变量赋值,于是在new这个类创建对象的时候,系统会给成员变量
赋初值。
注意:
我们如果在一个文件写了2个或2个以上的类,那么在编译的时候会将这个文件中与之相关的类都进行编译
补充一点内存结构的思想:
在进行编译的时候,首先,class文件存储与方法区中,程序运行的时候,通过new会在堆中创建一个类对象
在栈中创建一个变量通过类对象在堆中的地址指向对象,类中方法最先是存储于方法区中,并且会有一个对应的地址
通过这个地址可以在方法区中找到这个方法,在堆中创建对象之后会将类中方法的地址都记录到堆中的类中,之后
如果需要调用到类的方法只要通过方法的地址就可以在方法区中找到方法了,要注意的是,由于方法是存储于方法区中
所以如果一个类创建了多个对象的时候,那么这多个对象的方法其实都是指向的方法区中的同一个方法。