目录

一、类与对象

1、养猫问题

2、使用之前学的技术解决

3、之前技术解决的缺点分析

4、代码

5、对象[属性,行为]

6、类与对象的关系示意图

7、类与对象的区别和联系

8、对象在内存中存在形式(重点)

9、属性、成员变量、字段

二、创建对象

1、如何创建对象

2、如何访问属性

3、类和对象的内存分配机制

4、成员方法


一、类与对象

1、养猫问题

张老太养了两只猫:一个名字叫小白,今年3岁,白色。还有一个叫小花,今年10岁,花色。编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色。如果用户输入的小猫名字错误,则显示:张老太没有这只猫。

2、使用之前学的技术解决

1)单独的定义变量解决

2)使用数组解决

3、之前技术解决的缺点分析

不利于数据的管理

效率低

引出新知识点===》类与对象 (OOP)

4、代码

public class carOne {public static void main(String[] args) {Cat cat1 = new Cat();cat1.name = "小白";cat1.age = 3;cat1.color = "白色";Cat cat2 = new Cat();cat2.name = "小花";cat2.age = 10;cat2.color = "花色";System.out.println("第一只猫的信息:" + cat1.name + " " + cat1.age + " " + cat1.color);System.out.println("第二只猫的信息:" + cat2.name + " " + cat2.age + " " + cat2.color);}
}class Cat {String name;int age;String color;
}

5、对象[属性,行为]

    一个程序就是一个世界,有很多事物

6、类与对象的关系示意图

7、类与对象的区别和联系

1)类是抽象的,概念的,代表一类事物,比如人类,猫类。。。即它是数据类型。

2)对象是具体的,实际的,代表一个具体的事物,即实例。

3)类是对象的模板,对象是类的一个个个体, 对应一个实例

8、对象在内存中存在形式(重点)

9、属性、成员变量、字段

   基本介绍

1)从概念或叫法上看:  成员变量 = 属性 = 字段

即  成员变量是用来表示属性的

属性可以是基本数据类型,也可以是引用数据类型(对象,数组)

class Cat {String name;int age;String color;String[] master;
}

2)属性是类的一个组成部分,一般是基本数据类型,也可以是引用数据类型(对象,数组)

## 注意事项和细节说明

  1)属性的定义语法同变量, 示例: 访问修饰符 属性类型 属性名;

有四种访问修饰符 public,protected,默认,private

2)属性的定义类型可以为任意类型, 包含基本数据类型或引用数据类型

3)属性如果不赋值,有默认值,规则和数组一样,具体说:int 0, short 0, byte 0, float 0.0, double 0.0, char \u0000, boolean false, String null

二、创建对象

1、如何创建对象

   1)先声明再创建

Cat cat;//声明对象 catcat = new Cat();//创建

2)直接创建

Cat cat = new Cat();

2、如何访问属性

  1)基本语法

对象名.属性名;

案例演示赋值和输出

cat.name;
cat.age;
cat.color;

2)类和对象的内存分配机制(重点)

看如下代码实例

Person p1 = new Person();
p1.age = 10;
p1.name = "小明";
Person p2 = p1;
System.out.println(p2.age);

p2.age输出多少?画出内存图

3、类和对象的内存分配机制

## Java内存的结构分析

1)栈: 一般存放基本数据类型(局部变量)

2)堆: 存放对象、数组等

3)方法区: 常量池(常量,比如字符串),类加载信息

4)示意图

## Java创建对象的流程简单分析

Person p = new Person();
p.name = "Jack";
p.age = 10;

1)先加载Person类信息(属性和方法信息,只会加载一次)

2)在堆中分配空间,进行默认初始化

3)把地址赋给 p, p 就指向对象

4)进行指定初始化 , 比如p.name = "Jack"  p.age = 10;

看如下代码,进行分析

