1.1 面向对象
面向对象是指注重结果,不关系具体步骤(面向步骤)。比如调用一些包和类来进行工作->代替自己的编码过程。
特点(三大特征)
面向对象思想可以将复杂的事情简单化,并将我们从执行者变成了指挥者。
面向对象的语言中,包含了三大基本特征,即封装、继承和多态。
1.2 类与对象
- 类:是一组相关属性和行为的集合。
- 属性:就是该事物的状态信息。
行为:就是该事物能够做什么。
举例:小猫。
属性:名字、体重、
行为:吃、走、叫
**对象**:是一类事物的具体体现。对象是类的一个实例(对象并不是找个女朋友),必然具备该类事物的**属性** 和**行为**。
举例:一只小猫
**属性**:tom、5kg、2 years、yellow。
**行为**:溜墙根走、蹦跶的跑、喵喵叫。
类与对象的关系
类是对一类事物的表述,是**抽象的**。
对象是一类事物的实例,是**具体的**。
**类是对象的模板,对象是类的实体。**
1.3类的定义
**成员变量**:对应事物的属性
**成员方法**:对应事物的行为
public class ClassName {
//成员变量 ->成员变量直接定义在类中
String name;//姓名
int age; //年龄
//成员方法 ->不要写static关键字
public void eat(){
System.out.println("吃饭!");
}
public void sleep(){
System.out.println("睡觉!");
}
public void study(){
System.out.println("学习");
}
}
**定义类**:就是定义类的成员,包括成员变量和成员方法。
**成员变量**:和以前定义变量几乎是一样的。只不过位置发生了改变。在类中,方法外。
**成员方法**:和以前定义方法几乎是一样的。只不过把static去掉,static的作用在面向对象后面课程中再详细 讲解。
1.4 对象的使用
对象的使用格式
导包:指出需要使用的类在什么位置
import 包名称.类名称;
import roderick.java9.demo04.Student;
创建对象:
类名 对象名 = new 类名();
Student stu = new Student();
使用对象访问类中的成员:
对象名.成员变量;
对象名.成员方法()
//如果成员变量没有进行赋值,则有默认值,规则和数组一样 -> int-0 float-0.0 ...
改变成员变量内容:
//给成员变量赋值
s.name = "赵丽颖";
s.age = 18;
使用成员方法:
//调用成员方法
s.study(); // "好好学习,天天向上"
s.eat(); // "学习饿了要吃饭"
类对象也可作为方法的参数进行传递(传递地址)
也可作为返回值->同样返回地址
1.5 对象内存图
蓝色箭头为入栈,X代表出栈。方法运行完毕则从内存中出栈,**直到main方法也运行完毕出栈。**
两个对象使用同一个类中的方法时,他们各自定义的成员变量在内存中不一样,他们会分别传入同样的内存方法然后反馈;
(两个对象都进行了new)
1.6 局部变量和成员变量
区别
- 在类中的位置不同
成员变量:类中,方法外
局部变量:方法中或者方法声明上(形式参数) - 作用范围不一样
成员变量:类中
局部变量:方法中 - 初始化值的不同
成员变量:有默认值
局部变量:没有默认值。必须先定义,赋值,最后使用 - 在内存中的位置不同
成员变量:堆内存
局部变量:栈内存 - 生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
2.1 封装概述
封装性在Java当中的体现:
1.**方法就是一种封装**
2.关键字private也是一种封装
封装就是将一些细节信息隐藏起来,对于外界不可见。
2.2 封装的步骤
1.使用 `private` 关键字来修饰成员变量。
2.对需要访问的成员变量,提供对应的一对 `getXxx` 方法 、 `setXxx` 方法
2.3 private的操作
private的含义
- private是一个权限修饰符,代表最小权限。
- 可以修饰成员变量和成员方法。
- 被private修饰后的成员变量和成员方法,只在本类中才能访问。
private的使用格式
private 数据类型 变量名;
1.使用private
修饰成员变量:
public class Student{
private String name;
private int age;
}
2.提供getXxx
方法 / setXxx
方法,才能访问
public class Student{
private String name;
private int age;
public void setName(Sting n){
name=n;
}
public String getName(){
return name;
}
public void setAge(int a){
if(a< 100 && a >0)
{
age=a;
}
else
{
System.out.println("数据不合理"); //封装方法的一种使用
}
}
public int getAge(){
return name;
}
}
特例:
布尔值boolean
对于private 后的boolean类型,他的getXxx方法要写成 isXxx
2.4 封装优化 this关键字
this代表所在类的当前对象的引用(地址值),即对象自己的引用。
public class Person {
String name;
public void sayHello(String name)
{
System.out.println(name+",你好。我是"+this.name);
}
}
2.5 封装优化2 构造方法
构造方法 -> 用来创建对象
1.构造方法的名称必须和所在的类名称一模一样
2.构造方法不要写返回值类型,连void都不写
3.构造方法不能return一个具体的返回值
例子:
public class Student
{
private String name;
private int age;
//无参构造
public Student(){}
//全参重载
public Student(String name,int age)
{
this.name=name;
this.age=age;
}
public void setName(String name)
{}
.....
}
-------------------------------
Student one = new Student(name:"骆瑜",age:20);
//可以这样创建对象
1.如果你不提供构造方法,系统会给出无参数构造方法。
2.如果你提供了构造方法,系统将不再提供无参数构造方法。
3.构造方法是可以重载的,既可以定义参数,也可以不定义参数。
2.6 标准类—JavaBean
JavaBean是Java语言编写类的一种标准规范
要求:
public class ClassName{
//成员变量
//构造方法
//无参构造方法【必须】
//有参构造方法
//成员方法
//getXxx()
//setXxx()
}