面向对象编程(oop)

面向过程思想:线性思维

  • 步骤清晰简单,每一步做什么很明确
  • 适合处理较为简单地问题

面向对象思想:总分 抽象

属性+方法=类

  • 分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考,最后,再对某个分类下的细节进行面向过程的思考
  • 适合处理复杂的问题,适合处理需要多人协作的问题

对于描述复杂的实物,为了从宏观上把握,从整体分析,需要用面向对象的思路分析整个系统。但是,具体到微观操作,仍需面向过程的思路去处理

面向对象编程(Object-Oriented Programming):OOP

其本质:以类的方式组织代码,以对象的组织(封装)数据

三大特性:

  • 封装:包装数据
  • 继承:父类与子类
  • 多态:同一个事物会表现出多种形态

从认识角度:先又对象后有类。对象:具体的事物。类:抽象共性

从代码运行角度:先有类再有对象。类是对象的模板

回顾方法:

package com.zhang.oop;
//Demo 类
public class Demo {
//类中有个方法:main方法
public static void main(String[] args) { }
/*
修饰符 返回值类型 方法名(方法的参数){
方法体
renturn 返回值; 返回值与返回类型相对应
}
*/
public String sayhello(){
return "hello,world";
}
public void hello(){
return; //return可以默认不写,要写直接写个return 即可
}
public int max(int a,int b){
return a>b?a:b;//三元运算符
}
}
//break与return
/*
break:跳出switch
结束整个循环 continue:结束一次循环
return:方法结束 return的返回值与返回值类型对应
*/

方法的调用

package com.zhang.oop.demo;

public class Demo02 {
//静态方法 加了static //非静态方法 未加static
public static void main(String[] args) {
//在student类中写的代码,想在另一个类中调用,
//有两种方式
//如果是static(静态的)直接用类名调用:可以用Student.say()
//Student.say();//类名.方法名
//如果是非静态的,需要实例化这个类(用new这个关键字)
//new Student就代表把这个类实例化了 new Student.say()
//一般会形象的写为:
Student student =new Student();
//对象类型 对象名字 =对象的值
//如何用这个对象? 对象名字.方法
student.say();
}
}
==========================================
package com.zhang.oop.demo; public class Demo03 {
public static void main(String[] args) {
//调用方法add有两种方法
//方法一:
Demo03 demo03=new Demo03();
demo03.add(1,3);//实际参数
//方法二:
//改为静态类,直接调用。方法中加static
// int add=Demo03.add(1,3);
//System.out.println(add);
}
public int add(int a,int b){//a,b为形式参数
return a+b;
}
}

值传递和引用传递(不明白)

package com.zhang.oop.demo;
//值传递
public class Demo04 {
public static void main(String[] args) {
int a=1;
System.out.println(a);//1
Demo04.change(a);
System.out.println(a);//1
}
//这里返回值为空
public static void change(int a){
a=10;
}
}
===================================================
package com.zhang.oop.demo;
//引用传递:一般是传递一个对象,其本质还是值传递
public class Demo05 {
public static void main(String[] args) {
//怎么用这个person类呢?new
Person person=new Person(); //实例化的过程
System.out.println(person.name);//null
Demo05.change(person);
System.out.println(person.name);
}
//和值传递一样写一个方法
public static void change(Person person){
//person是一个对象,指向的是下面的Person类
person.name="zhang";
}
}
//再定义一个类:person类,有一个属性name
class Person{
String name; }

