java入门(起始于string截至到内部类)
api就是java中已经写好的各种类直接拿来用就行一.字符串1.string类1string类的特点2string类对象的创建方法主要用“直接赋值方法”最后两种也常用3字符串的内存原理a.对于直接赋值的这种创建字符串的方式串池是在堆区的第一次也就是s1那行首先会到串池中去找“abc”没找到所以在创建“abc”并把地址赋值给s1第二次s2那行首先到串池中找”abc“找到了直接把地址赋值给s2.存在复用b.对于new的方式是直接在堆区创建空间来存储来存储字符串不存在复用4字符串的比较号比较的其实是变量小空间里面记录的东西基本数据类型就是真实的值引用数据类型就是地址5字符串的遍历2.stringbuilder进行字符串的拼接以及反转时用直接print springbuild类型的对象时打印出的是其内的内容append方法是在容器后面追加内容3.stringjoiner(用于拼接字符串比stringbuilder更加方便可以指定开始结束以及间隔符号)4.字符串拼接的底层原理1拼接的时候没有变量拼接时如果没有变量参与则编译之后直接就是拼接的结果那么该代码运行时也就不需要进行拼接了2拼接的时候有变量jdk8以前对于第二行代码执行过程相当于篮筐里的那行代码tostring底层是new一个新的字符串3拼接的时候有变量jdk8以后的拼接他会预估s4的长度预估为3然后把abc分别放入数组然后根据数组来创建字符串(new出来的)在jdk8以前这里是先进行s1与s2的拼接使用stringbuilder以及tostring然后进行s1与s2的拼接结果与s3进行拼接 即使如此在进行拼接时依然很浪费时间在下图情况下s2会进行一个长度的评估创建数组以及创建字符串s3又会发生一轮因此以后进行字符串拼接时还是用stringbuilder或stringjoiner的append好。3stringbuilder提高拼接效率的原理图此时串池里有abcstringbuilder源码stringbuilder初始有一个长度为16的字节byte类型数组当往里面append数据时实际上是往字节数组里添加对应的ascii码当添加的字符数小于16时字节数组无需扩容当字符数大于16小于等于34时数组扩容为16*22 当字符数大于34时数组扩容为字符数二、集合1.特点1自动扩容自动缩小长度和内容一致2只能存引用数据类型要存整数等要存其对应的包装类2.集合的种类1arraylistString是泛型限制arraylist里面只能存储string类型三、静态1.静态变量内存原理student的字节码文件被放入方法区之后堆中的静态区里面存放着静态变量内存中只有一份因为静态变量是随着类而加载的优先于对象出现可以通过对象找到静态变量2.静态方法1三种类javabean类私有化成员变量写无参构造和带全部参数的构造写get set方法以及额外方法工具类私有化构造方法使得无法创建该类对象因为没有意义所有方法都定义为静态方法23静态方法的细节非静态成员方法中是有this变量的如下图this是一个方法所在类型的形参由虚拟机自动赋值调用者的地址在一个成员方法内调用另一个成员变量或成员方法时调用处如下图的show2()前面默认带一个this而在静态方法中是没有this关键字的内存角度a.静态方法调用非静态变量会出错执行main中的第一行代码时首先把student字节码文件加载到方法区同时静态变量放到静态区执行第二行时会到静态区中寻找name和teachername但是name找不到因为他不是静态变量于是出错。b.非静态能够访问所有静态对于show方法由s1调用那方法内部就可以根据s1对象来找到anme和teachername也能通过s1找到该类的所有方法包括method。4重识main方法四、继承1基础知识设计真实的继承关系时用画图的方法来解决把所有类型放到最底层然后不断抽取共性共性在子类中直接删除即可形成父类写代码时直接按照图来写就行每个类应该包含的属性以及方法就是该类的圈里面所包含的东西2继承内容a.构造方法构造方法是一定不能继承的b.变量所有的成员变量都是可以继承下来的只不过private类型的变量子类不能直接使用但可以通过父类提供的get set方法来间接使用执行过程内存过程如下首先将teststudent类的字节码文件调入方法区然后main函数进栈开始执行执行第一行代码时zi的字节码文件及其父类fu的字节码文件 以及fu的父类object类的字节码进入顺序是先父类再子类都会进入方法区创建zi类对象时对象区域分为两块一块是zi自己的属性一块是fu的属性之后通过z.访问zi对象的属性时首先到zi自己的属性中去找找不到就到fu的属性中去找对于这种private修饰的情况使用z.name是找不到继承下来的name以及age变量的c.成员方法父类把自己虚方法即非private非static非final放进虚方法表继承时子类会拿到该虚方法表并把自己的虚方法添加进去子类调用父类虚方法时直接就能在虚方法表内找到如果不是虚方法则一级一级的向上找先找a再找b再找c比如执行zishow()时是虚方法即使是自己的方法直接在虚方法表内找到执行fushow2()时发现不是虚方法则先找zi再找fu发现是private方法直接报错3继承中的访问特点a.成员变量方法中单写name符合就近原则先局部变量后本类变量最后 父类变量b.成员方法也是就近原则使用this.调用时在本类找方法再到父类使用super.调用时直接到父类找方法重写相关知识重写方法的上面要加override虚拟机看到会检查重写的格式是否正确出错会标注红色波浪线子类重写父类方法时本质就是 子类方法会覆盖虚方法表中父类同名方法只要记住45两点即可c.构造方法也就是说子类的构造方法一定要先调用父类的构造方法4this与super注意这里的this......他是去调用本类的有参构造使得使用无参构造创建对象时无参构造使用有参构造完成成员变量的初始化当在构造方法写入this(....)它必须是放在第一行的否则会报错时就没有默认的super了因为他所调用的有参构造中有super()5其他细节子类中带全部参数的构造全部参数指的是子类以及父类中所有的参数父类中参数的初始化调用父类的有参构造来实现五、多态1.多态的前提父类变量可以接受直接子类或间接子类对象多态是当父类有show方法且子类都重写show方法父类变量接受子类对象的情况下父类变量.show调用的是对应子类中重写的show()方法2多态的调用特点java中加载字节码文件进方法区时永远是先加载父类的字节码文件再加载子类的父类有name变量子类中自己又定义了一个name变量时那子类中是有两个name变量的内存原理java中加载字节码文件时永远是先加载父类的字节码文件再加载子类的这个例子中加载顺序为objectanimaldogdog的字节码文件记录着其父类animal字节码文件的地址访问a.name时直接到父类的空间中去找name而不去子类的空间3多态缺点父类变量接受子类对象子类对象会默认转换为父类属于自动转换时无法调用子类特有的方法但是可以把该对象转换为原类型属于强转再去访问该方法强转前先用instanceof判断下更好a instanceof dog的作用是判断a是不是dog类的对象返回true或false六、一些知识点1.包全类名/全限定名就是包名加类名可以通过导包的方式指定使用的student类是itheima包下的也可以使用全类名使用类时要注意的问题2.final修饰符final修饰的变量在定义时一定要赋值且以后都不能再赋值也就是说final修饰的变量里面存储的东西是不能改变的基本数据类型是数据引用数据类型是地址3.权限修饰符4.代码块1局部代码块基本淘汰作用就是提前结束变量的生命周期变量只在所属大括号存在不过现在已经不用了因为现在内存很大了2构造代码块基本淘汰构造代码块会在创建对象时优先于构造方法执行可用于存放构造方法们共性的内容3静态代码块当类加载到内存时静态代码块自动执行唯一一次可用于做数据的初始化比如可以初始化本类的静态变量5.抽象类父类中无法确定方法体就把方法定义为抽象的有抽象方法的类必须定义为抽象类抽象方法虽说不能实例化但是他的构造方法仍然是有意义的比如子类可以用其构造方法进行父类属性的赋值七、接口实现了接口的类都可以传递给接口变量此时满足方法编译看左边运行看右边。变量编译和运行都看左边。1.接口的定义和使用2.接口中的成员特点接口.变量名可以访问接口里的变量无论是什么版本的jdk接口里的成员方法都默认为public static3.接口和类之间的关系当一个类实现多个接口且有同名方法时比如a接口有方法123b接口有方法1234把同名方法123重写一次即可这个重写即使a中的123的重写又是b中的当接口a有抽象方法1接口b有抽象方法2且继承了接口a接口b的实现类要重写方法124.扩展a.jdk8开始接口新增的方法下面的default和static方法对应上述的第二条public可以省略因为默认就是public修饰default和static不能省略如果省略了默认为abstract静态方法不能重写如果强行写个同名的静态方法也不叫重写b.jdk9的新特性这两种私有方法的作用就是给接口内的其他方法去访问不给外界使用不用static的给default方法使用有static的给static方法使用5.接口的适配器八、内部类1.内部类的定义2.内部类的分类前三种能看懂即可不重要a.成员内部类成员位置指的是类中方法外且不被static修饰private修饰的成员内部类只能被对应的外部类创建对象默认的能被本包的类创建对象和变量的访问原则是相同的当内部类被private修饰时可以有外部类提供获取内部类对象的方法其他类通过使用外部类提供的方法来获取对象但此时被赋值变量的类型不能写 外部类.内部类可以写父类object同名变量的情况内部类对象中有外部类对象的地址值outer.this就是内部类对象中的thisb.静态内部类静态内部类和静态变量使用方式很类似都可以通过类名.直接拿到定义成员内部类被static修饰就是静态内部类下图所示为静态内部类访问外部类的静态与非静态属性的演示静态内部类的方法无论是静态还是非静态都只能访问外部类的静态c.局部内部类能修饰局部变量的就能修饰局部内部类比如final不能则不能比如publicprivate下图是对上图第三点的解释外部类中有个属性b通过外部类的对象调用show方法方法内部类的对象的方法可以访问到外部类的属性b也可以访问到show方法的局部变量d.匿名内部类某个类只使用一次时就可以写成匿名内部类以下格式的含义是创建了一个对象这个对象实现了inter接口或者继承了某个类类体就是大括号的内容指的是创建对象时使用的是空参构造匿名内部类本质上长下面这样这个例子中swim接口中又swim抽象方法

