type
status
date
slug
summary
tags
category
icon
password
类和对象
概念
- 类和对象是什么
- 类:是共同特征的描述(设计图)
- 对象:是真实存在的具体实例。
- 如何得到对象
- public class 类名 { 成员变量(代表属性 一般名词) 成员方法(代表行为 一般名词) }
- 类名 对象名=new 类名();
- 拿到对象做什么
- 对象.成员变量
- 对象.成员方法(...)
创建phone类
创建对象
效果
定义类的补充注意事项
- 用了描述一类事物的类,
javabean类,在此类中不写main方法
- 在以前编写main方法的类,叫做测试类,我们可以在测试类中创建
javabean类的对象并进行赋值调用
Javabean类类名首字母建议大写,需要见名知意,驼峰模式
- 一个Java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名。
实际开发中建议还是一个文件定义一个class类
- 成员变量的完整定义格式是:修饰符 数据类型 变量名称 =初始化值;一般无需指定初始化值,存在默认值
封装
什么是封装
- 对象代表什么,就得封装对应的数据,并提供数据对应的行为
理解封装思想的好处
- 降低我们的学习成本,可以少学、少记,或者说压根不用学,不用记对象有哪些方法,有需要时去找就行
- 让编程变得很简单,有什么事,找对象,调方法就行
private关键字
- 是一个权限修饰符
- 可以修饰成员(成员变量和成员方法)
- 被private修饰的成员只能在本类中使用
- 针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作
提供"setXxx(参数)"方法,用于给成员变量赋值,方法用public修饰
提供"getXxx()"方法,用于获取成员变量的值,方法用public修饰
使用
编写
GirlFriend类编写main方法
效果
this
this作用:可以识别局部变量和成员变量
以下代码 name 用的成员变量 用的
this.name构造方法
原理
构造方法类型
- 无参数构造方法:初始化的对象时,成员变量的数据均采用默认值。
- 有参数构造方法:在初始化对象的时候,同时可以为对象进行赋值。


特点:
- 方法名与类名相同,大小写也要一致
- 没有返回值类型,连void都没有
- 没有具体的返回值(不能由
retrun带回结果数据)
构造方法作用:
- 创建对象的时候由虚拟机调用,不能手动调用构造方法
- 每创建一次对象,就会调用一次构造方法
使用
构造方法注意事项
- 构造方法的定义
- 如果没有定义构造方法,系统将给出一个默认的无参数构造方法
- 如果定义了构造方法,系统将不再提供默认的构造方法
- 构造方法的重载
- 带参构造方法,和无参数构造方法,两者方法名相同,但是参数不同,这叫做构造方法的重载
- 推荐的使用方式
- 无论是否使用,都手动书写无参数构造方法,和带全部参数的构造方法
JavaBean怎么来
Javabean和表的对应关系

javabean参与添加功能说明

javabean参与查询功能说明

标准JavaBean类
- 类名需要见名知意
- 成员变量使用private修饰
- 提供至少两个构造方法
- 无参构造方法
- 带全部参数的构造方法
- 成员方法
- 提供每一个成员变量对应的
setXxx()/getXxx() - 如果还有其他行为,也需要写上
内存图
java内存分配介绍

一个对象内存图

两个对象内存图

两个引用指向同一个对象

基础数据类型和引用数据类型

this内存原理



成员变量与局部变量区别

