- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
类的5大成分(成员变量、成员方法、构造器、代码块、内部类)之一 。
类中的类 。
当一个事物的内部,还有一个部分需要一个完整的结构进行描述时.
1、静态内部类 。
是什么?有static修饰,属于外部类本身.
特点:只是位置在类里面。类有的成分它都有.
创建对象:
外部类. 内部类名 对象名 = new 外部类名. 内部类构造器;
拓展 。
1、静态内部类可以直接访问外部类的静态成员吗? 可以的 。
2、静态内部类中是否可以直接访问外部类的实例成员? 不可以的 。
2、成员内部类(实例内部类) 。
是什么?
无static修饰,属于外部类的对象的.
特点:JDK 16中类有的成分,它都有.
创建对象 :
外部类.内部类 对象名 = new 外部类构造器.new 内部类构造器;
拓展 。
1、成员内部类中是否可以直接访问外部类的静态成员? 可以 。
2、成员内部类的实例方法中是否可以直接访问外部类的实例成员? 可以 。
3、局部内部类 。
定义在方法,代码块,构造器中,执行代码处的类。鸡肋语法! 。
4、匿名内部类(重点) 。
使用匿名内部类的好处:
方便构建子类对象,最终目的:简化代码 。
格式:
new 类名|接口|抽象类(){
方法重写;
}
特点:
匿名内部类是一个没有名字的局部内部类,本身也是一个所谓的子类对象.
匿名内部类产生的对象类型,相当于是当前new的那个的类型的子类类型.
是什么? 是一种特殊类型。 枚举的特征:
枚举类都是继承了枚举类型:java.lang.Enum 。
枚举都是最终类,不可以被继承.
构造器都是私有的,枚举对外不能创建对象.
枚举类的第一行默认都是罗列枚举对象的名称的.
枚举类相当于是多例模式.
定义类、接口、方法时,同时声明了一个或者多个类型变量(如: <E> ) ,称为泛型类、泛型接口,泛型方法、它们统称为泛型.
作用 。
泛型提供了在编译阶段约束所能操作的数据类型,并自动进行检查的能力!这样可以避免强制类型转换,及其可能出现的异常.
定义类的同时定义了泛型的类就是泛型类 。
泛型类的格式 。
修饰符 class 类名<类型变量,类型变量,…> {
}
作用 。
在编译阶段可以指定能操作的数据的类型 。
原理 。
把出现泛型变量的地方全部替换成传输的真实数据类型.
使用了泛型定义的接口就是泛型接口 。
格式 。
修饰符 interface 接口名称<泛型变量> {
}
作用 。
泛型接口可以让实现类选择当前功能需要操作的数据类型 。
原理 。
实现类可以在实现接口的时候传入自己操作的数据类型,这样重写的方法都将是针对于该类型的操作.
定义方法时同时定义了泛型的方法就是泛型方法 。
格式 。
修饰符 <类型变量,类型变量,…> 返回值类型 方法名(形参列表) {
}
作用 。
方法中可以使用泛型接收一切实际类型的参数,方法更具备通用性.
原理 。
把出现泛型变量的地方全部替换成传输的真实数据类型.
? 可以在“使用泛型”的时候代表一切类型.
E T K V 是在定义泛型的时候使用的.
泛型的上下限 。
? extends Car: ?必须是Car或者其子类 泛型上限 。
? super Car : ?必须是Car或者其父类 泛型下限 。
泛型是工作在编译阶段的,一旦程序编译成class文件,class文件中就不存在泛型了,这就是泛型擦除.
泛型不支持基本数据类型,只能支持对象类型(引用数据类型).
API全称是应用程序编程接口,是Java写好的程序,程序员可以直接调用.
Object是祖宗类,它里面的方法,一切子类对象都可以使用.
public String toString() 。
默认是返回当前对象的地址信息.
Student s = new Student("张三",'女', 23),
System.out.println(s.toString()),
返回对象地址 。
System.out.println(s),
直接输出对象名,默认是调用toString方法的 。
toString存在的意义:
默认返回对象的地址其实是没有意义的 。
真实存在的意义是被子类重写,以便返回子类对象的内容.
public boolean equals(Object o ) 。
默认是比较2个对象的地址是否一样,返回true 或者false 。
equals存在的意义 。
默认比较对象的地址其实是没有意义的,因为== 号可以更简单的完成 。
存在的的真实意义是被子类重写,以便比较对象的内容.
protected Object clone() 。
当某个对象调用这个方法时,这个方法会复制一个一模一样的新对象返回.
分类:
浅克隆:拷贝出的新对象,与原对象中的数据一模一样(引用类型拷贝的只是地址) 。
深克隆:
对象中基本类型的数据直接拷贝.
对象中的字符串数据拷贝的还是地址.
对象中还包含的其他对象,不会拷贝地址,会创建新对象.
Objects是一个工具类,提供了更安全的方式比较2个对象.
Student s = null,
s.equals(s2); 空指针异常 。
Objects.equals(s, s2); 返回false 。
Objects常见方法:
方法名 | 说明 |
---|---|
public static boolean equals(Object a, Object b) | 比较两个对象的,底层会先进行非空判断,从而可以避免空指针异常。再进行equals比较 |
public static boolean isNull(Object obj) | 判断变量是否为null ,为null返回true ,反之返回false |
其实就是8种基本数据类型对应的引用类型.
作用:实现一切皆对象 。
基本数据类型 | 引用数据类型 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
char | Character |
float | Float |
double | Double |
boolean | Boolean |
包装类其实可以随便用的:int integer 。
自动装箱 。
基本类型的数据可以赋值其给包装类 。
自动拆箱 。
包装类的数据赋值给基本数据类型 。
1、基本类型变成字符串 。
// 1、调用包装类继承自Object的toString方法 String rs1 = it6.toString(); // "23" System.out.println(rs1 + 1); // 231 // 2、调用静态方法: public static String toString(int i) String rs2 = Integer.toString(it6); // "23" System.out.println(rs2 + 1 ); // 3、直接加 “” String rs3 = it6 + ""; // "23" System.out.println(rs3 + 1);
。
2、把字符串变成基本数据类型( 重点 ) 。
String age = "23" ; // int ageInt = Integer.parseInt(age); int ageInt = Integer.valueOf(age); System.out.println(ageInt + 1 ); String price = "98.5" ; // double priceDb = Double.parseDouble(price); double priceDb = Double.valueOf(price); System.out.println(priceDb + 0.5);
。
最后此篇关于面向对象进阶第三天的文章就讲到这里了,如果你想了解更多关于面向对象进阶第三天的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在创建一个多区域 AlwaysOn Sql Availability 组。我在东部有 2 个虚拟机,在西部有 1 个虚拟机。我需要使用面向公众的负载平衡器对这些进行负载平衡。是否可以使用存在于不同
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我是 Smalltalk 技术的新手。我的编程经验是使用 C 和 C++。我想了解smalltalk的设计方法论。谁能推荐一些用smalltalk开发的简单的实时应用程序,可以帮助像我这样的初学者探索
现在我已经对 web2py 比较熟悉了,我想试试 Django。 主要区别是什么? 考虑到 web2py 知识,最有效的入门方法是什么? (一定有一些python应用框架的知识,不是吗?) 编辑 另外
我之前发过一个问题,Moving away from VSS ,其中我向使用 VSS 的 Delphi 开发人员询问了最佳的 VCS 控件。大多数开发人员似乎将 svn 与 TortoiseSVN 一
引用this question ,收集对 Delphi 初学者真正有帮助的网站链接可能会很好。 第一个答案指向Delphi Basics ,这是一个非常好的网站。 但一定还有更多。 所以:请为这个社区
我已经构建了一个 saas 产品,其中 Angular 4 与 golang Rest api 集成,并将构建上传到了 aws ec2 实例上。我的项目是一个基于 Multi-Tenancy 的应用程
我是 .NET 开发人员,在此之前使用过 VB6。我已经非常熟悉这些环境,并在垃圾收集语言的上下文中工作。但是,我现在希望通过 native C++ 增强我的技能,但发现自己有点不知所措。具有讽刺意味
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
由于我在数学方面没有任何出色的技能,所以我问您是否存在我应该在未来可能会改变的类(class)中使用的算法。 考虑以下场景: “角色”类具有以下字段: private boolean admin; p
我有许多面向“列”的 csv 文件,我需要对其进行预处理才能最终索引它们。 这是面向时间的数据,每个“设备”都有大量的列(最多 128 列),例如: LDEV_XXXXXX.csv
我想就重构技巧的最佳资源展开讨论,着眼于前端 JavaScript 重构。 一个我尊重其意见的 friend 建议这个 book ,尽管它使用 Java 中的示例。我明白 OO 重构的原则应该翻译成另
我不明白如何使用 Jquery/javascript 处理对象。 以及如何创建私有(private)方法/变量?我在论坛上看到关闭,但我尝试过但没有用。以及如何查看方法/变量是否是私有(private
我已经使用 MATLAB 多年并且非常熟练。我习惯了 MATLAB 调试,您可以在其中跳过行并查看变量及其变化方式,这就是我学习编码的方式。我现在正在研究使用 FORTRAN、C++ 和 Python
我正在学习如何实现“单一 Activity - 多个 fragment ”架构。据我所知,这是如今很普遍的方法,你可以找到很多关于这个主题的文章。例如这个 http://vinsol.com/blog
目前是否有任何简单的方法可以在 Apache Tomcat Servlet 容器前面设置 YAWS Web 服务器,类似于流行的 Apache httpd + Tomcat 设置? 最佳答案 我不相信
我是一个相当有能力的 Ruby 脚本编写者/程序员,但一直感到要扩展到 C++ 的压力。我没能找到任何与“C++ for Ruby Programmers”相关的网站。 This site Pytho
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我在表上有一个名为 cart_product_fti 的全文索引 每当我使用它时,我都必须准确列出索引中的所有字段: MATCH (foo,bar,etc) 我的想法是,如果稍后我决定向索引添加/删除
我是一名优秀的程序员,十分优秀!