JAVA类思维_面向对象思维 Java中的类和对象及其应用

一、面向过程与面向对象

面向过程: 从事务执行者的角度思考问题,我该干什么  重点在过程----事务流程

面向对象: 从事务的指挥者角度思考问题,我应该找谁干什么  重点在对象

面向对象的优点:

1.将复杂问题简单化

2.从事务的执行者转化为事物的指挥者

3.更贴近人的思维(懒人思想)

二、类和对象

类是Java中最基本的单位,是一类抽象事物的集合  对抽象事物的描述(模板)

对象: 用类创建出来的具体的事物就是对象

抽象描述类:

类中的属性是指成员变量

类中的行为是指成员方法//属性 (成员变量 实例变量)

//书写位置: 类中,方法外

//行为 (方法) 和Java中函数的声明一样,只是不写static关键字

//书写位置: 类中

创建一个类:  关键字 + class + 类名(大驼峰命名) + { }

例如: 创建一个学生类

属性:  姓名  年龄  性别

行为:  吃饭  睡觉  打游戏class Student{

String name;

int age;

String gender;

// 方法---成员方法、实例方法

public void eat(){

System.out.println("吃饭");

}

public void sleep(){

System.out.println("睡觉");

}

public void playGame(String game){

System.out.println("打" + game);

}

}

创建对象:  类名 + 对象名 = 初值;

例如: 创建一个学生类的对象Student stu = new Student();

// 使用 对象名.属性名 = 值; 对对象的属性进行赋值和取值

stu.name = "IT彭于晏";

stu.age = "16";

stu.gender = "男";

// 调用成员方法 对象名.方法名();

stu.eat();

stu.sleep();

stu.playGame("毒奶粉");

stu.sayHi(); //在类中声明一个sayHi方法,哪个对象调用该方法,打印的就是哪个对象的属性

三、成员变量与局部变量

成员变量与局部变量的区别:

1.书写位置不同:

成员变量:  类中方法外

局部变量:  方法中或方法上(参数位置)

2.在内存中的表现不同:

成员变量:  堆内存中

局部变量:  栈内存中

3.生命周期不同:

成员变量:  随着对象进入堆内存中创建,随着对象的销毁而销毁

局部变量:  随着方法的调用而入栈,随着方法的结束而销毁

4.作用域不同:

成员变量:  整个类中

局部变量:  方法中

5.初始值不同:

成员变量:  跟堆内存一样,有默认的初始值 0 null

局部变量:  默认没有初值 不给初值编译时会报错 (局部变量声明时必须带有初值)

四、同名类

在同一个项目中可以有同名的类,创建在不同的包下

创建不同包下的同名类,需要指定完整的包名来创建对象

一般情况下不建议写同名类

例如: 在包3和包4下各创建一个person类

//创建一个包3类的person对象

Person p1 = new Person( );

//在继续创建一个包4类下的person对象

com.bao3.Person p2 = new com.bao3.Person( ); // 需要指定完整的包名

注意:

在方法中基本数据类型的传递是值   引用数据类型则是地址的传递 (要什么类型给什么类型)

e109ac1f78398eea4cd860848a9b82b6.png

五、匿名对象

匿名对象: 没有名字的对象

1. 一般 在方法传参的时候调用

2. 只调用一下方法(不赋值的情况下)

使用匿名对象当方法的参数 可以减少代码量,方便使用public static void main(String[] args) {

// 创建两个Person对象 并赋值

// 将重复代码 抽成一个方法

Person p1 = new Person();

p1.name = "linqingxia";

p1.age = 16;

p1.sayHi();

Person p2 = new Person();

setNameAndAge(p2, "wangzuxian", 25);

// 使用匿名对象 当方法的参数

setNameAndAge(new Person(), "maoqiu", 20);

// 匿名对象 也是对象 也可以赋值 调用成员方法

new Person().name = "xin";

new Person().age = 30;

new Person().sayHi(); // 注意: 获取不到"xin" 30----每new一次在堆内存中新生成一块空间

// 只调用方法可以使用匿名对象

// 测试方法的时候 可能会使用

new Person().fun();

}

六、封装与构造方法

封装

Java中 写 方法、函数 就是封装的一种

封装相当于隐藏了代码的实现和属性 不能随意修改

需要开放访问的接口(方法 方式) 来获取或修改封装的代码

优点:

1.提高了代码的复用性

2.提高了代码的安全性

