首页 文章 精选 留言 我的

精选列表

搜索[继承],共9332篇文章
优秀的个人博客,低调大师

Rocky Linux 9.0 发布,CentOS 继承者

Rocky Linux 是一个由 Rocky Enterprise Software Foundation 开发的 Linux 发行版,当红帽公司宣布他们将停止开发 CentOS 后,作为回应 CentOS 的原创始人 Gregory Kurtzer 宣布将启动一个项目来实现 CentOS 的最初目标。其名字是为了向 CentOS 早期的联合创始人 Rocky McGaugh 致敬。 Rocky Linux 9.0 于今天正式发布,该版本基于 Red Hat Enterprise Linux 9,值得关注的更新内容包括: 桌面环境 Rocky Linux 9 将 GNOME 40 作为默认的桌面环境。重新设计的核心应用程序、设置和用户界面使 Rocky Linux 作为一个桌面操作系统使用起来比以往更容易。Activities 现在在工作、启动应用程序等方面提供了更好的体验。 其他针对桌面使用的显著改进包括: 通过右键单击并选择适当的选项,软件可以在独立显卡上运行 能够通过选择 "勿扰" 将通知静音,这将作为一个单独的按钮出现在通知中 每个屏幕可以使用不同的刷新率 Activities 程序允许你使用拖放的方法将应用程序图标分组到文件夹里 小数点显示比例 文件系统 XFS 现在支持 Direct Access(DAX)操作,允许直接访问可由字节寻址的持久性内存,帮助避免使用传统 block I/O 引发的延迟。NFS 引入了 "eager write" 挂载选项,以帮助减少延迟。 语言运行时和工具 Rocky Linux 9 拥有许多最新的运行时和编译器,包括 GCC 11.2.1、LLVM(13.0.1)、Rust(1.58.1)和 Go(1.17.1)。 Rocky Linux 9 有更新的开发者工具链版本,包括 GCC(11.2.1)、glibc(2.34)和 binutils(2.35)。GCC 编译器的新功能帮助开发者通过改进的调试选项更好地跟踪代码,并编写优化的代码以有效使用硬件。 Rocky Linux 9 扩展了 Rocky Linux 8 中的模块打包功能。Software Collections、Flatpaks 和 RPM 如今都被纳入了应用流,使开发者更容易使用他们喜欢的包。 Python 3.9 将在 Rocky Linux 9 的整个生命周期中得到支持,并带有许多新功能,包括新的字符串前缀和后缀方法、字典联合操作、高性能解析器、多进程改进。 Node.js 16 包括将 V8 引擎升级到 9.2 版本,新的 Timer Promises API、新的 Web streams API,以及对 npm 软件包管理器 7.20.3 版本的支持。Node.js 现在与 OpenSSL 3.0 兼容。 Ruby 3.0.3 提供了若干性能改进,以及错误和安全修复。重要的改进包括并发性、静态分析、带 case/in 表达式的模式匹配、重新设计的单行模式匹配和查找模式匹配。 Perl 5.32 提供了错误修复和改进,包括 Unicode 第 13 版、一个新的实验性 infix 操作符,以及更快的特征检查。 PHP 8.0 提供了错误修复和增强功能,包括使用结构化元数据语法,新命名的参数,以及提高了即时编译的性能。 安全性 默认情况下,通过 SSH 进行的 root 用户密码认证已被禁用。OpenSSH 的默认配置不允许 root 用户用密码登录,从而防止攻击者通过暴力密码攻击获得访问权。用户可以使用 SSH 密钥来登录远程系统,而不是使用 root 密码。 OpenSSL 3.0 增加了一个 Provider 的概念、一个新的版本管理方案,以及改进的 HTTPS。OpenSSL 3.0 的新 FIPS 模块可以防止非 FIPS 算法的使用,同时 FIPS 标志可以在内核中设置,而无需将 OpenSSL 切换到 FIPS 模式。 系统监控 Cockpit Web 控制台有一个改进的性能指标页面,有助于识别 CPU、内存、磁盘和网络资源占用高的原因。 下载 用户可以在下载页面下载适用于 x86_64、aarch64、ppc64le 和 s390x 架构的 Rocky Linux 9.0。 支持 Rocky Linux 9 将被支持到 2032 年 5 月 31 日 Rocky Linux 8 将继续被支持到 2029 年 5 月 31 日 更多详情可查看:https://rockylinux.org/news/rocky-linux-9-0-ga-release/

优秀的个人博客,低调大师

Java继承中的几道面试题

