面向对象
面向过程和面向对象的区别?
面向过程:事物简单,可以用线程思维解决
面向过程:事物比较复杂,已经无法用线性思维解决
共同点:面向过程和面向思维都是解决问题的一种方法。相辅相成
面向对象的本质:以类的方式组织代码,以对象的方式组织(封装)数据。
类(Class):是对对象的抽象。对象(Object):说具体的事物(实例跟创建对象一个意思)
类可以看成是一个模板,系统可以根据类的模板创建对象。
对象和类的关系:特殊到一般,具体到抽象。
类可以看成一类的对象的模板,对象可以看成是该类的一个具体实例。
类是用于描述同一类型的对象的一个抽象的概念,类中定义了这一类对象所具有的静态和动态实现
对象是JAVA程序的核心。"万物皆对象"
定义类:
public class Car{//每一个源文件必须只有一个public class,并且类名和文件名保持一致
}
class Type{//一个java文件可以同时定义多个class
}
一般来说,类的具体信息都有:属性field,方法method,构造器constructor
类是组成java的基本属性,类体有两部分组成,一部分是变量的定义,一部分是方法的定义。
示例;
public class SxtStu{//修饰符 class 类名
//属性
int id;
String name;
int age;
Computer comp;
void study(){
System.out.println("正在学习");
}
public statiic void main(String[] args){
SxtStu p=new SxtStu();//创建对象 类名 对象名 =new 类名();
p.name ="澳塔曼";//对象名.属性 为属性赋值
p.study();//调用方法
}
}
访问类中的属性和方法
对象名.属性 对象名。方法名
属性和方法的区别?
1.声明位置不同: 类中 和 方法中
2.作用范围不同:属性是在当前类中都可以使用, 方法是在当前方法中使用
3.内存不同: 类放在栈内存中,方法是在堆内存中
内存分析:
栈:
1.每个线程私有,不能实现线程间共享。
2.局部变量放在栈中。先进后出,自下而上存储
3.栈是系统自动分配的,是一个连续的内存空间。
4.方法完毕后自动释放空间。
堆:
1.放置new出来的对象,需要垃圾回收机制回收
2。堆是不连续的空间
方法区:
1.所有线程共享
2.用来存放程序中不变的内容。 (类代码信息,静态变量,字符串常量等)
属性(field,成员变量)
属性用于定义该类或类对象包含的数据或者静态方法。
属性的作用域是整个类体。
在定义成员变量时,可以对其初始化,如果不初始化,系统将使用默认的值对其初始化。例如:int类型的默认值0 ,Boolean:false 等
属性的定义格式:
[修饰符] 属性类型 属性名=默认值
类的方法
方法则用于定义该类的实例行为特征和功能实现。方法是对类和对象的抽象。类似于面向过程的函数。
面向过程中,函数是基本单位,整个程序由一个个函数调用而成。
面向对象中,类是整个程序的基本单位,方法从属于类。
方法的定义格式:
[修饰符] 方法返回值类型 方法名(形参列表){
//方法体
}
对象的创建和使用:
必须使用new关键字创建对象。 :Student stu=new Student();
使用对象(引用),成员变量来引用对象的成员变量。
使用对象(引用),方法(参数列表)来调用对象的方法。 person.setAge(230)
同一个类的每个对象有不同的成员变量存储空间。
每一个类的每个对象共享该类的方法。
构造器(构造方法,constructor)
构造器用于构造该类的实例。
java通过new关键字来调用构造器,从而返回该类的实例。
格式:
[修饰符]类名 (形参列表){
//语句
}
要点;
通过new关键字调用。
构造器虽然没有返回值,但是不能定义返回类型(返回值的类型肯定跟本类相同),不能 在构造器中使用return。
如果没有调用构造函数,系统会默认一个无参的构造函数。
构造器方法名必须跟类名相同。
构造器中不能有返回值,为什么又定义void?
构造函数有返回值就是构造函数对象。
示例:
请定义一个交通工具(Vehicle)的类其中有: 属性: 速度(speed)、 体积(size)等,方法:移动(move())、设置速度(setSpeed(int speed))、加速 speedUp()、减速 speedDown()等。最后在测试类 Vehicle 中的 main()中实例化一个交通工具对象并通过方法给它初始化 speed,size 的值并且通过打印出来。另外调用加速、减速的方法对速度进行改变。
public class Vehicle{
private int speed;
private int size;
public void Vehicle(){};无参构造
public void Vehicle(int speed,int size){
this.speed=speed;
this.size=size;
}
public void move(){
System.out.println("前进速度:"+speed);
}
public void setSpeed(int speed ){
this.seep=speed;
System.out.println("初始速度:"+speed);
}
public void setSize(int size){
this.size=size;
System.out.println("初始体积:"+size);
}
public void speedUp(){
this.speed+=20;
System.out.println("速度增加20后为:"+speed)
}
public void speedDown(){
this.speed-=10;
System.out.println("减速10后为:"+speed);
}
public static void main(String []args){
Vehicle p=new Vehicle();//创建对象
p.setSize(20);//初始体积
p.setSpeed(30);//初始速度
p.move();//移动
p.speedUp();//减速
p.speedDown();//加速
}
}