JAVA学习日志4
JAVA 学习日志4
面向对象
在面向对象之前是面向对象的思想,面向对象的思想要落实到每一步具体操作每一步都要亲力亲为,面向对象是把一个功能打包起来,只要输入原料获得预期产出即可,并不需要知道包内如何运转。
- 面向对象的优点
1.简化代码,便于后期的维护和扩展
类和对象
- 类
类是一组属性和行为的集合,是一个抽象,概括的概念。
1.类的定义语法 : public class 类名 { 成员变量 成员方法} - 对象
对象是类的一个具体实例
1.创建对象的语法: 类的名称 对象名 = new 类的名称(); - 注意事项
- 自定义项的类,运行之后都会编译一个字节码.clsss文件,存储于方法区
- new 到的对象存储于堆内存
- 调用类内的方法,访问成员是的语法 对象名.方法名/成员名
- 一个对象在创建时的内存情况
1.类的字节码文件存储于方法区中,包含类的全部内容如成员变量,成员方法。这里只存储了成员变量,没有具体的值(这一情况符合类的抽象概念)(字节码文件只加载一次,不是每次创建对象的时候都进行加载)
2.程序执行时主方法main进栈,执行的创建对象的语句时,在堆内存开辟空间进行存储
3.堆内存里存储量实例化的类,即对象包含了每一个成员变量的具体值,成员方法存的则是方法的地址,这个地址指向方法区对应类的方法(成员方法可以对于各个对象来讲是相同的,并不需要实例化对象来获取不同的值,所有这里存地址)
4.栈内存里存储的是这个对象在堆内存中的地址
成员变量和局部变量区别
1.成员变量是定义在类里的而局部变量是定义在方法里的。
2.成员变量存储于堆内存而局部变量存储于栈内存
3.成员变量的作用域是整个类而局部变量的作用域是所在方法
4.成员变量的生命周期是随着类的创建而开始,类的销毁而结束的。局部变量的生命周期是随着方法的调用而开始,方法的结束而结束。
5.成员变量都有默认值 局部变量 必须是先赋值之后才能使用 没有默认值
匿名对象
顾名思义没有名字的对象
- 匿名对象的用处
- 对象的方法只需要调用一次的时候 就可以使用匿名对象 匿名对象 可以节省内存空间,如:
- 对象做为方法的参数时可以使用匿名对象,如:
- 对象作为返回值时可以使用匿名对象,如:
封装
对属性进行隐藏 对方法里的内容进行隐藏(对具体的操作来进行隐藏)
- 封装的优点:
(1) 隐藏方法内部的系统 或者是隐藏属性
(2) 提高代码的安全性
(3) 提高代码的复用性 - 封装的原则
(1) 隐藏内部的属性
(2) 提供公有的对外方法 - 封装的两种体现形式
(1) 使用关键字 private 属性(成员变量)
(2) 对方法进行抽取 方法 - 对成员变量的封装:
1.把成员变量用 private 进行修饰
2.设置两个对外的 public 方法 getXXX(); setXXX();来对外提供成员变量的值,或者给成员变量进行赋值(eclipse 里弹出 快速生成这类方法的快捷键是 alt +shift +s)
变量的就近原则和this关键字
- 就近原则
变量在调用时,调用的是离当前变量最近的方法,如果最近的方法没有找到
就会继续往上进行查找,如果一直找不到就报错 - this作用:
1.主要为了解决变量名重名的问题 (语法:this.变量名)(如:方法里和类中同样的变量名name,根据就近原则 name指的是方法里的name,需要访问对象中的那么name时,需要this.name)
3.this的具体值其实是一个地址,指向所在对象
构造方法
语法:访问修饰符 类名(参数列表){ }
-
注意事项
1.构造函数没有返回类型
2.构造函数可以进行重载
3.当类里没有写构造函数时,在创建对象时会自动生成并执行一个无参构造函数。如果类里定义了构造函数,在创建对象是则不会自动生成无参构造函数
4.不能通过对象名来调用构造方法
5.构造方法只能调用一次 (即在类的创建时就会调用构造函数) -
对象创建的时候执行流程
默认进行赋值 ==> 初创建好对象后会先给每个数据类型的变量一个默认值(其实目的是防止变量没有初始化就拿去使用)
构造方法来进行赋值 ==> 在实例化对象的时候给其进行赋值
显式进行赋值 ==>直接给成员变量进行赋值,如:
顺序 :默认 ==> 显式 ==> 构造方法