java进阶学习1

这篇博客详细讲解了Java中的面向对象编程与API应用。涵盖了类与对象的概念,对象内存图,this关键字的内存原理,封装的实现,以及Java API中的Scanner和String类的使用,包括字符串的创建、比较、遍历、截取和替换等操作。同时,通过实践案例加深了对这些概念的理解。
摘要由CSDN通过智能技术生成

forword:

面向对象编程(oop):对象为中心,指挥对象实现具体功能

面向过程编程(pop):过程为中心,自己实现每一步功能

一、类和对象内容补充

1、类与对象

(1)根据类创建对象,类由属性和行为组成(属性是指事物的各种特征:体现为成员变量有特定值;行为是指事物存在的功能:体现为成员方法)

 (2)带有main方法的类通常称为测试类

2、对象内存图

(1)单个对象内存图

24f5c6bb5a164d3580b22d92844d56aa.png

fcfd8894cc9440948799e1a0de152eae.png  

(2)两个对象内存图(创建第二个对象时,.class字节码文件无需重新加载)

aa719ae3ac914359b750757546deefaa.png

d91b98b4a28d4c0fa00313a4f3c01674.png 

(3)两个引用指向相同内存图

78620ea8455b426e9bda3ae4df3b1ae9.png

c7adcb89badd49709c338c53a3412bb0.png  

(4)垃圾回收:堆内存中,对象或数组产生的地址通过任何方式都不能被找到后,被判定为内存中的垃圾,垃圾会被java垃圾回收器空闲的时候自动进行清理

3、this内存原理

7c625858258744a7b3fce0d290187e03.png

note:方法被某个对象调用,方法中的this就对应该对象

397b954a666d4f2ca3f09e9bb3c035f2.png

€1  通过程序感受this和对象相对应 

42abe6bc83474271970001604781f30f.png

b55244cde5e24a3392a87fe2da1c1534.png  

4、封装的三大体现(封装:隐藏实现细节,仅对外暴露公共的访问方式)

(1)将代码抽取到方法中,实现对代码的封装

(2)将属性抽取到类中,实现对数据的封装

(3)私有成员变量,提供set和get方法

 €2  get方法所得属性可进一步操作运行

4ac9b70679dd46f8aed991c3563f3266.png

7b02e8b63ebd4f0f88476fd0ab014d2e.png 

二、API:应用程序编程接口

java API:JDK中提供的各种功能的java类

notes:

(1)利用帮助文档可查找目标java类所在包、构造方法、创建对象方法等

(2)类的使用都是通过创建对象调用成员变量和成员方法实现

(3)要明确所用的类存储在哪个包里,使用时首先导入包

1、Scanner类(常用于实现键盘键入并接收)

常用方法:

(1)next();用于返回字符串

(2)nextLine ();用于完整返回字符串

(3)nextInt();用于返回整数

€1   Scanner类nextInt方法使用实现动态初始化一维数组8332bc54a6704281b3d028a8e0d76d1f.png

 7f6e53604b864621b2c83b9deb13f298.png

6c80f861bf0d4b9b924e042db3528e9b.png 

 

€2   Scanner类方法使用练习

42a2389934344715b93e87db65c61d42.png

3f4407d83e434a80b31b24418eee07a9.png  

€3   Scanner类nextInt方法和nextLine方法使用练习

c69ec5c4aad74ff2b4cc21a74d668cee.png

78243e2553674bcfb164be1082f82fa9.png 

针对next Line方法和nextInt方法连用出现错误,我们将nextLine方法换为next方法再次运行

1d446f6ba6c14d849454d0f74a385fb7.png

 €4   Scanner类中nextLine方法与next方法辨析使用

3ef8f22968344adc81722cac497c9f54.png

 2、String类(用于创建字符串类型对象,对字符串作加密、增删、拆分数组等操作)

notes:

 (1)String类在java.lang包下,使用时不需要导包

(2)String类代表字符串,java程序中所有字符串文字都被实现为此类的实例,java程序中所有双引号字符串都是String类的对象

(3)字符串不可变,它们的值在创建后不可更改

€1   String类中对象创建(字符串类型)以及字符串长度计算,此处用的构造方法是直接赋值法,双引号内容即为字符串对象

d97792ce619841cc94e6e2db66a86b34.png

ab1e3508c6a74f28a58ef29754cafc47.png 

(4)String类常用构造方法

(i) public String();创建一个空白字符串对象,不含任何内容

(ii)public String(char[]数组名);根据字符数组内容,创建字符串对象

(iii) public String(String original);根据传入的字符串内容,创建字符串对象

(iiii) String s="abc";直接赋值的方式创建字符串对象,内容就是abc

€2   String类无参构造和通过字符串对象构造字符数组练习

5a0eaeeb0f7c4b84af09ec101b5359a0.png

431a42b36c3f4a01beb9988ba181b264.png 

 €3   String类带初始值构造

0593acaa90f8439fac4813368af13ce4.png

 (5)构造方法和双引号直接赋值都可创建对象,二者区别何在:

(1)用==作比较运算时,有以下区别

92653c0a59c7440bac484538cba46cb7.png

(2)以""给出的字符串,只要字符串序列相同(顺序和大小写) ,无论在程序代码中出现几次,JIM都只会建立一个String对象,并在字符串常量池中维护。(Note:字符串常量池:当使用双引号创建字符串对象时,系统会检查该字符串在字符串常量池是否存在,若不存在则创建,若存在则直接复用)

