面向对象编程-初识类与对象(上)
我们通常会听到面向对象和面向过程编程语言,Java就是一种面向对象编程语言。那么怎么理解面向对象呢和面向过程呢? 比如说从古至今的历史都需要被记载下来撰写成史书。史书一般会有两种体裁:一种是纪传体,针对某一个人物记录他的生平和当时朝代所发生的事情;另一种是编年体,按照年份依次记录当时的事情。
面向对象就类似于纪传体,始终围绕一个对象来完成各种操作。把各种属性和方法封装在一起,只要留好接口,创建了新对象就可以完成一系列操作,不需要过分关注过程中具体怎么实行;而面向过程就类似于编年体,想进行什么操作依次调用这些操作就好了。
1.面向对象三大特征:
a:封装性
b:继承性
c:多态性
2.类与对象
类与对象的概念:
类就是对具有共性的具体事物的一种抽象,是一个类别。对象就是一个现实中具体的事物,是对类的具体化、实例化。
比如说生物学中的划分:界、门、纲、目、科、属、种。类就好比这种划分中的一种,把具有共同属性的一些具体事物划分为到一个类中,但这个类只是一个抽象,并不是具体事物。而对象就是这个类中客观存在的一个实体,对象属于类。
类中的组成:
一个类中包含这类对象的共有属性、共有方法。
比如"人"这个类,所有人都有姓名、年龄、所有人都会吃饭、睡觉。姓名和年龄就是属性,吃饭和睡觉就是方法。
类的定义与使用:
给类、属性和方法加各种权限,就是让本类中的对象可以方便的访问到本类中成员所具有的属性和方法,而其它类的对象不可随意访问。
权限分为四种:public(公有)、protected(受保护)、default(默认,可以不写)、private(私有)
类的命名为驼峰式:若只有一个单词,其首字母大写;若包含两个及两个以上单词,各单词首字母均大写。 例如:People、PeopleAndMe
方法的命名:若只有一个单词,全都小写;若包含两个及两个以上单词,第一个单词小写,第二个及后面单词首字母均大写。 例如:print、printSomething
主函数:是整个代码的入口,相当于c语言中的int main(){ },只不过Java中的主函数没有返回值。
标准main函数的写法:
public static void main(String[] args){
}
定义类的语法:
访问权限 class 类名称{
访问权限 类型 属性;
访问权限 返回值 方法名称([形参]){
}
}
eg:
class People { //People类
public String name;//属性:姓名
public int age; //属性:年龄
public String getName() { //公有方法,返回值为String类型,方法名为: getName
return name;
}
}
产生对象的语法:
类名称 对象名称=new 类名称();
eg:
People people=new People();
People people1=new People();
People people2=new People();
对象的产生需要以下2步:
1>为对象开辟内存
2>调用合适的构造函数(构造函数不止一个)
3>加引用
3.访问权限和构造方法
如果类中的属性被public修饰,在类外要访问此属性的话用 对象.属性 就可以访问了。
如果被private修饰,在类外要访问此属性的话,在Java中要使用setter方法(修改属性内容)和getter方法(获得属性内容)
构造方法:构造方法就是当创建一个对象时,对这个对象的属性进行初始化。
eg:
class People {
public String name;
public int age;
public People( ){ //无参构造
}
public People(String name,int age){ //带参构造
this.name=name;
this. age= age;
}
}
构造方法需要遵循的原则:
a:方法名称与类名称相同。(为了方便系统调用 )
b:构造方法没有返回值。
c:每一个类中至少存在一个构造方法。(如果没写构造方法,系统会自动生成一个无参构造)
4.this关键字
用途:
1>this调用本类属性:
eg:
class People {
public String name;
public int age;
public People(String name,int age){
this.name=name;
this.age=age;
}
}
当构造中的参数与类中属性同名时,加上this关键字就可以表明是正在创建的对象的属性,与同名参数区分开来。
this.name=name;
this.age=age;
2>this调用本类方法:
a:调用普通方法:this.方法名称(参数)
eg:
class People {
public String name;//属性
public int age ; //属性
public People(String name,int age){ //有参构造
this.name=name;
this.age=age;
this.fun();//调用fun方法
}
public void fun(){
System.out.println("---");
}
}
b:调用构造:this(参数)
eg:
class People {
public String name;
public int age;
public People(){
}
public People(String name){
this.name=name;
}
public People(String name,int age){
this("name");//调用有一个参数String name的构造,在一个构造中若要调用其它构造,调用语句必须放在第一行
this.age=age;
}
}
3>this表示当前对象:
eg:
class People {
public void fun() {
System.out.println("---");
}
}
public class Text{
public static void main(String[] args){
People people=new People();
people.fun();
}
}
只要对象调用了本类的方法,这个this就表示当前执行的对象
5.static关键字
对象引用以及对象的存储:
对象的引用存储在栈内存中,对象以及所包含的内容存储在堆内存中。
给对象的属性加上static修饰后,有关内容就存储在全局数据区中了。成为共享内容。
static属性又称为类属性,保存在全局数据区的内存之中,所有对象都可以进行该数据区的访问。
结论:
a:要访问static属性,使用类名称.属性名。
b:所有的非static属性(实例变量)必须在对象实例化后使用。
c:所有的static方法不允许调用非static定义的属性或方法
b:所有的非static方法允许访问static方法或属性