相关新闻

新手必看:Phi-4-da8w8-torchao-v0.16.0环境搭建与快速上手(含pip安装命令)

新手必看:Phi-4-da8w8-torchao-v0.16.0环境搭建与快速上手(含pip安装命令)

新手必看:Phi-4-da8w8-torchao-v0.16.0环境搭建与快速上手(含pip安装命令) 【免费下载链接】Phi-4-da8w8-torchao-v0.16.0 项目地址: https://ai.gitcode.com/hf_mirrors/amd/Phi-4-da8w8-torchao-v0.16.0 想要在AMD CPU上高效运行大…

2026/7/12 23:05:02 阅读更多 →
prompt-ops核心功能揭秘:5大策略助你打造完美提示词

prompt-ops核心功能揭秘:5大策略助你打造完美提示词

prompt-ops核心功能揭秘:5大策略助你打造完美提示词 【免费下载链接】prompt-ops An open-source tool for LLM prompt optimization. 项目地址: https://gitcode.com/gh_mirrors/ll/prompt-ops 你是否曾为编写高质量的LLM提示词而烦恼?是否在反复…

2026/7/12 23:03:01 阅读更多 →
pandocs终极指南:如何快速掌握Game Boy技术文档的10个核心要点

pandocs终极指南:如何快速掌握Game Boy技术文档的10个核心要点