9ad81eefd6c44eac8182b04921ef31d4.png 

(3)以new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但地址值不同

73604c5844a14fb6a06d862c8d3dce6a.png

(4)接下来继续看代码比较创建对象的区别

a3ea35409c974f84abc8cc89a127df76.png 

bbc804a9ed954a159391743d5707e220.png 

ad290e6132cf4ce996e496bd53f375d0.png 

58d892bce2fd4c32824ebb0e8298121e.png 

c52482436b0147fbb7a3867add63f92e.png 

(5)字符串的比较

  (==作比较)

(i)基本类型:比较数据值是否相同

(ii)引用类型:比较地址值是否相同

字符串是对象,它比较内容是否相同,通过方法equals()

 public boolean equal(Object anObject):将此字符串与指定对象相比较,由于比较的是字符串对象,所以参数直接传递一个字符串

€4  字符串比较练习

 

71a9743fa926430b86bec4f80ba7e781.png

8d69e465dd554030833d864e447970fe.png 

 €5  案例练习

4126a7315c204519aea1604d172228e4.png

7ad745ef37bc4e43aa076c9b0e751be3.png 

32d7d3fa07864b55ad1da40598b7178f.png

 €6  遍历字符串练习

0a5624f76eb94f7bbba23820e842554b.png 

分析:

(1)键盘录入字符串,用Scanner实现

(2)遍历字符串要求能够获取到字符串中的每一个字符,public char charAt(int index):返回指定索引处的char值,字符串的索引从0开始

(3)遍历字符串要求能够获取到字符串长度,public int length():返回字符串长度

(4)数组长度:数组.length     字符串长度:字符串对象.length()

方法一:字符串索引遍历

 

35a566c5041249b080f10153d4574421.png 

b31424e7f2cb44cba21ee1177c16dccc.png

 方法二:将字符串拆分成字符类型的数组

6a6d189497d14dd38caa095a0e6050e2.png

0b93d4915d084c3e9fb29601290cdec9.png 

 €7  统计字符次数练习

e995330900b54d9ba3bc40b428b11cf2.png

 分析:

(1)键盘录入字符串,用Scanner实现

(2)统计三种类型的字符个数,需定义三个统计变量,初始值均为0

(3)遍历字符串,判断字符类型,对应统计变量+1

94f746b479bf4dc79da64d8489ccd983.png

85e20f63a20e49fb974ca15c23d778ce.png 

5e71e7cf028e4326b21bbdead9a9a3c6.png 

 €8  手机号码部分字段隐藏练习

4ba953fb9c1441dab3c5b75b85fa7c2e.png

分析

(1)键盘录入字符串,用Scanner实现

(2)字符串截取两种方法:

(i)单参数法:String substring(int index):从指定索引处开始向后全部截取,然后返回新字符串

(ii)双参数法:String substring(int index1,int index2):从1号索引处开始截取,结束于2号索引处,包含1号索引,不包含2号索引(带头不带尾),然后返回新字符串

方法一:字符类型数组遍历,隐藏字段

086d641f87ca4dec9c7a823907f09749.png

a8b29a75767448018d32d67c5b44fbdc.png 

方法二:利用String类中的substring方法截取特定字符段

 

0c5c7129c7654a79baa1739bb244d072.png 

附:substring截取字符段练习

e33caeb8e72d496793db343b7fa5f4f6.png 

305a144291784ccabfbe2ca2e1d5a9e3.png 

  €9  敏感内容打码练习

057a0b953dc04c9ba1473664c55614a6.png

(1)键盘录入字符串,用Scanner实现

(2)String replace(Char target,Char replacement):将当前字符串中的target内容(旧内容),使用replacement(新内容)进行替换并且返回新字符串

793a5efc8037438d81bd6bbdb34bf5a4.png 

4dc26545a6c44920a41a877310ba6237.png 

  €10  按照一定分割符切割字符串练习

2aeef46e92894e85b31abf9c3ade0352.png

(1)键盘录入字符串,用Scanner实现

(2)编写Student类,用于封装数据(属性)

(3)根据逗号切割字符串,得到 张三 23

String [] split (String regex ):根据传入的字符串作为规则进行切割,切割后内容存入字符串数组中,返回字符串数组

(4)从返回的字符串数组中取出元素内容,通过Student类的含参构造方法封装为对象

(5)调用对象中get方法,打印展示

e9675501ce134dd3ad406222f09ca64a.png

c3ac02695a584ce89b3ce3f4e0c1734e.png 

8aa4408d481d4a2baad816951bc5b230.png 

Note:String类方法小结

public boolean equals(Object anObject):比较字符串内容,严格区分大小写

public boolean equalsIgnoreCase(String anotherString):比较字符串内容,忽略大小写

public int length():返回字符串长度

public char charAt(int index):返回指定索引处的char值

public char[] toCharArray():将字符串拆分为字符数组后返回

public String substring(int beginIndex,int endIndex):根据开始和结束索引进行截取,得到新字符串(含头不含尾)

public String substring(int beginIndex):从传入的索引处开始截取,截取到末尾,得到新字符串

public String replace(CharSequence target,CharSequence replacement ):使用新值将字符串中的旧值替换,得到新字符串

public String [] split(String regex):根据传入的规则切割字符串,得到字符串数组

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值