什么是面向对象和面向过程?
面向过程:强调每一个功能的实现步骤
面向对象:强调的是对象,然后由对象去调用功能,但是面向对象是基于面向过程的。
例子:你电脑系统要重装,你不会,你朋友会,你就找你朋友帮忙,然后你朋友就帮你装好了,这就是面向对象。
类与对象
类就是一组相关属性和行为(也就是变量方法)的集合,是一个抽象的概念。
对象是一个具体的事物,或者说是类的表现形式,也就是具体存在的个体。
在Java中如何去创建类,创建对象,以及如何使用?
如何创建类:根据需求分析,业务场景分析,需要什么对象,然后根据这个对象来分析,抽象出来一个概念。
如何创建对象:类名 对象名=new 类名();
调用对象的属性或者方法格式:
对象名.属性名
对象名.方法名
例子:比如创建一个学生类,首先分析学生的属性有哪些,学号,姓名,性别,年龄等,学生的行为有哪些(行为=方法):学习,吃饭等,根据分析编写Java代码;
Public class Student{//创建学生类
String sno;//定义String类型的学生编号
String sname;//定义String类型的学生姓名
String ssex;//定义String类型的学生性别
int sage;//定义int类型的学生年龄
public void study(){//定义学生的学习方法
System.out.println("我是学生,我爱学习");
}
public void eat(){//定义学生的吃饭方法
System.out.println("我饿了,我要吃饭");
}
}
创建好学生类之后我们就需要创建一个学生对象来调用,学生的属性和方法,如下所示:
public class StudentTest{//创建一个测试类
public static void main(String[]args){//创建一个main方法,他是程序的入口
Student s=new Student();//通过new创建一个对象s
s.sno="z20170123";//通过对象s为学生的学号赋初始值
s.sname="李明";//通过对象s为学生的姓名赋初始值
s.ssex="男";//通过对象s为学生的性别赋初始值
s.sage=12;//通过对象s为学生的年龄赋初始值
s.study();//通过对象s调用学生的学习方法
s.eat();//通过对象s调用学生的吃饭方法
}
}
在创建对象是new关键字的作用:
1、为对象分配内存空间,将对象的实例变量自动初始化(如果不为实例变量赋初始值的话),实例变量会使用其类型的默认值;如(int 的默认只是 0);
2、如果实例变量在声明是被显式初始化,那它就把初始化值赋给实例变量;
3、调用构造方法;
4、返回对象的引用;
在类中属性分为的变量分为成员变量和局部变量,他两个的区别是:
1、声明位置不同:
成员变量声明在类的方法外部。
局部变量声明在类的方法中或代码块中;
2、在内存中的位置不同
成员变量的位置是在对内存中。
局部变量是在栈内存中。(栈内存:先进后出,里面的变量用完之后,就成了垃圾,被回收);
3、作用于不同
成员变量的作用范围是整个类;
局部变量的作用范围是当前代码块。
还有就是成员变量随着创建对象的存在而存在,消失而消失;
局部变量随着方法的调用而存在,随着方法调用结束而消失;
4、初始化不一样
成员变量有初始化,默认值为其变量类型默认值。
局部变量没有初始化默认值,也就是说局部变量必须定义赋值,才能使用。
例子:在定义一个学生类
Public class Student{
String sno;//定义成员变量sno
String sname;//定义成员变量sname
String ssex;//定义成员变量ssex
int sage;//定义成员变量sage
public void study(String name){//定义一个有参的学生的学习方法,其中的name就是一个局部变量
System.out.println("我叫"+name+我是学生,我爱学习");
}
}
public class StudentTest{//创建一个测试类
public static void main(String[]args){//创建一个main方法,他是程序的入口
Student s=new Student();//通过new创建一个对象s
s.sno;//调用学生类的成员变量sno,不为其赋值,但是对象s会为其自动初始化为类型默认值
s.sname;//调用学生类的成员变量sname,不为其赋值,但是对象s会为其自动初始化为类型默认值
s.ssex;//调用学生类的成员变量ssex,不为其赋值,但是对象s会为其自动初始化为类型默认值
s.sage;//调用学生类的成员变量sage,不为其赋值,但是对象s会为其自动初始化为类型默认值
System.out.println(s.sno);
System.out.println(s.sname);
System.out.println(s.ssex);
System.out.println(s.sage);
s.study("李明");//调用学生类的study方法,并传一个初始值给study方法
}