static关键字
介绍
- 概述
- static是一个静态关键字
- 使用
- 修饰一个成员变量
- static 数据类型 变量名
- 修饰一个方法
- 修饰符 static 返回值类型 方法名(形参){ 方法体 return结果
- 调用静态成员
- 类名直接调用(不用new对象)
- 静态成员特点
- 静态成员属于类成员,不属于对象成员(非静态的成员属于对象成员)
- 静态成员会随着类的加载而加载
- 静态成员优先于非静态成员存在在内存中
- 凡是根据静态成员所在的类创建出来的对象都可以共享这个静态成员
使用
内存说明

静态成员访问特点
- 在静态方法中能直接访问非静态成员嘛
- 不能
- 想要调用的话:new对象调用
- 在非静态方法中能直接访问静态成员嘛
- 能
- 同类,直接调用或类名调用
- 不同类,类名调用
- 在静态方法中能直接访问静态成员嘛
- 能
- 同类,直接调用或类名调用
- 不同类,类名调用
- 在非静态方法中能直接访问非静态成员嘛
- 能
- 同类,直接调用,new对象调用
- 不同类,new对象调用
总结:
- 不管在不在同一个类中,非静态成员都可以new对象调用
- 不管在不在同一个类中,静态成员都可以类名调用
静态成员在开发中使用场景
- 既然static成员那么好使(类名直接调用),那么我们在实际开发中,能不能将所有的成员都定义成静态的呢?
- 不能
- 原因
- 由于静态成员会随着类的加载而加载,如果将所有的成员都变成静态的,那么类一加载,静态成员都会进内存,会 大量占用内存空间
- 那么静态成员都啥时候定义呢?
- 一般情况下,我们在抽取工具类的时候可以将工具类中的所有成员都定义成静态的
- 啥时候定义工具类?
- 比如我们在写代码的过程中,发现有的功能在反复实现,代码一样,功能一样,此时就可以抽取出来,形成工具类
可变参数
使用和注意事项
介绍和基本使用 定义格式 数据类型...变量名注意 可变参数的本质是一个数组参数位置不能连续写多个可变参数,而且当可变参数和其他普通参数一起使用时,可变参数需要放到参数列表最后
练习
返回个字符串拼接结果,如果没有传入字符串,那么返回空字符串"
n个字符串进行拼接,每一个字符串之间使用某字符进行分隔,如果没有传入字符串,那么返回空字符 串"
递归
介绍和基本使用
- 概述:方法内部白己调用自己
- 分类:
- 直接递归
- public static void method(){method()}
- 间接递归
- a(){ b() } b(){ c() } c(){ a() }
- 注意
- 递归必须要有出口,否则会出现"栈内存溢出"
- 递归即使有出口,递归次数不不要太多
练习
输出3到1
执行过程
n阶乘
执行过程
斐波那契数列故事得从西元1202年说起,话说有一位意大利青年,名叫斐波那契。在他的一部著作中提出了一个有趣的问题!假设一对刚出生的小兔一个月后就能长成大兔,再过一个月就能生下一对小并且此后每个月都生一对小兔,一年内没有发生死亡问:一对刚出生的兔子,一年内繁殖成多少对兔子?规律:一个数等于前两个数之和,比如:1 1 2 3 5 8 13 21 34 55.…
数组常见算法
数组翻转
数组对称索引位置上的元素互换
分析
冒泡排序
数组的排序,是将数组中的元素按照大小进行排序,默认都是以升序的形式进行排序。 排序,都要进行数组元素大小的比较,再进行位置的交换。冒泡排序法是采用数组中相邻元素进行比较换位。
二分查找
前提:数组中的数据必须是有序的查询思想: 老式查询:遍历数组,一个一个比较->查询效率慢二分查找:每次找中问索引对应的元素进行比较查询(每一次查询少一做据)

对象数组
内存图分析
效果·方法参数
基本类型做参数传递
基本数据类型做方法参数传递,传递的是值,不是变量本身 方法运行:压栈 方法运行完毕:弹栈->释放栈内存
内存图分析
引用类型做参数传递
引用数据类型做方法参数传递时,传递的是地址值
内存图分析
命令行参数(了解)
通过命令行给main方法的形参传递的实参称为命令行参数




其他操作
快速生成方法
- 初学者要求先定义,再调用:不是初学者,就可以先调用,再定义方法
- 快捷键:Alt+问车
- 快速将一段代码抽取到一个方法中
- 选中要抽取的方法
- 按Ctrl+Alt+m
debug调试
- 概述
- 调试代码的一种手段
- 作用
- 能清楚的看到每个变量在代码执行过程中的变化
- 找错
- 使用
- 在想要开始debug的那一行左边点击一下,出现红色小圆点(断点)
- 右键->点击debug


- 作者:NotionNext
- 链接:https://tangly1024.com/article/1bedb897-8f81-80a4-8e28-fe35b948bb80
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。