Person a = new Perosn();
a.age = 10;
a.name = "小明";
Person b = new Person();
b = a;
System.out.println(b.name);//小明
b.age = 20;
b = null;
System.out.println(a.age);//20
System.out.println(b.age);//异常

4、成员方法

1)基本介绍

在某些情况下,我们需要定义成员方法(简称方法),比如人类:除了有一些属性外(年龄,姓名。。。),我们人类还有一些行为,比如:可以说话、跑步...,通过学习,还可以做算术题。这时就要用成员方法才能完成。

2)成员方法快速入门

   添加speak成员方法,输出“我是一个好人”

添加cal01 成员方法,可以计算从1+...+1000的结果

添加cal02 成员方法,该方法可以接收一个数 n, 计算从1+...+n的结果

添加getSum 成员方法,可以计算两个数的和

代码:

import java.util.Scanner;
public class Method01 {public static void main(String[] args) {Person p = new Person();p.speak();p.cal01();System.out.println("请输入需要进行叠加计算的数:");Scanner myScanner = new Scanner(System.in);int n = myScanner.nextInt();p.cal02(n);System.out.println("请输入要进行相加的两个数字:");Scanner myScanner1 = new Scanner(System.in);Scanner myScanner2 = new Scanner(System.in);int num1 = myScanner1.nextInt();int num2 = myScanner2.nextInt();int sum = p.getSum(num1,num2);System.out.println("两数之和为:"+ sum);}
}class Person{String name;int age;public void speak(){System.out.println("我是一个好人!!!");}public void cal01(){int res = 0;for (int i =1; i < 1000; i++){res += i;}System.out.println("cal01方法 计算结果是" + res);}//(int n) 形参列表, 表示当前有一个形参 n ,可以接受用户的输入public void cal02(int n){int res = 0;for (int i = 1; i < n; i++){res += i;}System.out.println("cal02方法 计算结果是:" + res);}public int getSum(int num1,int num2){int sum = num1 + num2;return sum;}
}

3)方法的调用机制原理:(重点-示意图)

4)为什么需要成员方法

  看一个需求:

请遍历一个数组,输出数组的各个元素值。

解决思路1:传统方法,使用单个for循环,将数组输出

解决思路2:定义一个类MyTools,然后写一个成员方法,调用方法实现

public class Method02 {public static void main(String[] args) {int[][] map = {{0,0,0},{1,1,1},{2,2,2}};Mytools a = new Mytools();a.printArr(map);}
}class Mytools{public void printArr(int[][] map){for (int i = 0; i < map.length; i++){for (int j = 0; j <map[i].length; j++){System.out.print(map[i][j] + " ");}System.out.println();}}
}

5)成员方法的好处

  1、提高代码的复用性

2、可以将实现的细节封装起来,然后供其他用户来调用

6)成员方法的定义

  访问修饰符 返回数据类型 方法名(形参列表...){//方法体

语句;

return 返回值;

}

3、形参列表:表示成员方法输入  cal(int n) ,  getSum(int num1,int num2)

4、返回数据类型:表示成员方法输出, void 表示没有返回值

5、方法主体:表示为了实现某一功能代码块

6、return  语句不是必须的

7)注意事项和使用细节

##访问修饰符:

如果不写访问修饰符,默认访问   【具体有四种访问修饰符:public,protected,private,默认】

##返回值类型:

1)一个方法最多有一个返回值(若需要返回多个返回值,则可以返回数组)

2)返回类型可以为任意类型,包括基本数据类型和引用数据类型(数组、对象)

3)如果方法要求有返回值类型,则方法主体最后要有 return 值,而且要求返回值类型必须和return 值类型一致或者兼容

4)如果方法是void,可以没有return 语句 ,或者 只写 return;

## 方法名

遵循驼峰命名法,最好见明知义,表达出该功能的意思

##形参列表

1)一个方法可以有零个形参,也可以有多个形参,中间用逗号隔开  例如:public void getSum(int num1, int num2)

2)形参类型可以为任意数据类型,包括基本数据类型和引用数据类型(对象,数组)

