一.:面向对象
(1)面向对象:是基于面向过程的一种思想。
  面向过程:以函数为基础,关注实现过程。
  面向对象:以对象为基础,关注实现结果。

(2)面向对象的思想特点:
  A:是一种更符合人们思考习惯的思想。
  B:把复杂的事情简单化了。

面向对象是相对面向过程而言
面向对象和面向过程都是一种思想
面向过程:强调的是功能行为
面向对象:将功能封装进对象,强调具备了功能的对象。
面向对象是基于面向过程的。
面向对象设计把握一个重要的经验:谁拥有数据,谁就对外提供操作这些数据的方法。
 

(3)事物是如何体现的呢?
  A:属性 有哪些特征
  B:行为 有哪些功能
(4)类与对象的关系:

  类:是相关的属性和行为的集合。是一个抽象的概念。
  对象:是某种事物的具体存在,具体的表现形式。

  成员变量和局部变量的区别
  (1)定义位置区别:
    成员变量:定义在类中,方法外。
    局部变量:定义在方法中,或者方法声明上。
  (2)初始化值的区别:
    成员变量:都有默认初始化值。整数0,浮点数0.0,布尔false,字符\u0000(""--空字符串),引用数据类型null
    局部变量:没有默认值。要想使用,必须先赋值。

  (3)存储位置区别:

    成员变量(非静态):存储在堆内存中,随着对象的存在而存在。当对象变成垃圾被回收时,该该对象中的成员变量会消失。
        成员变量(静态):存储在方法区中,随着类的加载而加载,随着类的消失而消失
    局部变量:存储在栈内存中,当方法被调用,或者语句被执行的时候,才存在。当方法运行完毕,或者语句运行完毕时,局部会被自动释放。所以成员变量也称之为实例(对象)变量.
 

  (4)生命周期区别:
    成员变量:随着对象的创建而存在。随着对象的消失而消失。
    局部变量:随着方法的调用而存在,随着方法调用完毕而消失。

开发的过程:其实就是不断的创建对象,使用对象,指挥对象做事情。
设计的过程:其实就是在管理和维护对象之间的关系。
 
面向对象的特征:
封装(encapsulation)
继承(inheritance)
多态(polymorphism)

二.封装
(1)  

好处:
•将变化隔离。
•便于使用。
•提高重用性。
•提高安全性。
封装原则:隐藏实现的细节,提供公共的访问方式
•将不需要对外提供的内容都隐藏起来。
•把属性都隐藏,提供公共方法对其访问。
  
 

(2)private关键字

•是一个权限修饰符。
•用于修饰成员(成员变量和成员函数)
•被私有化的成员只在本类中有效。
•当成员私有后,提高了安全性。但是访问权限降低了。这时可以通过对外提供公有方法的形式对其进行访问。
•好处是:可以在方法中对成员变量的访问进行控制。
•注意:私有仅仅是封装的一种体现形式而已。类,方法等其实都是封装的具体体现。

(3)常见的应用:
  类中的所有成员变量私有,给出对应的get/set方法。

(一)构造方法

特点:

1.构造方法的方法名必须与类名相同。
2.构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
3.构造方法不能由编程人员调用,而要系统调用。
4.一个类可以定义多个构造方法,也就是构造方法可以重载,以参数的个数,类型,或排列顺序区分。
5.构造函数细节:如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。
6.作用:构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。
 
构造函数和一般函数的区别:
1从功能上的区别:
•构造函数是给对象初始化的
•一般函数是因为对象需要满足某种功能定义的
2从执行上的区别
•构造函数,是对象创建的时候被执行,不用调用。
•一般函数是什么时候调用,就什么时候执行,不调用就永远不执行。
3从书写上的区别
构造函数,是不需要有返回值,包括void
一般函数是必须具备返回值
 (二)this关键字
 解释:
Java关键字this只能用于方法体内。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是this。因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this,并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this。
简言之:哪个对象调用this所在的函数,this就代表哪个对象。

this关键字的作用:
第一、函数参数或者函数中的局部变量和成员变量同名的情况下,成员变量被屏蔽,此时要访问成员变量则需要用“this.成员变量名”的方式来引用成员变量。当然,在没有同名的情况下,可以直接用成员变量的名字,而不用this,用了也不为错.
 第二、在函数中,使用this关键字引用成员方法
 第三、注意,如果我们想在一个构造函数中对另一个构造函数进行调用的时候,不能在其构造函数中直接类名(参数)这样调用,而是通过this调用另一个构造方法,用法是this(参数列表),这个仅仅在类的构造方法中,别的地方不能这么用。这叫this语句.只能放在构造函数的第一行
 
说明:其实这些用法总结都是从对“this是指向对象本身的一个指针”这句话的更深入的理解而来的.
 (三)static 关键字
1static关键字:
•static  是一个修饰符,用于修饰成员(成员变量 、成员方法)
2,当成员被静态修饰后,就多了一种调用方式,除了可以被对象调用外,还可以直接被类名调用
   格式:类名.静态成员
3,static特点
<1>、随着类的加载而加载。  也就是说:静态会随着类的消失而消失,说明它生命周期最长。
<2>、优先于对象存在  。明确一点:静态先存在 对象后存在。
<3> 被所有对象共享 ,
<4> 可以被类名所调用
4、实例变量(非静态的成员变量)和类变量(静态变量)的区别:
•<1> 存在内存中的位置:
   (类变量)静态变量随着类的加载而存在于方法区中。
   实例变量随着对象的建立而存在于堆内存中。
•<2> 生命周期:
        静态变量的生命周期最长,随着类的消失而消失。
        实例变量的生命周期随着对象的消失而消失。
•<3>所属不同:
   静态变量也称之为类变量,所属于整个类,被整个类的对象所共享。
   实例变量是对象的特有数据,所属于对象。
5、静态使用注意事项:
•<1> 静态方法只能访问静态成员。
           非静态方法既可以访问静态也可以访问非静态
           非静态方法中不可以定义静态变量,为什么?
•<2> 静态方法中不可以定义this,super关键字。
                因为静态优先于对象存在。所以静态方法中不
                可以出现this。
•<3> 主函数是静态的。
6、静态的利弊端:          
•利处: <1>对对象的共享数据提供单独空间的存储,节省空间,没有必要每一个对象都存储一份。
                      <2>可以直接被类名调用,不用在堆内存创建对象
•弊端: <1>生命周期过长。
                     <2>访问出现局限性。(静态虽好,但只能访问静态)
 
7.什么时候使用static
1、什么时候定义静态变量(类变量)呢?
当该成员变量所存储的数据,每一个变量都拥有这个数据,就没有必要存储到对象中,只要让所有的对象共享该数据即可,这时应该用static修饰
2、什么时候定义静态函数呢?
当成员函数没有访问对象的特有数据时,就将该方法定义成静态的,因为该方法没有访问到对象的特有数据,所以你再创建对象去调用方法是没有必要的,我们就直接用类名.调用就可以了
 
 
 (四)局部代码块&构造代码块&静态代码块
 
1,局部代码块:
作用:控制变量的生命周期;
说明:
在程序中,当我们已经使用完 x 后,并且在接下来的代码中,不会再用到x,那么就没必要让x 在内存中占用空间了,这用情况下,可以使用 局部代码块,将x及其所设计到的区域封装为局部代码块,他们在程序执行中顺序不变,只是在执行完成后消失。
 
l这种写法开发并不常见,但是面试可能会出现,它的作用就是可以限定变量的生命周期.
 
 
2,构造代码块(初始化块):
作用:它可以给所有对象进行初始化
说明:
存在于:类中。
当类中的构造方法以重载的形式存在时,并且有共同成员变量或共同的方法时,可以通过构造代码块对其进行初始化;这样可以减少代码的重复!
 
定义在类里
{
System.out.println("我是初始化块")
}
 
l括号里的是初始化块,这里面的代码在创建java对象时执行,而且在构造器之前执行!
l其实初始化块就是构造器的补充,初始化块是不能接收任何参数的,定义的一些所有对象共有的属性、方法等内容时就可以用初始化块了初始化!!
l好处是可以提高初始化块的复用,提高整个应用的可维护性。
 
 
3,静态代码块:
作用:加载驱动器。
说明:
当类中的方法都被静态了化,并且构造方法被private了,这时我们不能,在将这个类实例化,然而又想让类增加一些属性,就可以使用静态代码块
 
格式:
            static{
                  静态代码块中的执行语句
            }
        特点:随着类的加载而执行,只执行一次并优先于主函数。 用于给类进行初始化。
 1 class CodeBlock{
2 static {
3 System.out.println("我是静态代码块1");
4 }
5
6 static {//只执行一次
7 System.out.println("我是静态代码块2");
8 }
9
10 {//每次初始化都执行
11 System.out.println("我是构造代码块1");
12 }
13
14 public CodeBlock(){
15 System.out.println("我是构造方法");
16 }
17 }
18 class CodeBlockTest{
19 public static void main(String[] args){
20 new CodeBlock();
21 new CodeBlock();
22
23 }
24 }
25
26
27 运行结果:
28 静态代码块1
29 静态代码块2
30 构造代码块1
31 构造方法
32 构造代码块1
33 构造方法
 
 (五).其他一些东西

1.当我们使用类A调用类B中的方法:
    A.直接编译类A,编译器会自动编译类B
    B.先把类B进行编译,并把class文件放到和类A一起的目录,再编译类A

2.在一个java文件中可以创建多个类,但是文件名和包含主函数的类名一致

