面向对象知识总结(1)

本文详细介绍了Java虚拟机(JVM)的内存区域,包括栈、堆和方法区,并重点讲解了字符串的创建、比较和字符串常量池。还讨论了Java的final关键字及其作用,以及反射对对象不可变性的潜在影响。同时,提到了字符和字符串以及字节和字符串之间的转换操作。
摘要由CSDN通过智能技术生成

JVM

1、JVM是Java的虚拟机
JVM首先从操作系统申请一块空间
栈:方法和方法之间的调用关系
堆:new出来的对象/实例(对象就是实例,实例就是对象
方法区:JVM中的内存区域除了有堆和栈之外,还有一个非常重要的区域叫做方法区

栈不是只有一个,每个线程都有自己的栈。堆和方法区,每个JVM都只有一份

对于属性来说,如果属性是一个实例属性,那么不在方法区而是跟着实例走(一般在堆上),如果属性是一个类属性(被static修饰),那么也就在方法区中。
对于方法来说,不管加不加static,对应的内容都是在方法区中

Java两大类型:

1、内置内型(有且只有8种,byte、short、int、long、float、double、char、boolean)
2、引用类型(除了上面的8种都是引用类型如,数组,string,类)

认识String类

1、创建字符串
常见的构造String的方式

\\方式一
String str=“Hallo Bit”;
\\方式二
String str2=new String(“Hallo Bit”);
\\方式三
char[] array={'a','b','c'};
String str3=new String(array);

java中的字符串(String)和字符数组(char[])之间是没有关联关系的。
String在Java中也不是独立存在的,它是存放在Java.lang这个包中。
2、字符串比较相等
Java中String类对象比较相等不能使用“”,因为“”比较的是两个引用的地址是否相等。
例如

String str1=new String("hallo");
String str2=new String("hallo");
System.out.println(str1==str2);
\\执行结果
false

.equals会分别比较两个字符串中的字符是否依次相等。

3、字符串常量池
池:计算机中常用的术语,如内存池、进程池,对象池,就是为了降低开销,提高效率。

Java的字符串常量会被保存到“字符串常量池”中,此时字符串常量只需要保存一份即可。
Java的字符串常量会被保存到“字符串常量池”中,此时字符串常量只需要保存一份即可。

将字符串入池的方法:.intern(),调用intern方法,就会拿当前字符串内容在字符串常量池中找,看当前这个内容是否存在于池中,如果存在,直接返回该池中的地址。如果不存在,则把当前字符串的内容加到常量池中,返回池中的地址。

Java的final
Java中的String是不可变对象(对象本身不能修改)

Java的String为啥是不可变对象呢?
1、方便放到池中,如果是可变的,一旦池中的内容发生改变,就会影响到所有引用这个池对象的结果
2、对象内容不可变,则对象的hashCode也不可变,方便和hash表这样的结构配合使用。
但是Java中的“不可变对象”并不是绝对的,只是常规手段不能改,还有特殊手段

反射(自省)
自省是面向对象程序设计的一个重要特性
反射和封装是背道而驰的
1、反射往往有可能打破封装
2、反射的代码比较复杂而且容易出错
3、反射牺牲了编译器自身的一些检查校验机制,更需要人工来保证正确性
Java的final主要是两个功能:
1、final修饰的是一个变量,表示一个常量,如果修饰引用类型,表示该引用的指向不能修改(引用中存的地址不能改)
2、final修饰一个类,表示这个类不能被其他类继承
3、对象不可变,线程安全更有保证

字符和字符串之间的转换

将字符转化成字符串:使用一个字符数组来构造有个字符串

有如下几种方式:
a)pulic.String( char.value[] ) \\将字符数组中所有的内容转化成字符串 b)public.String( char.value[],int .offset,int.count )\\将字符数组部分指定内容转化成字符串 c)pulbic.char.charAt(int .index)\\取得指定索引位置的字符,索引从0开始 d)public.char[].toCharArray()\\

将字符串转化成字符:使用charAt来获取到指定下标的字符public.char[].toCharArray()\\将字符串变成字符数组返回

字节和字符串之间的转换
将字节转化成字符串:使用一个字符数组来构造字符串

将字符串转化成字节:使用getBytes来完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值