Android journey 1@关于编码风格和命名规范
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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | /* * 1.关于编程风格:每一位程序猿可能都有自己独特的编程风格,但是有些规则是大家都必须遵守的,特别 * 是在工作的过程中,良好的代码风格能大大提高代码本身的可阅读性和维护性,也更有利于别人修改你 * 的代码。风格问题涉及到的都是细节相关的问题,读者朋友们或许都听过“细节决定成败”这句话,这句话 * 在这里同样生效,不过是换了种意思,就是“细节体现你的专业程度”,所以作为一名程序猿,我们应该从 * 编写代码的训练中养成良好的编码习惯,如命名规范,排版规范,写好注释等。下面具体说明下: */ /* * 1)整个Project相关内容的目录规范:(通常可以包含以下几个文件夹) * #.Requirement Doc: project的需求文档说明 * #.Design:有关设计方面的说明 * #.Planning&Log:计划、日志、会议等 * #.Test:测试及其报告 * #.Study:学习资料及demo * #.Deployment:发布,部署 * #.src: 源代码 * #.help:帮助文档 * #. ...(根据自己需求添加合适文档) * 注意事项:在IDE建立project的时候,包即目录(java),包名全小写,且一般不超过3层,命名为:【公司】.【项目】.【模块】 */ /* * 2)命名规范: * #、Pascal命名法:每个单词首字母大写,其余小写,如“ActivityDemo”,主要应用于:文件名,普通类名,构造函数等 * #、Camel命名法:第一个单词全小写,其余单词按pascal命名,如“myName”,主要应用于:方法名(动宾短语),普通函数名等 * #、匈牙利命名法(使用前缀,后缀命名):如对于整型变量,可以“int intMyAge;” * #、下划线命名法:主要在常量(全大写)中使用,分隔两个不同单词 * 其他常见命名:私有成员变量:“mMyName”;静态变量:“sMyName”;方法参数:“pMyName”; * 当然命名规则的使用主要看已有项目的要求,若新启动一个项目,编码前团队必须先统一命名规范 */ /* * 3)其他需要注意的地方: * 1、一个方法不超过35行代码 * 2、不要去修改机器自动生成的代码 * 3、final String取代String,即不要直接写字符串 * 4、循环语句中不用return * 5、属性用set(),get()方法操控 * 6、不要再系统生成函数中写复杂代码,复杂代码通常用函数调用解决 * 7、虽然class能搞定一切,但使用接口暴露信息会更好 * 8、switch语句中无论如何都要有default * 9、同类的import包放在一起 * ...<br>* */ //下面看一下Android源码中的代码: /* * Copyright (C) 2006 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.app; import com.android.internal.app.ActionBarImpl; import com.android.internal.policy.PolicyManager; import android.os.Build; import android.os.Bundle; import android.os.UserHandle; import android.text.Selection; import android.text.SpannableStringBuilder; import android.text.TextUtils; import android.text.method.TextKeyListener; import android.util.AttributeSet; import android.util.EventLog; /**可在注释中嵌入HTML标签,在生成javadoc的时候控制各种属性等 * An activity is a single, focused thing that the user can do. Almost all * activities interact with the user, so the Activity class takes care of * creating a window for you in which you can place your UI with * {@link #setContentView}. While activities are often presented to the user * as full-screen windows, they can also be used in other ways: as floating * windows (via a theme with {@link android.R.attr#windowIsFloating} set) * or embedded inside of another activity (using {@link ActivityGroup}). * * There are two methods almost all subclasses of Activity will implement: * * <ul> * <li> {@link #onCreate} is where you initialize your activity. Most * importantly, here you will usually call {@link #setContentView(int)} * with a layout resource defining your UI, and using {@link #findViewById} * to retrieve the widgets in that UI that you need to interact with * programmatically. * * <li> {@link #onPause} is where you deal with the user leaving your * activity. Most importantly, any changes made by the user should at this * point be committed (usually to the * {@link android.content.ContentProvider} holding the data). * </ul> ... */ public class Activity extends ContextThemeWrapper implements LayoutInflater.Factory2, Window.Callback, KeyEvent.Callback, OnCreateContextMenuListener, ComponentCallbacks2 { private static final String TAG = "Activity" ; private static final boolean DEBUG_LIFECYCLE = false ; /** Standard activity result: operation canceled. */ //常量命名 public static final int RESULT_CANCELED = 0 ; /** Standard activity result: operation succeeded. */ public static final int RESULT_OK = - 1 ; /** Start of user-defined activity results. */ public static final int RESULT_FIRST_USER = 1 ; static final String FRAGMENTS_TAG = "android:fragments" ; private static final String WINDOW_HIERARCHY_TAG = "android:viewHierarchyState" ; private static final String SAVED_DIALOG_IDS_KEY = "android:savedDialogIds" ; private static final String SAVED_DIALOGS_TAG = "android:savedDialogs" ; private static final String SAVED_DIALOG_KEY_PREFIX = "android:dialog_" ; private static final String SAVED_DIALOG_ARGS_KEY_PREFIX = "android:dialog_args_" ; private static class ManagedDialog { Dialog mDialog; Bundle mArgs; } private SparseArray<ManagedDialog> mManagedDialogs; // set by the thread after the constructor and before onCreate(Bundle savedInstanceState) is called. //私有变量命名 private Instrumentation mInstrumentation; private IBinder mToken; private int mIdent; static final class NonConfigurationInstances { Object activity; HashMap<String, Object> children; ArrayList<Fragment> fragments; HashMap<String, LoaderManagerImpl> loaders; } /* package */ NonConfigurationInstances mLastNonConfigurationInstances; private Window mWindow; /** * Change the intent returned by {@link #getIntent}. This holds a * reference to the given intent; it does not copy it. Often used in * conjunction with {@link #onNewIntent}. * * @param newIntent The new Intent object to return from getIntent * * @see #getIntent * @see #onNewIntent *自定义javadoc标签 *@author .. *@date .. *@modify ..(who,when..) */ public void setIntent(Intent newIntent) { mIntent = newIntent; } |
1 | <br><br> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述