Java中泛型 Class<T>、T与Class<?>、 Object类和Class类、 object.getClass() 和 Object.class

 

From:Java中泛型 Class<T>、T 与 Class<?>、 Object类 Class类object.getClass()Object.class

        :https://www.cnblogs.com/zhaoyanhaoBlog/p/9362267.html

Class<T>和 Class<?>类型 有什么区别:https://www.jianshu.com/p/fecafcc83fba

 

 

Java中泛型

 

Java中泛型 Class<T>、T 与 Class<?>、 Object类 Class类object.getClass()Object.class

 

 

一. 区别

 

  • 单独的 T  代表一个类型(表现形式是一个类名而已)
  • Class<T>  代表这个类型所对应的类(又可以称做类实例、类类型、字节码文件)
  • Class<?>  表示类型不确定的类
Class<T> 表示 T类型 的 字节码文件,意思是:Class<T> 相当于Class<T> c=T.class,T  t  new T() ; 
或者 Class<T> c= t.getClass(); 通过以上可以获取类名为 c.getName();

解释:Class<T> ct=T.class,T  t  new T() ; 与 Class c=T.class,T  t  new T() ; 

ct 泛型指的是 ct 只能是 T 的字节码,而 c 可以是任何类的字节码。所以用 ct 用法更好

平时看 java源代码的时候,如果碰到了泛型,像 ?、T 、K 、V、 E 这些是经常出现的,但是不知道代表什么意思,今天特地整理下:

 E    ---  Element (在集合中使用,因为集合中存放的是元素)T    ---  Type(表示 Java 类型)K V  ---  分别代表 java 键值中的 Key Value。N    ---  Number(数值类型)?    ---  表示 不确定的 Java类型

举例说明:

Set<T>  表示 集合里 是  T类的实例 
List<E> 表示 集合里 是  E类的实例 
List<?> 表示 集合里的对象类型不确定,未指定 List 同 List<?> 是一样的。 

泛型的作用: 

1、用泛型: List<T> list = new ArrayList<T>();  T t=list.get(0);  2、不用泛型: List  list = new ArrayList();  T t = (T)list.get(0); 

 

 

二、如何创建一个 Class<T> 类型实例

 

      就像使用非泛型代码一样,有两种方式:

  • 调用方法 Class.forName() 
  • 或者使用类常量 X.class。

Class.forName() 被定义为返 回 Class<?>。另一方面,类常量 X.class 被定义为具有类型 Class<X>,所 以 String.class 是 Class<String> 类型的。

 

 

三、方法中为什么需要 <T> T 修饰呢

 

泛型的声明,必须在方法的修饰符(public,static,final,abstract等)之后,返回值声明之前。

public static <T> T request2Bean(HttpServletRequest request,Class<T> clazz){}

其中第一个 <T> 是与传入的参数 Class<T> 相对应的,相当于返回值的一个泛型,后面的 T 是返回值类型,代表方法必须返回T类型的(由传入的 Class<T> 决定)

 

 

四、Object类 Class类

 

Object类Class类 没有直接的关系。

  • Object类 是一切 Java类的父类,对于普通的 java类,即便不声明,也是默认继承了 Object 类。典型的,可以使用 Object 类中的toString()方法。
  • Class类 是用于 Java反射机制的一切 java类,都有一个对应的 Class对象,他是一个final类。Class 类的实例表示,正在运行的 Java 应用程序中的类和接口。 

平时看代码时,总是碰到这些即熟悉又陌生的名字,每天都与他们相见,但见面后又似曾没有任何的交集,所以今天我就来认识下这两个江湖侠客的背景:

 

Object 泛型 通配符 区别?

Object 是所有类的根类,是具体的一个类,使用的时候可能需要类型强制转换的,但是用通配符 ?、T 、K 、V、 E 等这些的话,在实际用之前类型就已经确定了,不需要强制转换。

  • 也就是说,如果一个方法能知道返回的是哪种类型(父类),就用 T,如果完全不知道的就用 ? 。。。用 T 得到的对象就不需要类型转换了,而用 ? 的就必需用强转了。

  • 第一种是固定的一种泛型,第二种是只要是Object类的子类都可以,换言之,任何类都可以,因为Object是>所有类的根基类,固定的泛型指类型是固定的,比如:Interge, String 就是 <T extends Collection>

<? extends Collection> 这里 代表一个未知的类型,但是,这个未知的类型实际上是 Collection 的一个子类,Collection 是这个通配符的上限。

举个例子:class Test <T extends Collection> { }

  • <T extends Collection> 中限定了构造此类实例的时候,T 是一个确定类型(具体类型),这个类型实现了Collection接口,但是实现 Collection 接口的类很多很多,如果针对每一种都要写出具体的子类类型,那也太麻烦了,干脆还不如用 Object 通用一下。
  • <? extends Collection> 中的 ? 表示是一个未知类型,是一个通配符泛型,这个类型是实现 Collection 接口即可。

************************ 上面讲的是什么鬼,当你知道引入通配符泛型的由来之后 ************************

当引入泛型之后,遇到这种情况,参数怎么写都不适合,总有2个方法不适用,为了给泛型类写一个通用的方法,这时候就需要引入了 ?通配符的概念。

示例代码:

public class Demo<T extends Animal> {private T ob;public T getOb() {return ob;}public void setOb(T ob) {this.ob = ob;}public Demo(T ob) {super();this.ob = ob;}public void print() {System.out.println("T的类型是:" + ob.getClass().getName());}
}

 

CLASS

    在Java中,每个 class 都有一个相应的 Class 对象也就是说,当我们编写一个类,编译完成后,在生成的.class文件中,就会产生一个 Class 对象,用于表示这个类的类型信息

 

获取 Class 实例的三种方式:

  • (1) :利用 对象调用 getClass()方法 获取该对象的Class实例
  • (2) :使用 Class类的静态方法 forName(),用类的名字获取一个Class实例(staticClass forName(String className) Returns the Classobject associated with the class or interface with the given stringname. );
  • (3) :运用 .class 的方式来获取 Class 实例,对于基本数据类型的封装类,还可以采用 .TYPE 来获取相对应的基本数据类型的Class实例

        在 newInstance() 调用类中缺省的构造方法 ObjectnewInstance()(可在不知该类的名字的时候,创建这个类的实例) Creates a new instance of the class represented by this Classobject.

        在运行期间,如果要产生某个类的对象,Java虚拟机(JVM)会检查该类型的Class对象是否已被加载。如果没有被加载,JVM会根据类的名称找到 .class 文件并加载它。一旦某个类型的Class对象已被加载到内存,就可以用它来产生该类型的所有对象

  

  Class对象的生成方式如下:

    1. Class.forName("类名字符串") (注意:类名字符串必须是全称,包名+类名)。
    2. 类名.class  ( Object.class )。
    3. 实例对象.getClass() (object.getClass() )。

 

 

五、Object.class 和 instanceObj.getClass() 的区别

 

两者的区别如下: 

  • 类名.class 叫做 "类字面量",因 class 是关键字, 所以 类名.class 编译时确定。
  • getclass() 是某个具体的方法来调用,是运行时根据实际实例确定,getClass()是动态而且是 final 的。 

例如: 

  • String.class 是能对类名的引用取得在内存中该类型class对象的引用,
  • 而 new String().getClass() 是通过实例对象取得在内存中该实际类型class对象的引用。 

 

 

六、示例代码

 

示例 1

 ReflectClass.java

package com.android.peter.reflectdemo;import android.content.Context;
import android.os.IBinder;
import android.util.Log;import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;/*** Created by peter on 2018/8/22.*/public class ReflectClass {private final static String TAG = "peter.log.ReflectClass";// 创建对象public static void reflectNewInstance() {try {Class<?> classBook = Class.forName("com.android.peter.reflectdemo.Book");Object objectBook = classBook.newInstance();Book book = (Book) objectBook;book.setName("Android进阶之光");book.setAuthor("刘望舒");Log.d(TAG,"reflectNewInstance book = " + book.toString());} catch (Exception ex) {ex.printStackTrace();}}// 反射私有的构造方法public static void reflectPrivateConstructor() {try {Class<?> classBook = Class.forName("com.android.peter.reflectdemo.Book");Constructor<?> declaredConstructorBook = classBook.getDeclaredConstructor(String.class,String.class);declaredConstructorBook.setAccessible(true);Object objectBook = declaredConstructorBook.newInstance("Android开发艺术探索","任玉刚");Book book = (Book) objectBook;Log.d(TAG,"reflectPrivateConstructor book = " + book.toString());} catch (Exception ex) {ex.printStackTrace();}}// 反射私有属性public static void reflectPrivateField() {try {Class<?> classBook = Class.forName("com.android.peter.reflectdemo.Book");Object objectBook = classBook.newInstance();Field fieldTag = classBook.getDeclaredField("TAG");fieldTag.setAccessible(true);String tag = (String) fieldTag.get(objectBook);Log.d(TAG,"reflectPrivateField tag = " + tag);} catch (Exception ex) {ex.printStackTrace();}}// 反射私有方法public static void reflectPrivateMethod() {try {Class<?> classBook = Class.forName("com.android.peter.reflectdemo.Book");Method methodBook = classBook.getDeclaredMethod("declaredMethod",int.class);methodBook.setAccessible(true);Object objectBook = classBook.newInstance();String string = (String) methodBook.invoke(objectBook,0);Log.d(TAG,"reflectPrivateMethod string = " + string);} catch (Exception ex) {ex.printStackTrace();}}// 获得系统Zenmode值public static int getZenMode() {int zenMode = -1;try {Class<?> cServiceManager = Class.forName("android.os.ServiceManager");Method mGetService = cServiceManager.getMethod("getService", String.class);Object oNotificationManagerService = mGetService.invoke(null, Context.NOTIFICATION_SERVICE);Class<?> cINotificationManagerStub = Class.forName("android.app.INotificationManager$Stub");Method mAsInterface = cINotificationManagerStub.getMethod("asInterface",IBinder.class);Object oINotificationManager = mAsInterface.invoke(null,oNotificationManagerService);Method mGetZenMode = cINotificationManagerStub.getMethod("getZenMode");zenMode = (int) mGetZenMode.invoke(oINotificationManager);} catch (Exception ex) {ex.printStackTrace();}return zenMode;}// 关闭手机public static void shutDown() {try {Class<?> cServiceManager = Class.forName("android.os.ServiceManager");Method mGetService = cServiceManager.getMethod("getService",String.class);Object oPowerManagerService = mGetService.invoke(null,Context.POWER_SERVICE);Class<?> cIPowerManagerStub = Class.forName("android.os.IPowerManager$Stub");Method mShutdown = cIPowerManagerStub.getMethod("shutdown",boolean.class,String.class,boolean.class);Method mAsInterface = cIPowerManagerStub.getMethod("asInterface",IBinder.class);Object oIPowerManager = mAsInterface.invoke(null,oPowerManagerService);mShutdown.invoke(oIPowerManager,true,null,true);} catch (Exception ex) {ex.printStackTrace();}}public static void shutdownOrReboot(final boolean shutdown, final boolean confirm) {try {Class<?> ServiceManager = Class.forName("android.os.ServiceManager");// 获得ServiceManager的getService方法Method getService = ServiceManager.getMethod("getService", java.lang.String.class);// 调用getService获取RemoteServiceObject oRemoteService = getService.invoke(null, Context.POWER_SERVICE);// 获得IPowerManager.Stub类Class<?> cStub = Class.forName("android.os.IPowerManager$Stub");// 获得asInterface方法Method asInterface = cStub.getMethod("asInterface", android.os.IBinder.class);// 调用asInterface方法获取IPowerManager对象Object oIPowerManager = asInterface.invoke(null, oRemoteService);if (shutdown) {// 获得shutdown()方法Method shutdownMethod = oIPowerManager.getClass().getMethod("shutdown", boolean.class, String.class, boolean.class);// 调用shutdown()方法shutdownMethod.invoke(oIPowerManager, confirm, null, false);} else {// 获得reboot()方法Method rebootMethod = oIPowerManager.getClass().getMethod("reboot",boolean.class, String.class, boolean.class);// 调用reboot()方法rebootMethod.invoke(oIPowerManager, confirm, null, false);}} catch (Exception e) {e.printStackTrace();}}}

MainActivity.java

package com.android.peter.reflectdemo;import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;public class MainActivity extends AppCompatActivity {private final static String TAG = "peter.log.ReflectDemo";private Button mReboot;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mReboot = findViewById(R.id.btn_shutdown);mReboot.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 由于权限限制,并未生效ReflectClass.shutDown();ReflectClass.shutdownOrReboot(true,true);}});}@Overrideprotected void onResume() {super.onResume();try {// 创建对象ReflectClass.reflectNewInstance();// 反射私有的构造方法ReflectClass.reflectPrivateConstructor();// 反射私有属性ReflectClass.reflectPrivateField();// 反射私有方法ReflectClass.reflectPrivateMethod();} catch (Exception ex) {ex.printStackTrace();}Log.d(TAG," zenmode = " + ReflectClass.getZenMode());}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);}@Overrideprotected void onPause() {super.onPause();}@Overrideprotected void onDestroy() {super.onDestroy();}
}

 

示例 2

public class MainActivity extends AppCompatActivity {private static final String TAG = "sakura";// Used to load the 'native-lib' library on application startup.static {System.loadLibrary("native-lib");}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// Example of a call to a native methodTextView tv = (TextView) findViewById(R.id.sample_text);tv.setText(stringWithJNI("sakura"));
//        Log.d(TAG, stringFromJNI());
//        Log.d(TAG, stringWithJNI("sakura"));try {testClass();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (NoSuchFieldException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (NoSuchMethodException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}}public void testClass() throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {Test sakuraTest = new Test();// 获得Class的方法(三种)Class testClazz = MainActivity.class.getClassLoader().loadClass("myapplication.example.com.ndk_demo.Test");Class testClazz2 = Class.forName("myapplication.example.com.ndk_demo.Test");Class testClazz3 = Test.class;Log.i(TAG, "Classloader.loadClass->" + testClazz);Log.i(TAG, "Classloader.loadClass->" + testClazz2);Log.i(TAG, "Classloader.loadClass->" + testClazz3.getName());// 获得类中属性相关的方法Field publicStaticField = testClazz3.getDeclaredField("publicStaticField");Log.i(TAG, "testClazz3.getDeclaredField->" + publicStaticField);Field publicField = testClazz3.getDeclaredField("publicField");Log.i(TAG, "testClazz3.getDeclaredField->" + publicField);//对于Field的get方法,如果是static,则传入null即可;如果不是,则需要传入一个类的实例String valueStaticPublic = (String) publicStaticField.get(null);Log.i(TAG, "publicStaticField.get->" + valueStaticPublic);String valuePublic = (String) publicField.get(sakuraTest);Log.i(TAG, "publicField.get->" + valuePublic);//对于private属性,需要设置AccessibleField privateStaticField = testClazz3.getDeclaredField("privateStaticField");privateStaticField.setAccessible(true);String valuePrivte = (String) privateStaticField.get(null);Log.i(TAG, "modified before privateStaticField.get->" + valuePrivte);privateStaticField.set(null, "modified");valuePrivte = (String) privateStaticField.get(null);Log.i(TAG, "modified after privateStaticField.get->" + valuePrivte);Field[] fields = testClazz3.getDeclaredFields();for (Field i : fields) {Log.i(TAG, "testClazz3.getDeclaredFields->" + i);}// 获得类中method相关的方法Method publicStaticMethod = testClazz3.getDeclaredMethod("publicStaticFunc");Log.i(TAG, "testClazz3.getDeclaredMethod->" + publicStaticMethod);publicStaticMethod.invoke(null);Method publicMethod = testClazz3.getDeclaredMethod("publicFunc", java.lang.String.class);Log.i(TAG, "testClazz3.getDeclaredMethod->" + publicMethod);publicMethod.invoke(sakuraTest, " sakura");}/*** A native method that is implemented by the 'native-lib' native library,* which is packaged with this application.*/public native String stringFromJNI();public native String stringWithJNI(String context);
}
...
public class Test {private static final String TAG = "sakura_test";public static String publicStaticField = "i am a publicStaticField";public String publicField = "i am a publicField";private static String privateStaticField = "i am a privateStaticField";private String privateField = "i am a privateField";public static void publicStaticFunc() {Log.d(TAG, "I`m from publicStaticFunc");}public void publicFunc(String str) {Log.d(TAG, "I`m from publicFunc" + str);}private static void privateStaticFunc() {Log.i(TAG, "I`m from privateFunc");}private void privateFunc() {Log.i(TAG, "I`m from privateFunc");}
}
...
...
12-26 23:57:11.784 17682-17682/myapplication.example.com.ndk_demo I/sakura: Classloader.loadClass->class myapplication.example.com.ndk_demo.Test
12-26 23:57:11.784 17682-17682/myapplication.example.com.ndk_demo I/sakura: Classloader.loadClass->class myapplication.example.com.ndk_demo.Test
12-26 23:57:11.784 17682-17682/myapplication.example.com.ndk_demo I/sakura: Classloader.loadClass->myapplication.example.com.ndk_demo.Test
12-26 23:57:11.785 17682-17682/myapplication.example.com.ndk_demo I/sakura: testClazz3.getDeclaredField->public static java.lang.String myapplication.example.com.ndk_demo.Test.publicStaticField
12-26 23:57:11.785 17682-17682/myapplication.example.com.ndk_demo I/sakura: testClazz3.getDeclaredField->public java.lang.String myapplication.example.com.ndk_demo.Test.publicField
12-26 23:57:11.785 17682-17682/myapplication.example.com.ndk_demo I/sakura: publicStaticField.get->i am a publicStaticField
12-26 23:57:11.785 17682-17682/myapplication.example.com.ndk_demo I/sakura: publicField.get->i am a publicField
12-26 23:57:11.785 17682-17682/myapplication.example.com.ndk_demo I/sakura: modified before privateStaticField.get->i am a privateStaticField
12-26 23:57:11.785 17682-17682/myapplication.example.com.ndk_demo I/sakura: modified after privateStaticField.get->modified
12-26 23:57:11.785 17682-17682/myapplication.example.com.ndk_demo I/sakura: testClazz3.getDeclaredFields->private java.lang.String myapplication.example.com.ndk_demo.Test.privateField
12-26 23:57:11.785 17682-17682/myapplication.example.com.ndk_demo I/sakura: testClazz3.getDeclaredFields->public java.lang.String myapplication.example.com.ndk_demo.Test.publicField
12-26 23:57:11.785 17682-17682/myapplication.example.com.ndk_demo I/sakura: testClazz3.getDeclaredFields->private static final java.lang.String myapplication.example.com.ndk_demo.Test.TAG
12-26 23:57:11.785 17682-17682/myapplication.example.com.ndk_demo I/sakura: testClazz3.getDeclaredFields->private static java.lang.String myapplication.example.com.ndk_demo.Test.privateStaticField
12-26 23:57:11.785 17682-17682/myapplication.example.com.ndk_demo I/sakura: testClazz3.getDeclaredFields->public static java.lang.String myapplication.example.com.ndk_demo.Test.publicStaticField
12-26 23:57:11.785 17682-17682/myapplication.example.com.ndk_demo I/sakura: testClazz3.getDeclaredMethod->public static void myapplication.example.com.ndk_demo.Test.publicStaticFunc()
12-26 23:57:11.785 17682-17682/myapplication.example.com.ndk_demo D/sakura_test: I`m from publicStaticFunc
12-26 23:57:11.786 17682-17682/myapplication.example.com.ndk_demo I/sakura: testClazz3.getDeclaredMethod->public void myapplication.example.com.ndk_demo.Test.publicFunc(java.lang.String)
12-26 23:57:11.786 17682-17682/myapplication.example.com.ndk_demo D/sakura_test: I`m from publicFunc sakura

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495245.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能驾驶是否会“运动式”发展

来源&#xff1a;中国科学网最近&#xff0c;无人驾驶车发生撞人致死事故再度引发公众恐慌。在近日举行的全球人工智能技术大会上&#xff0c;中国工程院院士李德毅表示&#xff0c;不管是无人驾驶还是有人驾驶&#xff0c;事故总是有的。实际上人类才是第一马路杀手&#xff0…

Java学习之java高级特性

From&#xff1a;https://blog.csdn.net/w252064/article/details/79923999 [Java高级特性详解]&#xff1a;https://blog.csdn.net/qq_37977176/article/details/78941649 菜鸟教程 之 Java 教程&#xff1a;https://www.runoob.com/java/java-tutorial.html 本部分内容主要…

任正非亲自指导下拍的视频,事关中国的未来

来源&#xff1a;华为中美贸易战开打之后&#xff0c;中国产业未来的出路在哪里&#xff1f;华为的答案是基础研究与基础教育。这则由华为创始人兼CEO任正非亲自指导下拍摄的视频&#xff0c;呼吁社会重视基础教育&#xff0c;让教师成为最伟大的职业&#xff0c;成为优秀青年的…

《科学》杂志做了一个清单,告诉你今年 10 个最重要的科技突破

来源&#xff1a;网络大数据摘要&#xff1a;著名杂志《科学》最近列出了一份清单&#xff0c;来告诉你哪些科技突破在 2015 年是最重要的。《科学》是美国科技促进会出版的一份学术期刊杂志&#xff0c;主要发布的内容是各种学术研究&#xff0c;以及相关的科学新闻和观点&…

[进阶] --- Python3 异步编程详解(史上最全篇)

[进阶] - Python3 异步编程详解&#xff1a;https://blog.csdn.net/lu8000/article/details/45025987 参考&#xff1a;http://aosabook.org/en/500L/a-web-crawler-with-asyncio-coroutines.html 木风卜雨&#xff1a;https://blog.csdn.net/lu8000 1 什么是异步编程 1.1 阻…

AI+医疗:基于模型的医疗应用大规模分析 | 腾讯AI Lab学术论坛演讲

来源&#xff1a;腾讯AI实验室摘要&#xff1a;3月15日&#xff0c;腾讯AI Lab第二届学术论坛在深圳举行&#xff0c;聚焦人工智能在医疗、游戏、多媒体内容、人机交互等四大领域的跨界研究与应用。3月15日&#xff0c;腾讯AI Lab第二届学术论坛在深圳举行&#xff0c;聚焦人工…

Python 并行编程

参考&#xff1a;python-parallel-programming-cookbook-cn&#xff1a;https://python-parallel-programmning-cookbook.readthedocs.io/zh_CN/latest/ 第一章 认识并行计算和Python 1. 介绍2. 并行计算的内存架构3. 内存管理4. 并行编程模型5. 如何设计一个并行程序6. 如何评…

自动驾驶技术之——虚拟场景数据库研究

来源&#xff1a;智车科技摘要&#xff1a;驾驶场景数据是智能网联汽车研发与测试的基础数据资源&#xff0c;是评价智能网联汽车功能安全的重要“案例库”与“习题集”&#xff0c;是重新定义智能汽车等级的关键数据依据。驾驶场景测试用例主要通过虚拟仿真环境及工具链进行复…

C++ 数据指针(-)

C指针探讨 &#xff08;一&#xff09;数据指针 指针&#xff0c;在C/C语言中一直是很受宠的&#xff1b;几乎找不到一个不使用指针的C/C应用。用于存储数据和程序的地址&#xff0c;这是指针的基本功能。用于指向整型数&#xff0c; 用整数指针(int*)&#xff1b;指向浮点数用…

【进阶】 --- 多线程、多进程、异步IO实用例子

【进阶】 --- 多线程、多进程、异步IO实用例子&#xff1a;https://blog.csdn.net/lu8000/article/details/82315576 python之爬虫_并发&#xff08;串行、多线程、多进程、异步IO&#xff09;&#xff1a;https://www.cnblogs.com/fat39/archive/2004/01/13/9044474.html Py…

何恺明CVPR演讲:深入理解ResNet和视觉识别的表示学习(41 PPT)

来源&#xff1a;专知摘要&#xff1a;今年CVPR 2018上&#xff0c;刚获得“TPAMI”年轻研究员奖的Facebook的Kaiming He做了一个叫“Learning Deep Representations for Visual Recognition”的讲座。在今年CVPR 2018上&#xff0c;刚获得“TPAMI”年轻研究员奖的Facebook的Ka…

Python 标准库 functools 模块详解

functools 官方文档&#xff1a;https://docs.python.org/zh-cn/3/library/functools.html Python 标准模块 --- functools&#xff1a;https://www.cnblogs.com/zhbzz2007/p/6001827.html python常用模块 - functools 模块&#xff1a;https://www.cnblogs.com/su-sir/p/125…

长寿即服务:创业公司如何用AI技术颠覆传统药物研发

来源&#xff1a;资本实验室摘要&#xff1a;未来学家、奇点大学创始彼得戴曼迪斯&#xff08;Peter Diamandis&#xff09;最近就人工智能对新药研发的推动作用进行了讨论&#xff0c;并结合其新近投资的药物研发公司案例&#xff0c;进一步为我们打开了一扇通往未来新药研发的…

npm 详解

npm 官方文档&#xff1a;https://docs.npmjs.com/cli/v6/commands/npm-install/ npm 模块管理器&#xff1a;http://javascript.ruanyifeng.com/nodejs/npm.html npm 常用命令详解&#xff1a;https://blog.csdn.net/sxs1995/article/details/80729069 1. 什么是 NPM NPM 的…

视觉系统的演化之旅——视觉器官、光感受器及视觉分子

来源&#xff1a;科学网摘要&#xff1a;在所有的感觉信息中&#xff0c;视觉机制可能是最复杂的了。我们每个人都能轻而易举地欣赏大自然的美景——青翠的草木、飞舞的蝴蝶、苍茫的白雪……我们很轻松地欣赏着大自然的色彩斑斓与瞬息万状&#xff0c;但这种神奇的视觉过程到底…

MAC OS 命令行使用详解

MAC OS 命令行使用详解&#xff1a;https://blog.csdn.net/sun375867463/article/details/9812317 1 为什么要使用命令行/如何开启命令行&#xff1f; 许多功能在图形界面不提供&#xff0c;只有通过命令行来实现。Finder 会隐藏许多你不太会需要的文件&#xff0c;然而 comman…

张钹院士:走向真正的人工智能 | CCF-GAIR 2018

来源&#xff1a;AI科技评论摘要&#xff1a;6 月 29 日上午&#xff0c;清华大学研究院院长张钹院士为 CCF-GAIR 2018 主会场「AI 前沿技术」做了题为「走向真正的人工智能」&#xff08;Towards A Real Artifitial Intelligence&#xff09;的大会报告。AI科技评论按&#xf…

FoolWeb 各层代码实例

FoolWeb.DateEngine 数据库操作类库 这里现在只写了一个类用于操作mssql.将来支持别的数据库试直接扩展就行了. 下来带个代码段 1: /// <summary>通用数据库接口 2: /// </summary> 3: using System; 4: using System.Collections; 5: using System.Collections.G…

google、bing、baidu、shodan、censys、ZoomEye 搜索引擎 高级用法

Google guide &#xff1a;http://www.googleguide.com/advanced_operators_reference.html 相关资料&#xff1a; &#xff1a;http://www.bubuko.com/infodetail-2292041.html&#xff1a;http://www.pinginglab.net/open/course/9&#xff1a;https://download.csdn.net/d…

南云等PNAS研究论文:揭示儿童音乐学习向语言领域迁移的脑机制

来源&#xff1a;神经科技摘要&#xff1a;南云等的研究结果表明&#xff0c;半年的钢琴训练提升了4到5岁儿童大脑对跨音乐与语言领域的音高变化的敏感性2018年6月25日&#xff0c;美国科学院院刊PNAS在线发表了北京师范大学认知神经科学与学习国家重点实验室、IDG/McGovern脑科…