GVKun编程网logo

ClassLoader详解,更新1 /java(java中classloader使用)

1

如果您对ClassLoader详解,更新1/java和java中classloader使用感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解ClassLoader详解,更新1/java的各种细节,

如果您对ClassLoader详解,更新1 /javajava中classloader使用感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解ClassLoader详解,更新1 /java的各种细节,并对java中classloader使用进行深入的分析,此外还有关于Android ClassLoader详解、Centos 7 修改系统时间 NTP & date -s 更新1、ClassLoader详解、Flurry iOS测试推送通知失败,并显示UnrecognizedDeviceId 更新1的实用技巧。

本文目录一览:

ClassLoader详解,更新1 /java(java中classloader使用)

ClassLoader详解,更新1 /java(java中classloader使用)

仔细下面这段简单的代码,会输出什么?

package core.java;
class SingleTon{
    private static SingleTon instance = new SingleTon();
    public static int num1;
    public static int num2 = 0;
    
    private SingleTon(){
        num1++;
        num2++;
    }
    
    public static SingleTon getInstance(){
        return instance;
    }
}

public class ClassLoaderTest {
    public static void main(String[] args) {
        SingleTon single = SingleTon.getInstance();
        System.out.println("num1: "+single.num1);
        System.out.println("num1: "+single.num2);
    }
}

 

 

运行一下:

这里涉及到类的加载和初始化过程:

1、类在被主动调用时,触发类的加载,jvm查找并加载类的二进制数据到内存

2、jvm检查class文件的正确性,因为防止恶意手动生成的class文件

3、为类的静态变量分配内存,并初始化默认值。

这一步是关键,此处的初始化默认值并非赋值,比如此时 instance  的值是null,num1是0,num2是0。而此时num2的0 不是‘=’赋值的0

4、把类的符号引用转换为直接引用。即:把引用变成指针,这是java中的指针,java在应用开发过程中是没有指针的,但是jvm里是有的。

5、初始化

  a) instance = new SingleTon () 调用构造方法,num1 和num2 的值被赋值为1

  b) num1用户没有给默认值,维持1;

  c) num2用户给了默认值0,将0赋给了num2;

 

 

(未完待续)

更新1:2018-01-01,举个例子

 

Android ClassLoader详解

Android ClassLoader详解

我们知道不管是插件化还是组件化,都是基于系统的ClassLoader来设计的。只不过Android平台上虚拟机运行的是Dex字节码,一种对class文件优化的产物,传统Class文件是一个Java源码文件会生成一个.class文件,而Android是把所有Class文件进行合并,优化,然后生成一个最终的class.dex,目的是把不同class文件重复的东西只需保留一份,如果我们的Android应用不进行分dex处理,最后一个应用的apk只会有一个dex文件。

Android平台的ClassLoader


Android中的ClassLoader

Android中类加载器有BootClassLoader,URLClassLoader,
PathClassLoader,DexClassLoader,BaseDexClassLoader,等都最终继承自java.lang.ClassLoader。

  • ClassLoader

    java.lang.ClassLoader是所有ClassLoader的最终父类。构造方法主要以下两种
    1.传入一个父类构造器

本文同步分享在 博客“xiangzhihong8”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

Centos 7 修改系统时间 NTP & date -s 更新1

Centos 7 修改系统时间 NTP & date -s 更新1

目标主机:centos7

提供了2种方法供参考


1、利用date -s命令

在console界面输入会立即修改系统时间

date-s"2016-9-1414:11:48"&&hwclock--systohc

会立即修改系统时间

2、利用ntp服务器自动同步

查询是否已安装ntp:

rpm-qa|grepntp

安装命令:

yuminstall-yntp

或者手动安装:(centos7,版本随时更新请访问package目录ctrl+f查找)

wgethttp://mirrors.163.com/centos/7/os/x86_64/Packages/ntp-4.2.6p5-22.el7.centos.x86_64.rpm
wgethttp://mirrors.163.com/centos/7/os/x86_64/Packages/ntpdate-4.2.6p5-22.el7.centos.x86_64.rpm
wgethttp://mirrors.163.com/centos/7/os/x86_64/Packages/autogen-libopts-5.18-5.el7.x86_64.rpm

在目录内执行

rpm-ivh*.rpm

2、设置ntp端口

vi/etc/ntp.conf

server字段添加

servercn.ntp.org.cnprefer

3、启动ntp服务

servicentpdstart

如此系统时间就会自动同步;


利用date命令查看更新后的时间


一次性安装命令:

yuminstall-yntp\
&&sed-i"21iservercn.ntp.org.cnprefer"/etc/ntp.conf\
&&cat/etc/ntp.conf\
&&servicentpdstart\
&&date\
&&sleep5\
&&date


