1.对象
对象的概念:
所有具象化的个体都是对象,也就是常说的万物皆对象,我们可以将一个宇宙,一个星球,一个国家,一个人,一辆车,一只猫,一直蚂蚁,一个细胞都看做一个对象。而对象存在属性与方法,对于一个人来说,一个手是你的属性,而你可以通过这个手做什么事,就是你的方法。简而言之,属性就是你的年龄,面貌,姓名这些值,而你的方法就是指你可以做到的行为(比如编程)。
对象对的特点:
- 对象具有属性和行为。
- 对象具有变化的状态。
- 对象具有唯一性。
- 对象都是某个类别的实例。
- 一切皆为对象,真实世界中的所有事物都可以视为对象。
2.面向对象(Object-Oriented Programming 简称OOP)
Java是一门完全面向对象的语言
面向对象思想,是一种编程思维,也是一种思考问题的方式.如何建立面向对象的思维呢?
1、先整体,再局部
2、先抽象,再具体
3、能做什么,再怎么做面向对象的三大特征: 封装, 继承. 多态
面向对象与面向过程的思想对比::
面向过程-洗衣服:
1.拿个盆
2.倒点水
3.倒店洗衣粉
4.泡一泡
5.搓一搓
6.洗一洗
7.晾干
面向对象-洗衣服
1.找个女朋友
2.把衣服给他
结论:
面向过程: 强调的是"过程".完成任何工作,都要一步一步的自己完成.
面向对象: 强调的是"对象".完成工作时,首先,要找个对象,然后,把工作交给对象,让对象帮我们干活.
3.类与对象
类的概念:
类就是"类别". 他是一系列事物的统称,是一个抽象性的概念.对象: 是实际存在的个体.
对于java来讲,类是对一种具备同样特点(即同样属性与方法)的集合体,类不是一个具体的对象,只是一描述。对象则是类的具象化(实例化),具备类的属性与方法。比如说人类是一个类,指定的一个人就是对象。猫是一个类,确定的一只猫则是一个对象。而对象具备这个类所有方法与属性。类就像是一张设计图, 而对象则是根据这个设计图所创建出的一个体. 对象时基于类的.
类是对象的描述
对象时类的个体
3.1类的语法格式
public class 类名{
//属性(成员变量)
//1.成员变量就是一个"放在类中方法之外"的变量.
//2.描述该类时使用的名词,就是该类的属性
//方法(成员方法)
//1.成员方法就是一个"没有static关键字"的方法
//2.描述该类时使用的动词,就是该类的方法
}
3.2对象的创建与操作
// 创建对象
类名 对象名 = new 类名();
// 使用成员变量
对象名.成员变量(仅在成员变量没有封装的情况下这样使用)
// 使用成员方法
对象名.成员方法();
3.3类中的成员变量与局部变量
4大区别:
书写位置:
成员变量: 类中方法外
局部变量: 方法内部.
存储位置:
成员变量: 存储在堆中,和对象在一块.
局部变量: 存储在栈中,和方法在一块.
生命周期:
成员变量: 随着对象的创建而出现,随着对象的消失而消失.
局部变量: 随着方法的调用而出现,随着方法的结束而消失.
初始化值:
成员变量: 有默认初始化值.
局部变量: 没有默认初始化值.
4.private关键字
概念:
是一个权限修饰符, 代表的是私有的, 可以对成员变量进行封装
作用:
可以修饰成员变量,也可以修饰成员方法.
被private的修饰的成员, 只能在类的内部访问. 不可以在别的类中访问
注意:
如果对成员变量进行了private私有化,则必须给成员变量提供两个方法.一个用来获取值(get变量名()),一个用来设置值(set变量名())set方法:
public void set(数据类型 形参变量名){
成员变量 = 形参变量名;
}
get方法:
public 返回值数据类型 get(){
renturn 成员变量;
}
5.this关键字
特点:
this关键字,只能书写在方法的内部.
this代表的是"调用方法的那个对象".
作用:
当成员变量和局部变量重名的时候,使用"this.成员变量"来找到成员变量.
6.封装
概念:
指的是把"代码/逻辑"封起来,加以限制,不让别人随便调用,这种行为就称之为"封装".
优点:提高代码的复用性.
提高代码的安全性.
应用:常见的"方法"就是对成员变量进行封装.
成员变量的封装,就是让成员变量私有化,然后提供get,set方法.
7.构造方法(构造器)
概念:
是写在类中的一种特殊的“成员方法”,它是在类构造对象时要使用的方法,通过这一方法实现对对象的初始化。我们在创建对象时,等号右边new后边的内容便是该类的构造方法(如:new Person(12))。 但是像之前写的一些类,我们并未加入构造方法,这样的情况下,系统会自动添加无参构造方法(如:new Person()).
简单来说构造方法就是将对象中的成员变量进行初始化,
格式:
1.构造方法的名字必须和类名一模一样
2.构造方法没有返回值类型,连void都没有
3.构造方法不能有返回值.就是不能有"return 值;"
执行:
1.构造方法是在创建对象的时候,就自动执行.
2.构造方法不能手动调用.
作用:
在创建对象的同时,给成员变量进行赋值(初始化).
注意:
1.如果我们不书写任何构造方法,则系统会默认提供一个无参构造方法.
2.如果我们书写了任何构造方法,则系统就不再提供无参构造方法了.
3.以后在书写类的时候,永远都写上"无参构造方法"和"有参构造方法".
7.1构造方法的"有参"和"无参"
无参数构造方法:
就是不赋予成员变量参数,让成员变量的值为默认值
有参数构造方法:
就是在创建对象时将成员变量进行赋值
8.javaBean(标准类)
概念:
javaBean就是专门用于封装数据的类,
书写要求:
必须将所有成员变量进行私有化
必须提供对应的getter和setter方法,
必须然提供无参构造方法与有参构造方法
9.面向对象的代码练习
需求:
创建一个类 用来描述"学生", 属性为姓名与年龄,功能是打印姓名与年龄
根据这个类创建一个方法,实现学生的年龄是多少就打印多少行 生日快乐
/**
* 定义一个学生类
* 属性:
* 姓名
* 年龄
* 功能:
* 打印出这个学生的信息
*/
public class student {
//定义成员变量,进行封装
private String name;
private int age;
//为封装的成员变量,提供set方法与get方法
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void show(){
System.out.println(name+"- -"+age);
}
}
/**
* 根据student类来创建一个对象
* 使用成员变量实现根据年龄打印生日快乐的功能
*/
public class TestStudent {
public static void main(String[] args) {
//定义对象 s
student s= new student();
s.setName("金城武");
s.setAge(22);
int count = 0;
for (int a = 0; a <s.getAge();a++){
System.out.println("生日快乐");
count++;
}
System.out.println(count);
}
}