四 黑马程序员-java面向对象(上)的更多相关文章

  1. 【黑马18期Java毕业生】黑马程序员Java全套资料+视频+工具

        Java学习路线图引言:        黑马程序员:深知广大爱好Java的人学习是多么困难,没视频没资源,上网花钱还老被骗. 为此我们历时一个月整理这套Java学习路线图,不管你是不懂电脑的小 ...

  2. 黑马程序员+Winform基础(上)

    黑马程序员+Winform基础 ---------------<a href="http://edu.csdn.net"target="blank"> ...

  3. 黑马程序员——JAVA基础之简述面向对象,类,变量,匿名对象

    ------- android培训.java培训.期待与您交流! ---------- 面向对象: 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程 强调的是功能行为 面向对象 将 ...

  4. 黑马程序员Java基础班+就业班课程笔记全发布(持续更新)

    正在黑马学习,整理了一些课程知识点和比较重要的内容分享给大家,也是给自己拓宽一些视野,仅供大家交流学习,大家有什么更好的内容可以发给我 ,现有黑马教程2000G  QQ 1481135711 这是我总 ...

  5. 黑马程序员----java基础笔记中(毕向东)

    <p>------<a href="http://www.itheima.com" target="blank">Java培训.Andr ...

  6. 黑马程序员——JAVA基础之泛型和通配符

    ------- android培训.java培训.期待与您交流! ---------- 泛型:            JDK1.5版本以后出现新特性.用于解决安全问题,是一个类型安全机制. 泛型好处: ...

  7. 黑马程序员—— Java SE(3)

    ----<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训 ...

  8. 黑马程序员——JAVA基础之语法、命名规则

    ------- android培训.java培训.期待与您交流! ---------- 1.java语言组成:关键字,标识符,注释,常量和变量,运算符,语句,函数,数组. 2.java关键字:被Jav ...

  9. 黑马程序猿——JAVA面向对象的特性:封装,继承,多态

                                           - ----------android培训.java培训.java学习型技术博客.期待与您交流!------------  ...

  10. 黑马程序员----java基础笔记上(毕向东)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 笔记一共记录了毕向东的java基础的25天课程,分上.中.下 本片为上篇,涵盖前10天课程 1. ...

随机推荐

  1. 10分钟了解Flink SQL使用

    Flink 是一个流处理和批处理统一的大数据框架,专门为高吞吐量和低延迟而设计.开发者可以使用SQL进行流批统一处理,大大简化了数据处理的复杂性.本文将介绍Flink SQL的基本原理.使用方法.流批 ...

  2. Typora导出html图片转base64

    Typora 导出html图片转base64 Typora 中图片使用绝对路径 图片路径不要使用中文,否则可能会不成功 打包 jar ,jar放在到出 html 同级目录下 必须要有 jdk 环境 一 ...

  3. spring boot 在windows下的 批文件部署

    目录结构如下: install.bat @echo off SET JAVA_HOME="C:\Program Files\Java\jdk1.8.0_211\bin" copy ...

  4. MySQL学习笔记-数据操作语言

    SQL-数据操作语言(DML) 数据操作语言,用于对数据库中表的数据记录进行增删改的操作 一.添加数据(insert) 1. 给指定字段添加数据 insert into {表名} ({字段1},{字段 ...

  5. k8s——pod生命周期

    图解 Pod生命周期 Pod的退出流程 Endpoint删除pod的ip地址 Pod变成Terminating状态 变为删除中的状态后,会给pod一个宽限期,让pod去执行一些清理或销毁操作 配置参数 ...

  6. idea mapper xml 文件报红

    在使用 idea 打开 mapper 文件,出现一下报红错误: 可以看到数据表和字段都是红色的. 解决方案 打开设置,window版本是打开Settings: 找到 Languages & F ...

  7. ABC342

    E 建反图 + 拓扑排序. 先求出直接与 \(n\) 连接的点的答,就是最后一辆车的发车时间.然后再做拓扑排序. 假如我们知道点 \(u\) 的答案为 \(ans_u\) 并且 \(u,v\) 相连, ...

  8. 刀剑英雄 刀剑Online 双开 多开 窗口在后台 画面不动

    刀剑英雄 刀剑Online 双开 多开 窗口在后台 画面不动 解决方法: 进游戏前,在游戏设置中,选择"后台渲染",然后再进游戏.

  9. redis主从复制篇

    我们知道要避免单点故障,即保证高可用,便需要冗余(副本)方式提供集群服务. 而Redis 提供了主从库模式,以保证数据副本的一致,主从库之间采用的是读写分离的方式. 主从复制概述 主从复制,是指将一台 ...

  10. Vue学习:16.组件通信

    组件通信就是指组件之间的数据传递.由于组件的数据是独立的,无法直接访问其他组件的数据,所以想要使用其他组件数据必须通过 组件通信! 在Vue.js中,组件之间的通信可以通过多种方式实现,包括 prop ...