(完)

ClassLoader详解

ClassLoader详解

阅读源码过程中发现了一些ClassLoader的影子,以前经常用它来加载资源(就是读配置文件),但是没有详细的看过它,这次详细了解一下。

ClassLoader详解

ClassLoader是什么

一句话总结:加载文件的类(哈哈,废话了)。

ClassLoader能干什么

返回stream,URl,加载定义注册class。

ClassLoader的分类

启动类加载器(Bootstrap ClassLoader):

            这个类加载的是核心的类库,及JDK本身的代码,是无法被调用的。

            (ClassLoader接口中有一个方法getBootstrapResources,看名字应该是可以加载修改后JDK代码的,有兴趣的同学可以试试)

扩展类加载器(Extendsion ClassLoader):

            这个类加载的是加载\lib\ext目录下的类库,开发者可以使用。

应用程序类加载器(Application ClassLoader):

            这个类加载的是CLASSPATH的类库,开发者可以使用。

三个类的关系:启动类加载器----(父子)---->扩展类加载器----(父子)---->应用程序类加载器

ClassLoader怎么使用

这三个类只能看到使用,不能new出来。下面通过自己的class来使用它

public class Test {
        public static void main(String[] args) throws Exception {
                 ClassLoader cl = Test.class.getClassLoader();
                 System.out.println(cl);
                 System.out.println(cl.getParent());
                 System.out.println(cl.getParent().getParent());
       }
}

ClassLoader运行详解

    classLoader进行加载Class的时候,首先判断一下父类是不是为空,如果不为空,则使用父类的方法进行加载。

       这样做的目的也容易理解,如果哪一天解析class的方式变化了,只需要将父类的方法修改一下就好了,子类什么都不要做。

       这种方法也叫双亲委派(设计模式之一)。

 

这片文章其实只是做一个科普,只需要知道classloader是干什么的就行。

个人理解:编程就像是说话一样,大家把话说好,理解方言就行。至于声音是发出来的,只需要知道是由声带震动的就行,具体的细节交给医生吧。

 

 

参考文章:https://www.jianshu.com/p/554c138ca0f5

 

Flurry iOS测试推送通知失败,并显示UnrecognizedDeviceId 更新1

Flurry iOS测试推送通知失败,并显示UnrecognizedDeviceId 更新1

如何解决Flurry iOS测试推送通知失败,并显示UnrecognizedDeviceId 更新1

尝试在iOS上集成Flurry Push Notification服务。 在测试集成时,我得到了

无法发送测试推送。原因:无法识别的设备ID。请参阅故障排除文档。

我正在使用IDFA / IDFV

我已经验证的内容:

  • Apple Push SandBox SSL证书有效
  • 我使用的是正确的FLurry API密钥
  • 用户已授予所有通知权限
  • 查看了Test Push Troubleshooting和Unrecognizeddeviceid。那里没什么用!
  • 确保IDFA / IDFV是正确的

我已经按照以下指南进行了完整的设置:

  1. Flurry Push for iOS
  2. Push Authorization

最后一步涉及Test Push。

这是我用来在我的应用程序中注册Flurry的代码


#include "Flurry.h"
#include "FlurryMessaging.h"

:
:
:
- (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  [FlurryMessaging setAutoIntegrationForMessaging];
  [FlurryMessaging setMessagingDelegate:self];

  FlurrySessionBuilder* builder = [[FlurrySessionBuilder alloc] withIncludeBackgroundSessionsInMetrics:YES];
  [builder withLogLevel:FlurryLogLevelAll];
  [Flurry startSession:@"XXXXXX" withOptions:launchOptions withSessionBuilder:builder];
}

// To make sure iOS is registering notifications I added this override and it is being called with non-null devicetoken
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDevicetoken:(NSData *)devicetoken
{
  Nsstring* tokenString = [devicetoken base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];

  NSLog(@"The generated device token string is : %@",tokenString);
}

设备信息: iPhone7 Plus iOS:13.3.1

任何帮助表示赞赏!

更新1

尝试在Flurry中设置devicetoken,但仍然是相同的错误。

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDevicetoken:(NSData *)devicetoken
{
  [FlurryMessaging setDevicetoken:devicetoken];
}

今天关于ClassLoader详解,更新1 /javajava中classloader使用的分享就到这里,希望大家有所收获,若想了解更多关于Android ClassLoader详解、Centos 7 修改系统时间 NTP & date -s 更新1、ClassLoader详解、Flurry iOS测试推送通知失败,并显示UnrecognizedDeviceId 更新1等相关知识,可以在本站进行查询。

本文标签: