#对象与类 局部变量与全局变量
##面向对象(Object Oriented,OO)
- 面向对象(Object Oriented,OO)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术[1]发展到一定阶段后的产物。核心特性包括:类,对象,方法,封装,继承和多态。
#类
##1.类是什么
-
类是面向程序程序设计实现信息封装的基础。
-
具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。
-
类是一种抽象的概念。
-
对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。
-
类是一种用户定义的引用数据类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。
##2.如何编写一个java类
- 通过class关键字来创建一个类 如下
public class Pratice{
//public---访问限制修饰符(对类的访问权限)
//class---创建类的关键字(类的标志)
//Pratice--类名(首字母大写)}
- 格式 访问限制修饰符 class 类名{} 如下
public class Practice{ }
final class Programmer{ }
class User{ }
##3.Java类中可以编写什么
-
拿杯子举个例:杯子-----名字 形状 大小 颜色 装东西
名字,形状,大小,颜色-----基本属性
装东西-----基本功能 -
通过事物的基本属性和基本功能来描述具有共同性质的一组事物。
基本属性------变量
基本功能-----方法
变量–是用来在类中描述事物的基本属性
方法–是用来在类中描述事物的基本功能
##4.类的三大特性
-
封装性
将数据和操作封装为一个有机的整体,由于类中私有成员都是隐藏的,只向外部提供有限的接口,所以能够保证内部的高内聚性和与外部的低耦合性。用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员,能够增强安全性和简化编程。
-
继承性
继承性更符合认知规律,使程序更易于理解,同时节省不必要的重复代码。
-
多态性
同一操作作用于不同对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向父类(基类)的指针,来调用实现子类(派生类)中的方法。
#对象
##1.对象是什么
-
通过java类所产生的实体。
-
对象是人们要进行研究的任何事物,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。对象具有状态,一个对象用数据值来描述它的状态。对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中。
-
对象是一种具体的概念。
##2.如何通过Java类得到对象
- 通过new + 构造方法就可以得到一个类的对象。
- 类中的构造方法就是为了创建对象而存在的。
##3.通过Java类创建的对象可以做什么
- 可以在其他类的构造方法中访问该类的变量;
- 可以在其他类的实例方法中访问该类的变量;
- 可以在其他类的类方法中访问该类的变量;
- 可以在其他类的方法中访问该类的方法;
如下
public class Student {
public Student(){
System.out.println("Student类的构造方法");
}
public void testStudent(){
System.out.println("student类的实例方法");
}
public static void testStaticStudent(){
System.out.println("student类的类方法");
}
}
#类与对象的关系
-
类与对象的关系就如模具和铸件的关系,类的实力化的结果就是对象,而对对象的抽象就是类,类描述了一组有相同特性(属性)和相同行为的对象。
解释的通俗一点就是,人是一种类,而具体的某一个人就是一个对象,每一个对象都符合这个类型的标准。
一个类的所有对象都有相同的属性(都是人类),但有不同的属性值(名字、身高不一样等),不同的类的属性不完全相同。
#局部变量
- 定义:定义在方法中的变量都是局部变量(main方法也是方法,所以定义在main方法中的变量也是局部变量)。
- 生存时间:局部变量的生存时间和方法的生存时间一致,调用该方法声明该局部变量并初始化的时,该局部变量被创建并分配内存空间;直到该方法调用结束局部变量也就结束了。
- 是否需要初始化:局部变量在使用前必须进行初始化,系统默认不会对局部变量进行初始化数据操作,如果局部变量在使用前没有进行初始化则会在编译器报错;如果局部变量进行了声明没有进行初始化, 但是也一直没有被使用的话编译也是不会报错的(局部变量使用前必须初始化)。
#全局变量
##非静态全局变量:
- 定义:非静态全局变量都是定在类中,是类的成员变量或者说是成员属性属于类的一部分(或者说是对象的一部分)。
- 生存时间:非静态全局变量加载在堆内存中,随着声明初始化而创建,随着对象消亡而消亡。
- 是否需要初始化:全局变量都是不需要被强制初始化的,系统都会默认根据其数据类型进行默认赋值;但是建议在声明时都进行初始化操作。
##静态全局变量:
- 定义:静态的类成员变量。
- 生存时间:静态全局变量随着类的字节码文件加载而加载产生,随着字节码文件的消失而消失,生存时间比类的 对象还要长。
- 是否初始化:凡是全局变量都是可以不要初始化的,静态变量也是一样,系统会自动根据其数据类型进行赋默认值,但是建议变量在声明时都进行初始化。
如下
import java.util.Scanner
public class Practice {
public static int sum(int a) {
int b = 2,c = 0; //a,b,c仅在函数sum()内有效
return a + b + c;
}
public static void main(String[] args) {
int m,n; //m,n仅在函数main()内有效
Scanner sc = new Scanner(System.in);
m = sc.nextInt();
n = sum(m);
System.out.println("n=" + n);
}
}