Java 这个未命名的静态神秘语法是什么意思?
在这个NotePadProvider示例代码中,我注意到类中有一个静态块,没有任何名称,也没有任何类型:Java 这个未命名的静态神秘语法是什么意思?,java,Java,在这个NotePadProvider示例代码中,我注意到类中有一个静态块,没有任何名称,也没有任何类型: static { sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH); sUriMatcher.addURI(NotePad.AUTHORITY, "notes", NOTES); sUriMatcher.addURI(NotePad.AUTHORITY, "notes/#", NOTE_ID); sUriMat
static {
sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
sUriMatcher.addURI(NotePad.AUTHORITY, "notes", NOTES);
sUriMatcher.addURI(NotePad.AUTHORITY, "notes/#", NOTE_ID);
sUriMatcher.addURI(NotePad.AUTHORITY, "live_folders/notes", LIVE_FOLDER_NOTES);
sNotesProjectionMap = new HashMap<String, String>();
sNotesProjectionMap.put(NoteColumns._ID, NoteColumns._ID);
sNotesProjectionMap.put(NoteColumns.TITLE, NoteColumns.TITLE);
sNotesProjectionMap.put(NoteColumns.NOTE, NoteColumns.NOTE);
sNotesProjectionMap.put(NoteColumns.CREATED_DATE, NoteColumns.CREATED_DATE);
sNotesProjectionMap.put(NoteColumns.MODIFIED_DATE, NoteColumns.MODIFIED_DATE);
// Support for Live Folders.
sLiveFolderProjectionMap = new HashMap<String, String>();
sLiveFolderProjectionMap.put(LiveFolders._ID, NoteColumns._ID + " AS " +
LiveFolders._ID);
sLiveFolderProjectionMap.put(LiveFolders.NAME, NoteColumns.TITLE + " AS " +
LiveFolders.NAME);
// Add more columns here for more robust Live Folders.
}
静态{
sUriMatcher=新的UriMatcher(UriMatcher.NO_匹配);
addURI(NotePad.AUTHORITY,“notes”,notes);
addURI(NotePad.AUTHORITY,“notes/#”,NOTE#ID);
addURI(NotePad.AUTHORITY,“live_文件夹/notes”,live_文件夹/notes);
sNotesProjectionMap=新HashMap();
sNotesProjectionMap.put(NoteColumns.\u ID,NoteColumns.\u ID);
sNotesProjectionMap.put(NoteColumns.TITLE,NoteColumns.TITLE);
sNotesProjectionMap.put(NoteColumns.NOTE,NoteColumns.NOTE);
sNotesProjectionMap.put(NoteColumns.CREATED\u日期,NoteColumns.CREATED\u日期);
sNotesProjectionMap.put(NoteColumns.MODIFIED\u日期,NoteColumns.MODIFIED\u日期);
//支持实时文件夹。
sLiveFolderProjectionMap=新HashMap();
sLiveFolderProjectionMap.put(LiveFolders.\u ID,NoteColumns.\u ID+“作为”+
LiveFolders.\u ID);
sLiveFolderProjectionMap.put(LiveFolders.NAME,NoteColumns.TITLE+“AS”+
LiveFolders.NAME);
//在此处添加更多列以获得更健壮的实时文件夹。
}
这是什么意思
此外,使用这种简洁的语法比使用可读性更强的语法有什么好处(我只是假设存在这种语法,在回答第一个问题之前,我不确定是否存在)。这是类的静态初始值设定项。它只执行一次。什么时候第一次在应用程序中使用该类 其思想是构造一些变量、结构、数据等。。。(无论您喜欢什么)将在该类的所有实例中使用。或者,例如,简单地为正弦值构造一个查找表 有几种方法可以调用它。所有这些情况:
首先调用静态初始值设定项,然后调用构造函数newmyclass()
Class.forName(“my.package.MyClass”)代码>
MyClass.staticMethodCallHere()代码>
MyClass.class.methodCallHere()代码>
static List<Integer> list = new ArrayList<Integer>();
static List=new ArrayList();
但是你不能用它做任何其他事情。此初始值设定项块使您能够提交对静态内容的操作:
static List<Integer> list; // = new ArrayList<Integer>();
static
{
list = new ArrayList<Integer>();
for(int i=0; i<10; i++) // just an example
list.add(i);
}
静态列表;//=新的ArrayList();
静止的
{
列表=新的ArrayList();
对于(int i=0;iThanks.这是在类的构造函数之前执行的吗?是否有其他语法?它与构造函数无关。执行此静态块不需要调用类的构造函数。作为静态块,它只初始化类的静态部分,与h类的实例变量(如构造函数所示)。好的,我现在知道了。该示例的作者将static{}
课程结束时真的很混乱。@MartijnCourteaux:我只是回答ateiob的评论。这与你的答案无关。@Razvan:噢,对不起。我没有收到:D抱歉。我以前注意到了,并更正了,但谢谢:)这样更容易理解这很有趣,因为这允许在运行时初始化常量。也就是说,即使列表被声明为static final
。