终于到面向对象了,Java 语言的重中之重 奥利给!!!
Java 面向对象学习的三条主线:1、Java 类及类的成员:属性、方法、构造器;代码块内部类
2、面向对象三大特征:封装、继承、多态性、(抽象性)
3、其他关键字:this\super\static\final\abstract\interface\package…
面向过程: 强调 是功能行为,以函数为最小单位,考虑如何做
面向对象: 将功能封装进对象,强调了具备功能的对象,以类/对象为最小单位,考虑谁来做
类: 是对一类事物的描述,是抽象的、概念上的定义
对象: 是实际存在的该类事物的每个个体,因而也称为 实例
面向对象程序设计的重点:类的设计
设计类:即设计类的成员
常见类的成员:1、属性(也称成员变量(field:域、字段)) :对应类中的成员变量
2、行为(成员方法、函数、method):对应类中的成员方法
创建类的对象=类的实例化=实例化类
二、类和对象的使用(面向对象思想的落地实现)
1、创建类,设计类的成员
2、创建类的对象
3、通过“对象.属性”或者"对象.方法"调用对象的结构
用代码来更具体的看看以上三点的落实
public class PersonTest {
public static void main(String[] args){
//2、创建 Person类的对象
Person p1=new Person();
//3.1、调用对象就结构:属性、方法
p1.name="Jackson";
p1.isMale=true;
//3.2、调用方法: 对象.方法
p1.eat();
p1.sleep();
p1.talk("Chinese");
Person p2=new Person();
System.out.println(p2.name);
//将 p1变量的保存的对象地址值赋给了 p3,导致 p1和 p3指向了堆空间的同一个对象实体
Person p3=p1;
System.out.println(p3.name);
p3.age=18;
System.out.println(p1.age); //p1和 p3 指向同一个 所以说 age 也是改变了
}
}
// 1、创建类,设计类的成员
class Person{
//属性
String name; //姓名
int age; //年龄
boolean isMale; //是否为男性
// 方法
public void eat(){
System.out.println("可以吃饭");
}
public void sleep(){
System.out.println("可以睡觉");
}
public void talk(String language){
System.out.println("人可以说话,说的是"+language);
}
}
如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性(非 static)
**意味着:**如果我们修改一个对象的属性a,不影响另一个对象的属性 a
内存解析
栈:指虚拟机 的栈,用于存储局部变量
堆(heap):存放对象实例
方法区(Method Area):用于存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码
属性(成员变量)与 局部变量
1、相同点:
1.1: 定义变量的格式: 数据类型 变量名= 变量值
1.2: 先声明后使用
1.3: 都有其对应的作用域
2、不同点:
2.1:在类中声明的位置不同
属性:直接定义在类的一对{} 内
局部变量:声明在 方法内、方法形参、代码块内、构造器形参、构造器内部的变量
//例如在代码中可以查看
class User{
//属性
String name;
int age;
boolean isFemale;
public void talk(String language){ //language:形参 局部变量
System.out.println("我们使用"+language+"交流");
}
public void eat(){
String food="肉夹馍"; //局部变量
System.out.println("北方人喜欢吃"+food);
}
2.2: 关于权限修饰符不同
属性:可以在声明属性时,指明其权限,使用权限修饰符
常用的权限修饰符:private\public\缺省的\protected —> 封装性
目前:大家使用声明属性时,都使用确省就行(即不加修饰符)
局部变量:不可以使用权限修饰符
2.3: 默认初始化值的情况
属性:
类的属性,根据其类型,都有初始化值
整形(byte short int long):0
浮点型(float double): 0.0
字符型(char ): 0(或者‘、u0000’)
布尔类型(boolean): false
引用数据类型(类、接口、数组): null
局部变量: 没有默认初始化值,意味着我们在调用局部变量前一定要显式赋值
特别的:形参 我们在调用的时候 赋值
2.4 在内存中加载的位置不同
属性:加载到堆空间(非 static)
局部变量: 加载到栈空间
类中方法的声明和使用
方法:描述类应该具有的功能
比如:Math 类中:sqrt()\random()…
Scanner 类型: nextXxx()…
1、举例子:
class Customer{
//属性
String name;
int age;
boolean isMale;
//方法
public void eat(){ //void 没有返回值
System.out.println("eat");
}
public void sleep(){
System.out.println("sleep");
}
public String getName(){
return name; //返回名字
}
public String getNation(String nation){
String info="我的国籍是:"+nation;
return info;
}
}
2、 方法的声明:权限修饰符 返回值类型 方法名(形参列表){
方法体
}
注意:static、final、abstract来修饰的方法,后面再说
3、 说明:
3.1、 关于权限修饰符
java 规定的四种权限修饰符: private\public \protected\缺省 —>封装性细说
3.2、 返回值类型: 有返回值的 vs 没有返回值的
3.2.1 如果方法有返回值,则必须在方法声明时,指定返回值的类型。同时方法中需要使用 return 关键字来返回指定类型的变量或常量
如果方法没有返回值,则方法声明时,使用 void 表示,通常不用 return,但是如果使 用的话,只能"return" 表示结束此方法的意思,return 后不可以声明表达式
3.2.2 我们定义的方法该不该有返回值? 看经验 多敲代码
a.题目要求 b. 凭借经验:具体问题,具体分析
3.3、 方法名:属于标识符,遵循标识符的规则和规范,“见名知意”
3.4、 形参列表:方法可以声明零个、一个、或多个
3.4.1格式: 数据类型 1 形参 1,数据类型 2 形参 2,…
3.4.2 我们定义方法要不要形参?a.题目要求 b.凭经验
3.5、 方法体:方法功能的体现(重要的 important)
4、return 关键字的使用:
1、使用范围:使用在方法中
2、作用:结束方法
针对 有返回值类型的方法,使用 “return 数据” 方法返回所要的数据
3、注意点:return 语句后面不可以声明执行语句
5、 方法的使用中,可以调用当前类的属性或者方法
特殊的:方法a 中又调用了方法 a,称为递归方法
方法中,不可以定义方法
首先,祝大家新年快乐!!!祝大家 2025 都身体健康、事事顺心!
近日,因为个人感情问题以及到了过年,事情比较多,最近三天都没有学习,落下了很多功课,之后需努力学习,及时赶上。
今天主要学习了 java 核心的内容:面向对象,学习了其中属性、方法、类等相关的的基础知识。后面还需多敲敲代码熟悉一些这些内容
送给自己和大家一句话:
努力奔跑吧,去追上曾被寄予厚望的自己!!!