第一题: 1 /* 2 看程序写结果: 3 A:访问成员变量的原则:就近原则。 4 B:this和super的问题: 5 this 访问本类的成员 6 super 访问父类的成员(可以理解为的) 7 C:子类的所有构造方法执行前默认先执行父类的无参构造方法。 8 D:一个类的初始化过程: 9 成员变量进行初始化过程如下: 10 默认初始化 11 显示初始化 12 构造方法初始化 13 14 输出的结果是: 15 fu 16 zi 17 30 18 20 19 10 20 */ 21 class Fu { 22 public int num = 10; 23 public Fu() { 24 System.out.println("fu"); 25 } 26 } 27 28 class Zi extends Fu { 29 public int num = 20; 30 public Zi() { 31 System.out.println("zi"); 32 } 33 public void show() { 34 int num = 30; 35 System.out.println(num); //30 36 System.out.println(this.num); //20 37 System.out.println(super.num); //10 38 } 39 } 40 class ExtendsTest { 41 public static void main(String[] args) { 42 Zi z = new Zi(); 43 z.show(); 44 } 45 } 第二题: 1 /* 2 看程序写结果: 3 A:一个类的静态代码块,构造代码块,构造方法的执行流程: 4 静态代码块 > 构造代码块 > 构造方法 5 B:静态的内容是随着类的加载而加载, 6 即:静态代码块的内容会优先执行。 7 C:构造代码块 8 在类中方法外出现(即在类中的成员位置),可以把多个构造方法方法中相同的代码存放到一起,用于对对象进行初始化, 9 每次调用构造方法都执行,并且在构造方法前执行。 10 C:子类的所有的构造方法默认都会去访问父类的无参构造方法。 11 12 输出结果是: 13 静态代码块Fu 14 静态代码块Zi 15 构造代码块Fu 16 构造方法Fu 17 构造代码块Zi 18 构造方法Zi 19 */ 20 class Fu { 21 static { 22 System.out.println("静态代码块Fu"); 23 } 24 25 { 26 System.out.println("构造代码块Fu"); 27 } 28 29 public Fu() { 30 System.out.println("构造方法Fu"); 31 } 32 } 33 34 class Zi extends Fu { 35 static { 36 System.out.println("静态代码块Zi"); 37 } 38 39 { 40 System.out.println("构造代码块Zi"); 41 } 42 43 public Zi() { 44 System.out.println("构造方法Zi"); 45 } 46 } 47 48 class ExtendsTest2 { 49 public static void main(String[] args) { 50 Zi z = new Zi(); 51 } 52 } 第三题: 1 /* 2 看程序写结果: 3 A:成员变量的问题 4 int x = 10; //成员变量x是基本类型 5 Student s = new Student(); //成员变量s是引用类型 6 B:一个类的初始化过程 7 先进行成员变量的初始化: 8 默认初始化 9 显示初始化 10 构造方法初始化 11 C:子父类的初始化(分层初始化) 12 先进行父类初始化,然后进行子类初始化。 13 14 结果: 15 YXYZ 16 17 问题: 18 虽然子类中的构造方法默认有一个 super(); 19 但初始化的时候,不是按照那个顺序进行的。 20 而是按照分层初始化进行的。 21 super(); 它仅仅表示要先初始化父类数据,再初始化子类数据。 22 */ 23 24 class X { 25 //成员变量(引用类型) 26 Y b = new Y(); 27 //无参构造方法 28 X() { 29 System.out.print("X"); 30 } 31 } 32 33 class Y { 34 //无参构造方法 35 Y() { 36 System.out.print("Y"); 37 } 38 } 39 40 public class Z extends X { 41 //成员变量(引用类型) 42 Y y = new Y(); 43 //无参构造方法 44 Z() { 45 //super(); //它仅仅表示要先初始化父类数据,再初始化子类数据。 46 System.out.print("Z"); 47 } 48 public static void main(String[] args) { 49 new Z(); 50 } 51 } 我的GitHub地址: https://github.com/heizemingjun 我的博客园地址: http://www.cnblogs.com/chenmingjun 我的蚂蚁笔记博客地址: http://blog.leanote.com/chenmingjun Copyright ©2018 黑泽明军 【转载文章务必保留出处和署名,谢谢!】

优秀的个人博客,低调大师

Android开发实践:为什么要继承onMeasure()

首先,我们写一个自定义View,直接调用系统默认的onMeasure函数,看看会是怎样的现象: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 package com.titcktick.customview; import android.content.Context; import android.util.AttributeSet; import android.view.View; public class CustomView extends View{ public CustomView(Contextcontext){ super (context); } public CustomView(Contextcontext,AttributeSetattrs){ super (context,attrs); } @Override protected void onMeasure( int widthMeasureSpec, int heightMeasureSpec){ super .onMeasure(widthMeasureSpec,heightMeasureSpec); } } 1. 父控件使用match_parent,CustomView使用match_parent 1 2 3 4 5 6 7 8 9 10 11 12 13 <LinearLayoutxmlns:android= "http://schemas.android.com/apk/res/android" xmlns:tools= "http://schemas.android.com/tools" android:layout_width= "match_parent" android:layout_height= "match_parent" android:orientation= "vertical" > <com.titcktick.customview.CustomView android:layout_width= "match_parent" android:layout_height= "match_parent" android:layout_margin= "10dp" android:background= "@android:color/black" /> </LinearLayout> 这里加了10dp的margin并且把View的背景设置为了黑色,是为了方便辨别我们的CustomView,效果如下: 我们可以看到,默认情况下,如果父控件和CustomView都使用match_parent,则CustomView会充满父控件。 2. 父控件使用match_parent,CustomView使用wrap_content 把layout文件中,CustomView的layout_width/layout_height替换为wrap_content,你会发现,结果依然是充满父控件。 3. 父控件使用match_parent,CustomView使用固定的值 把layout文件中,CustomView的layout_width/layout_height替换为50dp,你会发现,CustomView的显示结果为50dpx50dp,如图所示: 4. 父控件使用固定的值,CustomView使用match_parent或者wrap_content 那么,如果把父控件的layout_width/layout_height替换为50dp,CustomView设置为match_parent或者wrap_content,你会发现,CustomView的显示结果也是为50dpx50 dp。 5 结论 如果自定义的CustomView采用默认的onMeasure函数,行为如下: (1) CustomView设置为 match_parent 或者 wrap_content 没有任何区别,其显示大小由父控件决定,它会填充满整个父控件的空间。 (2) CustomView设置为固定的值,则其显示大小为该设定的值。 如果你的自定义控件的大小计算就是跟系统默认的行为一致的话,那么你就不需要重写onMeasure函数了。 6. 怎样编写onMeasure函数 系统默认的onMeasure函数的行为就讨论到这,下面也说说怎样重写onMeasure函数,以及onMeasure函数的基本原理,关键部分在代码中以注释的形式给出了,仅供参考: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 package com.titcktick.customview; import android.content.Context; import android.util.AttributeSet; import android.view.View; public class CustomView extends View{ private static final int DEFAULT_VIEW_WIDTH= 100 ; private static final int DEFAULT_VIEW_HEIGHT= 100 ; public CustomView(Contextcontext){ super (context); } public CustomView(Contextcontext,AttributeSetattrs){ super (context,attrs); } @Override protected void onMeasure( int widthMeasureSpec, int heightMeasureSpec){ int width=measureDimension(DEFAULT_VIEW_WIDTH,widthMeasureSpec); int height=measureDimension(DEFAULT_VIEW_HEIGHT,heightMeasureSpec); setMeasuredDimension(width,height); } protected int measureDimension( int defaultSize, int measureSpec){ int result=defaultSize; int specMode=MeasureSpec.getMode(measureSpec); int specSize=MeasureSpec.getSize(measureSpec); //1.layout给出了确定的值,比如:100dp //2.layout使用的是match_parent,但父控件的size已经可以确定了,比如设置的是具体的值或者match_parent if (specMode==MeasureSpec.EXACTLY){ result=specSize; //建议:result直接使用确定值 } //1.layout使用的是wrap_content //2.layout使用的是match_parent,但父控件使用的是确定的值或者wrap_content else if (specMode==MeasureSpec.AT_MOST){ result=Math.min(defaultSize,specSize); //建议:result不能大于specSize } //UNSPECIFIED,没有任何限制,所以可以设置任何大小 //多半出现在自定义的父控件的情况下,期望由自控件自行决定大小 else { result=defaultSize; } return result; } } 这样重载了onMeasure函数之后,你会发现,当CustomView使用match_parent的时候,它会占满整个父控件,而当CustomView使用wrap_content的时候,它的大小则是代码中定义的默认大小100x100像素。当然,你也可以根据自己的需求改写measureDimension()的实现。 本文转自 Jhuster 51CTO博客,原文链接:http://blog.51cto.com/ticktick/1540134,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android TahHost的使用2 不继承TabActivity

Layout的设计,其实有我这里直接拖了一个TabHost控件,然后在每个Tab中放一个Button。 文件名为activity_tab_host.xml. <RelativeLayout xmlns:android= "http://schemas.android.com/apk/res/android" xmlns:tools= "http://schemas.android.com/tools" android:layout_width= "match_parent" android:layout_height= "match_parent" android:paddingBottom= "@dimen/activity_vertical_margin" android:paddingLeft= "@dimen/activity_horizontal_margin" android:paddingRight= "@dimen/activity_horizontal_margin" android:paddingTop= "@dimen/activity_vertical_margin" tools:context= ".TabHostActivity" > <TabHost android:id= "@+id/tabhost" android:layout_width= "match_parent" android:layout_height= "match_parent" android:layout_alignParentLeft= "true" android:layout_alignParentTop= "true" > <LinearLayout android:layout_width= "match_parent" android:layout_height= "match_parent" android:orientation= "vertical" > <TabWidget android:id= "@android:id/tabs" android:layout_width= "match_parent" android:layout_height= "wrap_content" > </TabWidget> <FrameLayout android:id= "@android:id/tabcontent" android:layout_width= "match_parent" android:layout_height= "match_parent" > <LinearLayout android:id= "@+id/tab1" android:layout_width= "match_parent" android:layout_height= "match_parent" > <Button android:id= "@+id/button1" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:text= "Fist Tab Content" /> </LinearLayout> <LinearLayout android:id= "@+id/tab2" android:layout_width= "match_parent" android:layout_height= "match_parent" > <Button android:id= "@+id/button1" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:text= "Second Tab Content" /> </LinearLayout> <LinearLayout android:id= "@+id/tab3" android:layout_width= "match_parent" android:layout_height= "match_parent" > <Button android:id= "@+id/button1" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:text= "Third Tab Content" /> </LinearLayout> </FrameLayout> </LinearLayout> </TabHost> </RelativeLayout> 需要注意的是TabHost必须包含一个 TabWidget和一个FrameLayout。而且TabWidget的id属性必须为 @android:id/tabs,FrameLayout的id属性必须为 @android:id/tabcontent。 下面TabHostActivity.java文件为: public class TabHostActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tab_host); TabHost tabHost = (TabHost)findViewById(R.id.tabhost); tabHost.setup(); tabHost.addTab(tabHost.newTabSpec( "tab1" ) .setIndicator( "First Tab" ) .setContent(R.id.tab1)); tabHost.addTab(tabHost.newTabSpec( "tab2" ) .setIndicator( "Second Tab" ) .setContent(R.id.tab2)); tabHost.addTab(tabHost.newTabSpec( "tab3" ) .setIndicator( "Third Tab" ) .setContent(R.id.tab3)); } } 效果图: 本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2013/03/16/2963638.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

C++和Java的继承——构造函数问题

C++ 【1】声明子类变量 B b;a.如果子类没有显示调用父类含参数的构造函数,那么在子类实例化过程中, ---顺序: 父类无参(默认)构造函数-->子类被调用的构造函数。 b.如果子类显示调用了父类的含参构造函数,那么在子类实例化过程中, ---顺序: 父类有参构造函数-->子类被调用的构造函数。 实例: class A { public: A() { printf("A(void) \n"); }//父类 默认构造函数 A(int d) { printf("A %d\n", d); }//父类 有参构造函数 ~A() { printf(" ~A \n"); }//父类 析构函数 }; class B : public A { public: B(){ printf("B(void) \n");//子类 默认构造函数 } B(int x) : A(x) { printf("B \n"); //子类 有参构造函数 } ~B() { printf("~B \n"); } //子类 析构函数 }; int main(int argc, char* argv[]) { B c; B b(8); // 此处也自动调用了A的同签名的构造函数 return 0; } 输出结果: B c;//创建c这个实例的时候 先调用A() 然后B() B b(8);//先调用A(int x) 然后B(int x) 销毁的时候 后入先销毁 实例: class A { public: virtual void foo() { cout << "A's foo()" << endl; bar(); } virtual void bar() { cout << "A's bar()" << endl; } }; class B: public A { public: void foo() { cout << "B's foo()" << endl; A::foo(); } void bar() { cout << "B's bar()" << endl; } }; int main() { B bobj; A *aptr = &bobj; aptr->foo(); A aobj = *aptr; //转化为A类对象 aobj.foo(); } 输出结果: B bobj; A *aptr = &bobj; aptr->foo(); //输出B's foo() A's foo() B's bar() //因为aptr指向的是B类对象 先调用B类foo() //而A::foo() 调用A类foo()和foo()中的bar() A aobj = *aptr; //转化为A类对象 aobj.foo();//都是A类方法 // Java 【1】父类和子类同时都有有参的构造函数和无参构造函数 Java中的子类初始化时初值为空。调用顺序为先调用父类无参构造函数,然后调用子类无参构造函数。 java中的子类初始化时初值不为空。调用顺序为先调用父类无参构造函数,然后调用子类有参构造函数。输出先调用父类再调用子类 输出调用父类无参 子类带参 【2】父类和子类无无参构造函数只有有参构造函数 java中的子类初始化时初值不为空。调用顺序为先调用父类有参构造函数(必须在子类有参构造函数中加显示super),然后调用子类有参构造函数。输出结果 调用函数问题 定义一个父类定义子类为 执行命令输出:静态方法(随着类的加载而加载)非静态方法和构造函数随着对象静态>非静态>构造同为静态加载顺序按先后,静态方法调用才执行 只执行输出结果先加载父类的静态 然后加载本身静态

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册