pandocs终极指南:如何快速掌握Game Boy技术文档的10个核心要点 【免费下载链接】pandocs The single, most comprehensive Game Boy technical reference. 项目地址: https://gitcode.com/gh_mirrors/pa/pandocs pandocs是最全面的Game Boy技术参考文档&…

2026/7/12 23:03:01 阅读更多 →

最新新闻

2026商城小程序开发公司排名:适合深圳地区3C数码企业的服务商哪家好?含零代码SAAS、AI编程、源码定制交付

2026商城小程序开发公司排名:适合深圳地区3C数码企业的服务商哪家好?含零代码SAAS、AI编程、源码定制交付

一、汇总表工具更适合谁价格开发方式核心特点餐宝盈适合所有行业的商家,尤其是拥有自己实体门店的商家,如餐饮、茶饮、烘焙、便利店、生鲜、社区零售门店、教培门店,尤其适合先把点单、预约、会员、发券和复购做起来的老板。99/年模板SAAS先下…

2026/7/12 23:59:18 阅读更多 →
vagas社区治理详解:如何维护健康的QA职位生态系统

vagas社区治理详解:如何维护健康的QA职位生态系统

vagas社区治理详解:如何维护健康的QA职位生态系统 【免费下载链接】vagas 🚀 Divulgue facilmente e receba a vaga por completo no seu e-mail 项目地址: https://gitcode.com/gh_mirrors/vagas/vagas vagas作为GitHub上的QA职位社区&#xff0…

2026/7/12 23:59:18 阅读更多 →
开源本地智能体 OpenClaw 2.7.9 保姆级部署手册,零代码操控电脑重复工作

开源本地智能体 OpenClaw 2.7.9 保姆级部署手册,零代码操控电脑重复工作

📖前言 OpenClaw,在开发者社区中常被亲切地称为"小龙虾",是当前备受关注的开源 AI 智能体项目,其在 GitHub 平台上已累计获得超过 28 万星标。与常规的对话型 AI 工具不同,OpenClaw 能够理解自然语言指令&a…

2026/7/12 23:59:18 阅读更多 →
SEO 和 GEO 到底有什么区别?2026 年开发者该做哪个?

SEO 和 GEO 到底有什么区别?2026 年开发者该做哪个?

SEO 和 GEO 到底有什么区别?2026 年开发者该做哪个? 一句话回答:SEO 拼的是「被看见」,GEO 拼的是「被用上」。2026 年你两个都要做。 2026 年,用户不再翻搜索引擎的蓝色链接了。Google AI Overview 覆盖了 60% 以上的搜索查询,ChatGPT Search 月活过亿,Perplexity 搜索…

2026/7/12 23:57:18 阅读更多 →
5分钟掌握说话人日志技术:pyannote.audio终极实战指南

5分钟掌握说话人日志技术:pyannote.audio终极实战指南

5分钟掌握说话人日志技术:pyannote.audio终极实战指南 【免费下载链接】pyannote-audio Neural building blocks for speaker diarization: speech activity detection, speaker change detection, overlapped speech detection, speaker embedding 项目地址: ht…

2026/7/12 23:57:18 阅读更多 →
实体业态运营效率分析:装修门店投放自主与外包的人力模型对比

实体业态运营效率分析:装修门店投放自主与外包的人力模型对比

杭州装修门店没精力打理巨量本地推,找谁做更稳更省心?从人力成本与运营效率的模型来看,装修类重线下服务的业态,自主投放的人力投入产出比普遍偏低,专业团队承接的模式,更适配中小团队的运营需求。从能力模…

2026/7/12 23:57:18 阅读更多 →

日新闻

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/12 0:03:13 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/12 0:03:14 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/12 0:03:14 阅读更多 →

月新闻