3)调用带参数的方法时,要对应传入相同类型或者兼容类型的参数

4)方法定义时的参数称为形式参数,简称形参;方法调用时的参数称为实际参数,简称实参,形参和实参的类型要一致或者兼容,个数,顺序也必须一致。

##方法体

   里面写实现功能的具体的语句,可以为输入、输出、变量、运算、分支、循环、方法调用、但方法里不能再定义方法,即方法不能嵌套定义

##方法调用小细节说明

1)同一类的方法可以直接调用

2)跨类中的方法A类调用B类中的方法,需要通过对象名调用,比如:对象名.方法名(参数)

3)特别说明:跨类调用方法时和方法的访问修饰符有关

##练习题:

1) 编写类 AA , 有一个方法: 判断一个数是奇数 odd 还是偶数, 返回 boolean

import java.util.Scanner;
public class Exercise01 {public static void main(String[] args) {//1) 编写类 AA , 有一个方法: 判断一个数是奇数还是偶数,// 返回 booleanScanner myScanner = new Scanner(System.in);System.out.println("请输入要判断奇偶的数字:");int n = myScanner.nextInt();AA a = new AA();if (a.judgeParity(n)){System.out.println("该数字为偶数");}else {System.out.println("该数字为奇数");}}
}class AA{public boolean judgeParity(int n){if (n % 2 == 0){return true;}else{return false;}}
}

2) 根据行、 列、 字符打印 对应行数和列数的字符, 比如: 行: 4, 列: 4, 字符#,则打印相应的效果

import java.util.Scanner;
public class Exercise01 {public static void main(String[] args) {
//2) 根据行、 列、 字符打印 对应行数和列数的字符,比如: 行: 4, 列: 4, 字符#,则打印相应的效果System.out.println("请输入一个字符: ");char n = myScanner.next().charAt(args.length);System.out.println("请输入行数:");int row = myScanner.nextInt();System.out.println("请输入列数:");int col = myScanner.nextInt();AA b = new AA();b.print(row, col, n);}
}class AA{public boolean judgeParity(int n){if (n % 2 == 0){return true;}else{return false;}}public void print(int row, int col, char n){for (int i = 1; i < row; i++){for(int j = 1; j < col; j++){System.out.print(n);}System.out.println();}}
}

4)成员方法传参机制(重点)

    1)基本数据类型的传参机制

基本数据类型,传递的是值,(值拷贝),形参的任何改变不影响实参

2)引用数据类型的传参机制

    应用类型传递的是地址(传递的也是值,但只是地址),可以通过形参改变实参

5)成员方法的返回值是引用类型

克隆对象

public class CopyPerson {public static void main(String[] args) {Person p1 = new Person();p1.name = "Jack";p1.age = 10;MyTools Tool = new MyTools();Person p2 = Tool.copyPerson(p1);System.out.println(p2.age+" "+p2.name);}
}class Person{String name;int age;
}class MyTools{public Person copyPerson(Person p1){Person p2 = new Person();p2.age = p1.age;p2.name = p1.name;return p2;}
}

    未完......

