像c语言面向过程编程 这是不太好的 面向对象编程嘛 就可以把事情分开了嘛 java的面向对象编程 也就是oop
当然了 实际编程到解决某个具体问题的方法 肯定也是一步步的来的嘛 也就是解决整个具体的问题的过程嘛 但是整个问题的剖析就很清楚了嘛
面向对象的三大特性 封装 继承 多态 会说明
java的基础 再次推荐那本书呀 java编程思想 有中文版
以类的形式组织代码 以对象的形式封装数据
封装的意思就是把数据装起来嘛 然后对外提供服务
继承的意思就是说类之间可以通过继承方式来获得方法功能嘛
多态的意思是同一个方法可能对于不同的对象有不同实现
所以得先设计类 因为要设计大体的框架 才能去实例化出对象解决具体的问题 写具体的代码对吧
现在回顾下方法
回顾下java的方法 需要一个修饰符 返回值类型 方法的名字 然后是方法体对吧
然后一个程序是只有一个main方法的 因为main方法是用来启动程序的 我们平时做示例 所以一个类中都有一个main方法对吧
当然了 还有一个抛出异常 抛出异常是很重要的 基本上每个语言都有
比如python里面也有 try except 对吧 java就是 try catch finally 嘛 因为不能保证一个程序没有错 如果遇到程序之外的异常输出 程序不能断对吧 起码要正常运行才行
现在回顾下方法的调用
其实就是java里面的语法嘛 对吧 不知道怎么在java里面调用方法 不知道有几种方式对吧
java里面的方法分为两种嘛 静态方法和非静态方法
看那些jdk文档 很多就是静态方法对吧 通过static关键字 可以直接调用里面的方法来使用对吧
比如现在创建了一个类
这里面有两种方法 一个是静态方法 传进学生id 获取说话学生的名字
第二个是非静态方法 传进学生id 获取吃东西学生的姓名 那么怎么调用呢 我们新建一个Demo2类
比如说我们想使用Student这个类 其实打出St IDEA就有提示了对吧
把Student类打全 然后. IDEA也会有提示 也可也看到我们可以直接使用的是静态方法对吧 这跟jdk文档中 比如那个Arrays工具类很像对吧 使用Arrays一些方法 也是静态方法 通过类名来直接调用对吧
这样就输出了
那么我们怎么去使用非静态方法呢 那么就需要实例化对象了对吧
这就调用了非静态方法
那么为什么java需要这两种呢 凡事总有个原因对吧
java里面 在静态方法里面 是不能调用非静态方法的 两个非静态方法 两个静态方法 都是可以调用的 比如下面
那么为什么会这样呢 因为静态方法是和类一起加载的 而非静态方法是类实例化后才存在的
什么是值传递和引用传递呢
值传递就是只是值改变 引用传递是地址是一样的 所以一个变 另外一个也变'
Java 到底是值传递还是引用传递? - Intopass的回答 - 知乎 https://www.zhihu.com/question/31203609/answer/50992895 看看这个知乎吧
python的数组列表好像就是值传递 就是假设a是一个列表 然后b等于a 那么 a改变 b就改变了 JavaScript也是这样 如果要解决这个 就需要深度拷贝 和 浅拷贝
下面说一下类和对象的关系
怎么创建对象呢
构造器就是创建对象时必须要调用的 比如python里面的__init__初始化对吧 如果你实例化一个python类 就会触发这个方法
那这里就来说说构造器是什么
可以看到 这个类有个同名方法 但是hello就会报错 我们可以在这个方法里面做一些初始化操作
如果我们不写这个方法呢 问题来了 如果 新建一个类什么都不写 然后实例化它 那么在class文件 也就是编译后文件里 class里面是自动帮你写了一个这样的方法的
结论是:
1、一个类即使什么都不写 那么也会存在这个方法
2、构造方法没有返回值类型 就是void什么都没有
3、必须和类名相同
也就是无参构造器 拿来初始化一些信息
那么实例化这个类 输出name 就会输出张三
那么有无参构造器 那么也会有有参构造器啦 一旦定义了有参构造 那么想使用无参构造 那么无参构造就必须得显示定义
那么什么是有参构造呢 还是跟python的__init__一样的 就是 new对象的时候 会实现传入参数 实例化对象
在另一个类 调用这个类 可以看到 输出的是李四 而不是张三
构造器本意就是实例化时 初始化值 然后就是它的语法了
IDEA快捷键是 alt 加 insert
就会出现提示了
下一节还是说java的面向对象