Day9 一. 面向对象思想 二. 内存区域分析 三. 成员变量与局部变量
作者:互联网
一. 面向对象思想
面向过程与面向对象都是解决问题的一种思路
面向过程:根据业务逻辑,从上到下写代码;强调的是步骤、过程、每一步都是自己亲自去实现的。
面向对象:创建对象,使用对象,指挥对象做事情。
面向对象的编程思想:
将复杂的事情简单化,将我们从执行者转变成指挥者
面向对象三大特征:封装性、继承性、多态性
1.1 相关概念
对象:程序世界中万事万物皆对象,是一组相关的属性和行为的集合。对象是实体
类:一组相同对象的集合。类是抽象的
属性 就是该事物的描述信息
行为 就是该事物能够做什么
1.2 学生类的定义
属性:姓名、年龄、性别
行为:学习、睡觉
1.3 手机类的定义
属性:品牌、价格
行为:打电话、玩游戏
二. 内存区域分析
jvm在运行java应用程序过程中,会把它所管理的内存划分为若干不同的数据区域。
为什么要有堆和栈?这样设计有什么好处?
-
Java自动管理堆和栈,程序员不能直接地设置栈和堆。
-
Java的堆是一个运行时数据区。堆是由JVM的垃圾回收器自动管理的。堆的优势是可以在程序运行时,动态地分配内存大小,但是正是由于这个原因,它的存取速度较慢。
-
栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小和生存期是必须确定的,缺乏灵活性。
-
栈有一个很重要的特性,就是存在栈中的数据可以共享。
栈:每一个方法被执行的时候,都会在栈区创建一块空间
栈的特点:先进后出
方法被调用直至执行完毕的过程,对应入栈到出栈的过程
栈是由系统自动分配,速度快,栈式一个连续的内存空间
堆:堆用于存储创建好的对象和数组(数组也是对象)
堆是一个不连续的内存空间,分配灵活,速度慢
方法区:
方法区属于堆。用来存储类、常量等相关信息
也叫静态区。用来存放程序中永远不变或唯一的内容(类信息、静态变量、字符串、常量等)
A:在类中的位置不同
成员变量:在类中方法外
局部变量:在方法定义中或者方法声明上
B:初始化值不同
成员变量:有默认初始化值
局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。
C:在内存中的位置不同
成员变量:在堆内存(成员变量属于对象,对象进堆内存)
局部变量:在栈内存(局部变量属于方法,方法进栈内存)
D:生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
注意事项:
局部变量名称可以和成员变量名称一样,在方法中使用的时候,取值采用的是就近原则。
基本数据类型变量包括哪些:byte,short,int,long默认值是0
float,double默认值是:0.0
boolean:false
char:’\u0000’
引用数据类型变量包括哪些:数组,类,接口,、String ,引用数据类型作为成员变量时:初始化的默认值是:null
方法的形式参数是类名的时候如何调用(掌握)
A:方法的参数是类名public void print(Student s){}//print(new Student());
如果你看到了一个方法的形式参数是一个类的类型(引用类型),这里其实需要的是该类的对象。
匿名对象的概述和应用(掌握)
匿名对象的定义:没有名字的对象
匿名对象应用场景
需要通过该对象去调用方法,仅仅只调用一次的时候。
匿名对象调用的好处
节省代码
注意:调用多次的时候,不适合。匿名对象调用完毕就是垃圾。可以被垃圾回收器回收。
匿名对象可以作为实际参数传递
public class Demo1 {
public static void main(String[] args) {
int a =0;
System.out.println(a);
method();
}
static void method(){
int a = 0;
}
}
public class Demo2 {
public static void main(String[] args) {
Student s1 = new Student();
System.out.println("这个学生的姓名是:"+s1.name);//null 引用数据类型的默认值 空的null
System.out.println("这个学生的姓名是:"+s1.age);//null 引用数据类型的默认值 空的null
}
}
public class Demo3 {
int x ; //成员变量 默认值0
public static void main(String[] args) {
int x = 10; //局部变量
//局部变量名称可以和成员变量名称一样,在方法中使用的时候,取值采用的是
// 就近原则
// System.out.println(x);
Demo3 d1 = new Demo3();
d1.x = 888;
Demo3 d2 = new Demo3();
d2.x = 999;
System.out.println(d1.x);
}
}
public class Student { //作用: 从两方面描述学生类 Student类
//不能单独运行 依赖一个主类(测试类)
/*
属性: ---->变量 体现
微信名、姓名、年龄、性别
行为: ----->方法 体现(能够完成某个功能的代码块)
说话、学习、打游戏
*/
String wechatName;//微信名
String name; //姓名
int age;//年龄
char sex;//性别
//方法 不加任何任何修饰符
void speak(){
System.out.println("讲得好");
System.out.println("花");
}
void show(){//展示自己的信息
System.out.println("我叫"+name+",今年:"+age+",性别是:"+sex);
}
void study(){
System.out.println("看视频");
System.out.println("敲代码");
System.out.println("写作业");
}
void playGame(){
System.out.println("找人");
System.out.println("去网吧");
System.out.println("开黑");
}
}
public class TestStudent {//TestStudent类 : 程序的基本单元,一个应用程序是由多个类组成的
//TestStudent里面有main()方法 这个TestStudent类 可以称之为 主类(测试类) 才能运行
//入口
public static void main(String[] args) {
//测试 Student类
Student s1 = new Student();
//给属性赋值 对象名.属性名 = 值;
s1.wechatName = "Shmily";
s1.name = "李杨";
s1.age = 16;
s1.sex = '男';
//通过对象去调用方法 指挥对象做事
s1.playGame();
s1.speak();
s1.study();
s1.show();
//再来一个对象
Student s2 = new Student();
s2.wechatName = "温温温";
s2.name = "温译为";
s2.age = 18;
s2.sex = '男';
s2.show();
System.out.println("----------------------------");
Student s3 = s1;//赋值 引用地址
s3.sex = '女';
s1.show();
s3.show();
}
}
标签:区域分析,Day9,对象,s1,局部变量,System,Student,println,out 来源: https://blog.csdn.net/yjx12581/article/details/122689793