关键字 中的 权限修饰符--> private 私有的

被private修饰的属性 只能本类中访问

java bean 规范(java的实体类创建出来的对象)

1.声明成员变量 都需要 私有化

2.给每个成员变量提供set和get方法

3.必须提供 无参的构造方法class Phone{

private String phoneName;

// 获取方法

public String getPhoneName(){

return phoneName;

}

// 修改方法

public void setPhoneName(String phoneName){

this.phoneName = phoneName;

// 关键字 this 代表的是本类的对象

// this.成员变量 获取本类的成员变量

// this.成员变量 = "哈哈"; 给本类的成员变量赋值

// this.成员方法 调用本类的成员方法

// 谁调用了这个方法 谁就是this

}

}

命名规范

获取get + 成员变量名(首字母大写)

修改set + 成员变量名(首字母大写)

标准写法 set方法 是没有返回值的

构造方法

构造方法: 对对象的成员变量 进行初始化

写法:

1. 没有返回值位置(void也不用写)

2. 构造方法的方法名 要与 类名 完全一致

构造方法是系统帮你调用的

只要你创建对象 系统就会自动调用构造方法

构造方法 只会执行一遍class Pen {

/*

* 类中书写顺序

* 1.成员变量

* 2.构造方法---无参的 有参的

* 3.成员方法---sayHi之类的 自己写的

* 4.set/get方法

*/

private String name;

private String color;

// 构造方法(无参)

public Pen() {

// 初始化成员变量(给成员变量赋值)

this.name = "圆珠笔";

this.color = "红色";

System.out.println("我是pen类的无参构造方法");

}

// 有参构造方法(构造方法的重载)

// 为了在创建对象的同时 给成员变量赋值

public Pen(String name,String color) {

this.name = name;

this.color = color;

System.out.println("我是有参的构造方法");

}

}// 介绍自己的方法

public void sayHi() {

String name = "linaiang";

// 使用this 可以区分 成员变量 和 局部变量

System.out.println(this.name + " " + this.color);

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这部纪录片央视发力了,每一帧都可以当壁纸,BBC也无法超越

全世界只有3.14 % 的人关注了爆炸吧知识地球上已知的植物有三十多万种,其中十分之一生长在中国。这些植物不仅为中国带来福祉,还不断迁徙到世界各地。在人类的不懈努力下,它们又获得了新的姿态,为不同的文明带来不一样的色彩。《影…

C# 反射机制

C# 反射机制1、 什么是反射 2、 命名空间与装配件的关系 3、 运行期得到类型信息有什么用 4、 如何使用反射获取类型 5、 如何根据类型来动态创建对象 6、 如何获取方法以及动态调用方法 7、 动态创建委托 1、什么是反射 Reflection,中文翻译为反射。 …

链表之判断一个链表是否为回文结构(二)

package com.zuo.linkedlist;import java.util.Stack;import com.zuo.linkedlist.IsPalindrome1.Node;/*** 题目:给定一个头结点,判断该链表是否回文结构* 例如:* 1->2->1 true* 1->2->2->1 true* 1->2->3 false* 思路:我们针对前面进行优化,空间复杂…

python 正则使用笔记

python正则使用笔记 def remove_br(content):"""去除两边换行符"""content content.replace("<br>", "<br />").replace("<br >", "<br />")while re.findall("^<br …

Jquey将序列化对象在前台显示地几种方式

<1>序列化对象为单个对象的时候 //Student person new Student() { Name "张三",Code"001" }; //JavaScriptSerializer json new JavaScriptSerializer(); //string str json.Serialize(person); context.Response.Write(str); 前台Jq…

页面置换算法先进先出java_页面替换算法(FCFS,LRU,OPT三种)

import java.util.Scanner;import java.util.Arrays;import java.util.LinkedList;class PageReplacementAlgorithm{PageReplacementAlgorithm(){}public void FIFO(int PageOrder[],int block[]){//先进先出算法/**最开始&#xff0c;先把物理块放满*在物理块放满之后&#x…

解答网友提问 | 使用VS2022快速生成React/Angular/Vue.js + Web API前后端集成项目

前言上次发表了《一键生成Vue.js Web API前后端集成项目》后&#xff0c;有多位网友来问&#xff0c;有不有其他的前后端集成模板&#xff1a;实际上&#xff0c;VS2022没有提供前后端集成项目模板。但是&#xff0c;使用VS2022&#xff0c;同样可以轻松实现React/Angular/Vue…

地球上最快的速度......

1 新手司机的车能多不靠谱&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 &#xff1f;&#xff1f;&#xff1f;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 哈哈哈哈&#xff0c;实在是太像了▼4 狗子&#xff1a;飞来横祸&#xff08;素材来源网…

链表之判断一个链表是否为回文结构(三)

package com.chenyu.zuo.linkedList;import com.chenyu.zuo.linkedList.PrintCommonPart.Node;/*** 题目:给定一个头结点,判断该链表是否回文结构 * 例如: * 1->2->1 true * 1->2->2->1 true * 1->2->3 false *思路:*我们只需要几个变量,额外空…

Android之二维码扫描的总结

第一步:导入zxing.jar包 第二步:项目中导入相关的类 关键代码: package com.example.qr_codescan; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.os.Bundle; import android.view.View; impor…

豆瓣评分9.4分!这部大片你不应该错过,每一秒都是不敢看的残忍!

全世界只有3.14 % 的人关注了爆炸吧知识人类占据了地球上绝大多数宜居的地方&#xff0c;我们面对着温柔的地球母亲&#xff0c;但对野生动物们来说&#xff0c;地球却是一个水深火热的星球。你觉得你已经一无所有了&#xff0c;你觉得生活的负荷已经让你难以前进了&#xff1b…

Dapr云原生应用开发系列7:工作流集成

题记&#xff1a;这篇介绍一个很有意思的东西&#xff0c;Dapr和Logic Apps这样的工作流引擎集成。Dapr工作流在1年多前&#xff0c;Dapr的孵化团队搞了一个很有意思的东西&#xff1a;把Dapr和Logic Apps集成起来&#xff0c;实现Dapr内置的工作流引擎。官方文档&#xff1a;h…

gitlab4安装mysql出问题解决方法

mysql不能自动安装 在新安装的ubuntu系统上面bunlde的时候遇到了这样一个问题&#xff1a; [ruby] view plaincopyInstalling mysql2 (0.3.11) with native extensions Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension. /home…

java.lang.illegalagr_spring – java.lang.IllegalArgumentException:环境不能为null

我尝试设置一个基本的SolrRepository应用程序并在ApplicationContext加载期间出现此错误&#xff1a;Caused by: java.lang.IllegalArgumentException: Environment must not be null!at org.springframework.util.Assert.notNull(Assert.java:112)at org.springframework.data…

项目如何从 SVN 迁移到 Git

为什么80%的码农都做不了架构师&#xff1f;>>> #0 系列目录# 版本管理SVN版本管理&#xff1a;场景命令实战SVN版本管理&#xff1a;两种开发模式GIT版本管理&#xff1a;场景命令实战GIT版本管理&#xff1a;Git Flow模型项目如何从 SVN 迁移到 Git很多有点历史的…

apache+php windows下配置

2014年1月9日 13:58:54 现在PHP大部分是vc9编译的,其扩展在windows下大部分也都是用vc9编译的(memcache,xdebuge...),,所以要想ApachePHPPHP扩展能正确使用,Apache最好也用vc9编译的 Apache vc9 http://www.apachelounge.com/转载于:https://www.cnblogs.com/iLoveMyD/p/351211…

这7个数学问题,10个人里面竟然只有3人能答对!看完发现大神竟是我自己......

全世界只有3.14 % 的人关注了爆炸吧知识今天超模君要问模友们几个问题看看谁才是真正的数学粉丝接受挑战吧1他喜欢抬杠、烫发、搞物理但他是个好数学家他是&#xff1f;点击图片查看答案2他说牛顿抄他的作业两个人因为微积分吵了一辈子他是&#xff1f;点击图片查看答案3传说他…

Android之不需要自定义View(ViewfindView.java)最简单的二维码扫描

不废话,先爆照 第一步: 看下我项目里面的类结构 第二步: 给项目添加zxing.jar包 add as library

python多进程间通信_python多进程间通信代码实例

python多进程间通信代码实例这篇文章主要介绍了python多进程间通信代码实例,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下这里使用pipe代码如下&#xff1a;import timefrom multiprocessing import Processim…

mysql数据库服务器设置访问权限

1 GRANT ALL PRIVILEGES ON *.* TO 用户名% IDENTIFIED BY 密码 WITH GRANT OPTION; 2 3 flush privileges; 转载于:https://www.cnblogs.com/lsl8966/archive/2012/12/28/2836820.html