100天精通Java (基础篇) —面向对象编程1.0【Java分水岭】相关推荐

  1. Java基础篇——面向对象编程

    ​ ​ 活动地址:CSDN21天学习挑战赛 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩:迟一天就多一天平庸的困扰.各位小伙伴,如果您: 想系统/深入学习某技术知识点- 一个人摸索学习很难坚持 ...

  2. Java基础-初识面向对象编程(Object-Oriented-Programming)

    Java基础-初识面向对象编程(Object-Oriented-Programming) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Java是一门面向对象的程序设计语言.那么什 ...

  3. Java基础篇--面向对象(Object Oriented)

    Java基础篇--面向对象(Object Oriented) 1. 面向对象概念 1.1 什么事面向对象 1.2 理解面向对象 1.3 面向对象的特点 1.4 面向对象开发设计特征 2. 类与对象 2 ...

  4. 一文带你深入理解【Java基础】· 面向对象编程(下)②代码块、final和abstract

    写在前面 Hello大家好, 我是[麟-小白],一位软件工程专业的学生,喜好计算机知识.希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正!谢谢大家!!! ...

  5. Java基础-OOP 面向对象编程

    OOP 面向对象编程 面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构.强调的是具有某些特定功能的对象. 面向过程编程(Proced ...

  6. 第十二课 Java基础篇——面向对象进阶(一)

    一.Static static表示静态,是Java中的一个修饰符,可以修饰成员方法,成员变量 静态变量是随着类的加载而加载的,优先于对象出现的 练习1.定义数组工具类 需求:在实际开发中,经常会遇到一 ...

  7. java基础篇---网络编程(IP与URL)

    一:IP与InetAddress 在Java中支持网络通讯程序的开发,主要提供了两种通讯协议:TCP协议,UDP协议 可靠地连接传输,使用三方握手的方式完成通讯 不可靠的连接传输,传输的时候接受方不一 ...

  8. 第九课 Java基础篇——面向对象(综合案例)

    1.文字版格斗游戏 格斗游戏,每个游戏角色的姓名,血量,都不相同,在选定人物的时候(〈new对象的时候),这些信息就应该被确定下来. Role.Java package cn.nwafu;import ...

  9. java基础:面向对象编程1-初步认识

    package com.atguigu.java; /**一.学习面向对象内容的三条主线1.Java类及类的成员:属性.方法.构造器.代码块,内部类2.面向对象的三大特征:封装性,继承性,多态性3.其 ...

最新文章

  1. 什么是CMU Pronoucing Dictionary(CMU发音词典)
  2. Lesson 6.动态计算图与梯度下降入门
  3. 使用pycaffe读取caffemodel参数(保存到txt文件)
  4. 如何修改帝国cms文章点击量默认值和成倍增加
  5. Spring Boot Admin 的使⽤
  6. Spring延迟依赖注入ObjectFactory/ObjectProvider
  7. 计算机网络(一)-- 物理层与数据链路层
  8. 关于WINDOWS超级终端的使用来调试MODEM 串口
  9. 大一html网页制作PPT,HTML网页制作.ppt
  10. 使用 C# 编程对 RTF 文档进行操作 [转载]
  11. JDK 8 Stream流的优美用法——groupingBy结合joining用法
  12. 【NOI模拟赛】黑色大桥(DP优化,李超树)
  13. at91sam9260ek的板级、irq初始化-小试牛刀
  14. 免费沙箱软件模拟支付_小游戏虚拟支付沙箱测试报错
  15. 【奇奇怪怪小知识】系统盘(C盘)持续发出“救救我”信号(C盘仅剩不足10G,爆红), 操作过后直接腾出近20G
  16. 楼市、二手、分期……2个月后iPhone X在中国将会一机难求?
  17. 取Json中的数组进行遍历
  18. 2023届秋招提前批信息汇总(持续更新ing)
  19. 【解决方案】根据当前系统时钟或签名文件中的时间戳验证时要求的证书不在有效期内
  20. LocalResolver国际化语言转换

热门文章

  1. Appium+python自动化29-appium对博客园APP进行自动化测试
  2. 计算机专业进农商行还是电信,农商行好进嘛?为什么那么多人选择报考农商行?...
  3. 淘宝/天猫搜索店铺列表 API 返回值说明
  4. js ,保留小数点后几位
  5. Java垃圾回收基本过程
  6. 企业直播助力展会行业精准引流变现
  7. 毕业设计(4):基于MicroPython的超声波倒车雷达系统
  8. 路由器的5G与手机的5G有什么区别?
  9. delphi mysql 乱码_Delphi连接mysql中文乱码的解决办法
  10. 我的博客搬家了! 新地址:http://www.cnblogs.com/jubincn/