java学习之旅(day.07)的更多相关文章

  1. Java学习之旅开篇:运行机制及环境搭建

    在写这篇博客之前,我想对自己进行简单概括:我从事软件开发工作已经三年多了,并且一直在从事.NET相关项目的开发.为什么突然间想学习Java呢?有以下几个原因: 1. 开发程序三年多来,已经对.NET相 ...

  2. Java学习之旅基础知识篇:面向对象之封装、继承及多态

    Java是一种面向对象设计的高级语言,支持继承.封装和多态三大基本特征,首先我们从面向对象两大概念:类和对象(也称为实例)谈起.来看看最基本的类定义语法: /*命名规则: *类名(首字母大写,多个单词 ...

  3. 第一篇,java学习之旅

    在java的这座殿堂中,我才刚刚推开了大门,就像是在岔路口找到了一条,走向前进java大门的路. 下面是一些java算法的问题 第一题: package project.model; import j ...

  4. Java学习之旅(一):探索extends

    鄙人为兴趣爱好,0基础入门学习Java,有些心得想法,记录于此,与君分享. 然毕竟新手,学识尚浅,错误之处,希望多多指正批评,也是对我最大的帮助! 前言:本篇文章,主要讨论在子类继承父类之后,一些继承 ...

  5. Java学习之旅基础知识篇:数组及引用类型内存分配

    在上一篇中,我们已经了解了数组,它是一种引用类型,本篇将详细介绍数组的内存分配等知识点.数组用来存储同一种数据类型的数据,一旦初始化完成,即所占的空间就已固定下来,即使某个元素被清空,但其所在空间仍然 ...

  6. Java学习之旅基础知识篇:数据类型及流程控制

    经过开篇对Java运行机制及相关环境搭建,本篇主要讨论Java程序开发的基础知识点,我简单的梳理一下.在讲解数据类型之前,我顺便提及一下Java注释:单行注释.多行注释以及文档注释,这里重点强调文档注 ...

  7. 我的java学习之旅--一些基础

    (因为我粗略学过C,C++,Python,了解过他们的一些语法,所以为了使得java的入门更为顺畅,便会忽略一些和C语法相类似的地方,着重点明一些java自己的特色之处.也减轻一下自己写文字的负担.) ...

  8. Java学习之旅(二):生病的狗1(逻辑推导)

    前言:本篇文章属于个人笔记,例化了一些代码,不知是否合理,请指教. 中午看到一位同学的面试题,觉得很烧脑,烧脑不能一个人烧,要大家一起烧. 村子中有50个人,每人有一条狗.在这50条狗中有病狗(这种病 ...

  9. java学习之旅

    jar文件其实就是一个压缩包,里面包含很多class文件(一个class文件是一个类的字节码).方便在网络上传输.可以规定版本号,更容易进行版本控制. var只能在方法内使用,不能用于定义成员变量. ...

  10. 面向对象编程(OOP)的五大特征-java学习之旅(1)

    这是Alan Kay关于第一个成功的面向对象语言SmallTalk的总结: 1.所有的东西都是对象.可将对象想象成一种新型的变量:它保存着数据,但是可要求它对自身进行操作,理论上讲,可从要解决的问题身 ...

随机推荐

  1. #数位dp,高精度#洛谷 2235 [HNOI2002]Kathy函数

    题目 分析 首先这个\(f\)函数其实求的是二进制下的回文数,简单证明一下 设\(n\)在二进制下的回文数为\(n'\),第一二条显然 第三条\(f(2n)=f(n)\Rightarrow \over ...

  2. #树链剖分,zkw线段树#nssl 1489 大冰隙2

    题目 有一个长度为\(n\)的01数列\(a\)和一个长度为\(n\)的数列\(b\)表示权值 支持单点修改以及区间查询,\(0\)和\(1\)可以看作左括号和右括号, 将一段区间所有可匹配的的括号去 ...

  3. mybatis plugin源码解析

    概述 Plugin,意为插件,是mybatis为开发者提供的,对方法进行自定义编程的手段.其中用到了动态代理.反射方法,通过指定需要增强的对象与方法,进行程序编写. 核心类 主要涉及几个核心类:Int ...

  4. mysql 必知必会整理—安全管理[十七]

    前言 简单介绍一下安全管理. 正文 MySQL服务器的安全基础是:用户应该对他们需要的数据具有适当的访问权,既不能多也不能少. 换句话说,用户不能对过多的数据具有过多的访问权. 多数用户只需要对表进行 ...

  5. 面向切面编程AOP[一](java 代码详解)

    前言 说句实话,在工作中,使用的aop不是特别多,但是特别重要,一般是辅助程序,在现代开发者辅助程序相当重要,比如说我们需要打印一些log,但是我们不可能去卸载我们的业务程序中,因为这太..... 正 ...

  6. Llama 3 开源了「GitHub 热点速览」

    近日,Meta(原 Facebook)开源了他们公司的新一代大模型 Llama 3,虽然目前只放出了 8B 和 70B 两个版本,但是在评估结果上已经优于 Claude 3 Sonnet.Mistra ...

  7. 安全同学讲Maven间接依赖场景的仲裁机制

    简介: 去年的Log4j-core的安全问题,再次把供应链安全推向了高潮.在供应链安全的场景,蚂蚁集团在静态代码扫描平台-STC和资产威胁透视平台-哈勃这2款产品在联合合作下,优势互补,很好的解决了直 ...

  8. 首次公开!阿里云开源PolarDB总体架构和企业级特性

    ​简介:在3月2日的阿里云开源 PolarDB 企业级架构发布会上,阿里云 PolarDB 内核技术专家北侠带来了主题为<PolarDB 总体架构设计和企业级特性>的精彩演讲. 在3月2日 ...

  9. [FE] Js DOM 操作的几个常见错误

    1.setTimeout 匿名函数传参问题,匿名函数形参是不能直接在内部使用的,匿名函数传参需要按顺序从 setTimeout 的第三个参数开始依次传递. 2. Js clone出来的 dom 节点, ...

  10. IIncrementalGenerator 判断程序集的引用关系

    本文将告诉大家如何在 IIncrementalGenerator 增量 Source Generator 生成代码里面,在 Roslyn 分析器里面判断两个程序集是否存在引用关系 先上核心代码实现,核 ...