Java基础

基本语法

(一)关键字与标识符

1. Java关键字的使用

定义:java中那些被用来专门使用的单词

定义数据类型的关键字
class、interface、enum、byte、short、int、long、float、double、char、boolean、void
定义流程控制的关键字
if、else、switch、case、default、while、do、for、break、continue、return
修饰符权限的关键字
private、protected、public
定义类、函数、变量修饰符的关键字
abstract、final、static、synchronized
定义类与类之间关系的关键字
extends、implements
定义建立实例及引用实例的关键字
new、this、super、instanceof
用于异常处理的关键字
try、catch、finally、throw、throws
用于包的关键字
package、import
定义数据类型值的关键字
true、false、 null
其他修饰符关键字
native、strictfp、transient、volatile、assert

2.保留字

goto, const

3.标识符的使用

3.1 定义

凡是自己可以起名字的地方都是标识符。

3.2涉及到的结构

包名、类名、接口名、变量名、方法名、常量名

3.3规则
  • 由26个大小写英文字母+0~9的数字,_和$组成
  • 不可以使用关键字和保留字
  • 数字不能放在开头
  • 标识符不能有空格
3.4规范
  • 包名:所有单词均是小写
  • 类名,接口名:所有单词首字母均是大写
  • 变量名,方法名:第一个单子首字母小写,剩下的单词首字母均是大写
  • 常量名:所有单词的字母都是大写

有意义的命名
1.介绍 软件中随处可见命名。我们给变量、函数、参数、类和包命名。我们给源代码及源代码所在目录命名。 这么多命名要做,不妨做好它。下文列出了取个好名字的几条简单规则。

2.名副其实,见名知意
变量名太随意,haha、list1、ok、theList 这些都没啥意义

3.避免误导
包含List、import、java等类名、关键字或特殊字;
字母o与数字0,字母l与数字1等
提防使用不同之处较小的名称。比如:XYZControllerForEfficientHandlingOfStrings与XYZControllerForEfficientStorageOfStrings

4.做有意义的区分
反面教材,变量名:a1、a2、a3
避免冗余,不要出现Variable、表字段中避免出现table、字符串避免出现nameString,直接name就行,知道是字符串类型
再比如:定义了两个类:Customer类和CustomerObject类,如何区分?
定义了三个方法:getActiveAccount()、getActiveAccounts()、getActiveAccountInfo(),如何区分?

5.使用读得出来的名称
不要使用自己拼凑出来的单词,比如:xsxm(学生姓名);genymdhms(生成日期,年、月、日、时、分、秒)
所谓的驼峰命名法,尽量使用完整的单词

6.使用可搜索的名称
一些常量,最好不直接使用数字,而指定一个变量名,这个变量名可以便于搜索到.
比如:找MAX_CLASSES_PER_STUDENT很容易,但想找数字7就麻烦了。

7.避免使用编码
7.1.匈牙利语标记法
即变量名表明该变量数据类型的小写字母开始。例如,szCmdLine的前缀sz表示“以零结束的字符串”。
7.2.成员前缀
避免使用前缀,但是Android中一个比较好的喜欢用m表示私有等,个人感觉比较好
7.3.接口和实现
作者不喜欢把接口使用I来开头,实现也希望只是在后面添加Imp

8.避免思维映射
比如传统上惯用单字母名称做循环计数器。所以就不要给一些非计数器的变量命名为:i、j、k等

9.类名
类名与对象名应该是名词与名词短语。如Customer、WikiPage、Account和AddressParser。避免使用Data或Info这样的类名。
不能使动词。比如:Manage、Process

10.方法名
方法名应当是动词或者动词短语。如postPayment、deletePage或save

11.别扮可爱
有的变量名叫haha、banana
别用eatMyShorts()表示abort()

12.每个概念对应一个词
项目中同时出现controllers与managers,为什么不统一使用其中一种?
对于那些会用到你代码的程序员,一以贯之的命名法简直就是天降福音。

13.别用双关语
有时可能使用add并不合适,比例insert、append。add表示完整的新添加的含义。

14.使用解决方案领域名称
看代码的都是程序员,所以尽量用那些计算机科学术语、算法名、模式名、数学术语,
依据问题所涉领域来命名不算是聪明的做法。

15.使用源自所涉问题领域的名称
如果不能用程序员熟悉的术语来给手头的工作命名,就采用从所涉问题领域而来的名称吧。
至少,负责维护代码的程序员就能去请教领域专家了。

16.添加有意义的语境
可以把相关的变量放到一个类中,使用这个类来表明语境。

17.不要添加没用的语境
名字中带有项目的缩写,这样完全没有必要。比如有一个名为“加油站豪华版”(Gas Station Deluxe)的项目,
在其中给每个类添加GSD前缀就不是什么好策略。

18.最后的话
取好名字最难的地方在于需要良好的描述技巧和共有文化背景。

(二)变量的使用

数据类型

int a, b, c;         // 声明三个int型整数:a、 b、c
int d = 3, e = 4, f = 5; // 声明三个整数并赋予初值
byte z = 22;         // 声明并初始化 z
String s = "hello world";  // 声明并初始化字符串 s
double pi = 3.14159; // 声明了双精度浮点型变量 pi
char x = 'x';        // 声明变量 x 的值是字符 'x'

java支持的变量类型有:

  • 类变量:独立于方法之外的变量,用static修饰
  • 实例变量:独立于方法之外的变量,没有static修饰
  • 局部变量:类的方法中的变量
public class Variable{
    static int allClicks=0;    // 类变量
 
    String str="hello world";  // 实例变量
 
    public void method(){
        int i =0;  // 局部变量
    }
}

java 局部变量

  • 局部变量声明在方法、构造方法或者语句块中
  • 局部变量在方法、构造方法、或者语句块被执行的时候创建,当他们执行完成后,变量会被销毁
  • 访问修饰符不能用于局部变量
  • 局部变量只在声明它的方法,构造方法或者语句块中不可见
  • 局部变量是在栈上分配的
  • 局部变量没有默认值,所以局部变量在被声明后,必须初始化才能使用

java 实例变量

  • 实例变量声明在一个类中,但在方法、构造方法和语句块之外
  • 当一个对象被实例化后,每个实例变量的值就跟着确定
  • 实例变量的值应该至少被一个方法、构造方法和语句块引用,使得外被能够通过这些方式获取实例变量信息
  • 实例变量可以声明在使用前和使用后
  • 访问修饰符可以修饰实例变量
  • 实例变量对于类中的方法、构造方法和语句块一般都是可见的。一般情况下都是将实例变量设为私有。通过访问修饰符可以使实例变量对子类可见
  • 实例变量有默认值,数值型的默认是0,布尔型的默认是false,引用类型的默认是null。变量的值可以在声明的时候指定,也可以在构造方法中指定
  • 实例变量可以通过变量名访问。但在静态方法以及其他类中,就可以使用完全限定名:ObjectReference.VariableName

java 类变量

  • 类变量也被称为静态变量,在类中以static关键字声明,但必须在方法之外
  • 无论一个类创建了多少对象,类只拥有类变量的一份拷贝
  • 静态变量除了被声明为常量外很少被使用,静态变量是指声明为public/private,final和static类型的变量,静态变量被初始化后无法改变
  • 静态变量存储在静态存储区。经常被声明为常量。很少单独使用static声明变量
  • 静态变量在第一次被访问时创建,在程序结束时销毁
  • 与实例变量具有相似的可见性。但为了能对类的使用者可见,大多数静态变量声明为public
  • 默认值与实例变量相似。静态变量还可以在静态语句块中被初始化
  • 静态变量可以通过ClassName.VaribaleName的方式访问
  • 类变量被声明为public static final类型时,类变量名称一般是使用全大写,如果不是public和final类型,其命名方式与实例变量的命名方式一致

(三)java 修饰符

访问控制修饰符

使用访问控制符来保护对类、变量、方法和构造方法的访问

  • default:在同一包内可见
  • private:在同一类内可见。不能修饰类
  • public:对所有类可见
  • protected:对同一包内的类和所有子类可见。不能修饰类
  • 非访问修饰符
修饰符当前类同一包内同一包内子孙类(同包)子孙类(不同包)其他包
public
protected×
default××
private×××××

默认访问修饰符-----不使用任何修饰符

使用默认访问修饰符声明的变量和方法,对同一个包内的类是可见的。接口里的变量隐式声明为public static final,而接口里的方法默认情况下访问权限为public

私有访问修饰符-----private

私有访问修饰符是最严格的访问级别,所以被声明为 private 的方法、变量和构造方法只能被所属类访问,并且类和接口不能声明为 private。声明为私有访问类型的变量只能通过类中公共的 getter 方法被外部类访问。Private 访问修饰符的使用主要用来隐藏类的实现细节和保护类的数据。

公有访问修饰符----public

被声明为 public 的类、方法、构造方法和接口能够被任何其他类访问。如果几个相互访问的 public 类分布在不同的包中,则需要导入相应 public 类所在的包。由于类的继承性,类所有的公有方法和变量都能被其子类继承。

受保护的访问修饰符-protected

  • 子类与基类在同一包中:被声明为protected的变量、方法和构造器能被同一个包中的任何其他类访问
  • 子类与基类不在同一包中:在子类中,子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例的protected方法
    protected 可以修饰数据成员、构造方法、方法成员。不能修饰类(内部类除外),接口及接口的成员变量和成员方法不能声明为protected

java 位运算

位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算。

  • 与运算符&:两个操作数中位数都是1结果才是1,否则结果为0
  • 或运算符|:两个操作数中位数只要有一个是1结果就是1,否则为0
  • 非运算符~:如果位数为1,则结果是0,反之亦然
  • 异或运算符^:两个操作数中位数相同则为0,不同则为1

java中的运算符

按照优先级:由高到低

  1. 后缀:(), [], .
  2. 一元:expr++, exper–
    先进行表达式计算,再自增
  3. 一元:++exper, --exper, +, -, ~, !
    先自增,再进行表达式计算
  4. 乘性:*, /, %
  5. 加性:+, -
  6. 移位:>>, >>>, <<
    >>>按位右移补零操作符
  7. 关系:>, >=, <, <=
  8. 想等:==, !=
  9. 按位与:&
  10. 按位异或:^
  11. 按位或:|
  12. 逻辑与:&&
  13. 逻辑或:||
  14. 条件:?:
  15. 赋值:=, +=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=
  16. 逗号:,

(四)数组

  1. 数组的相关概念
    相同数据类型的元素按照一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,以便统一管理他们,然后用编号区分他们,这个名字就成为数组名,编号称为下标或索引(index),数组的各个变量成为元素(element)。数组中元素的个数称为数组的长度(length)。
  2. 一维数组初始化
    1 确定数组的长度,也就是先要为数组和数组元素在jVM内存模型中分配空间,一旦数组的长度固定了就不可改变
    2 确定数组元素的值
    (方式一)静态初始化
    数据元素的数据类型[] 数组名 = new 数据元素的数据类型[]{元素的值列表};
public class Test02_ArrayDefineAndUse {
    public static void main(String[] args) {
//        (1)声明一个数组,存储分数
//        int [] scores;

//        (2)初始化数组
//         1. 静态初始化
//        scores = new int[]{10,20,30,40,50};
//        还可以写成如下  前提是声明与初始化在同一行
        int [] scores = {20,20,30,50,60};
        for(int i = 0;i<scores.length;i++) {
            System.out.print(scores[i]+" ");
        }

(方式二)静态初始化
数组名 = new 数组的元素类型[长度];

  char[] words = new char[26];
        for (int i = 0; i < 26; i++) {
            words[i] = (char)(65+i);
            System.out.print(words[i]);
        }

基本数据类型在初始化的时候默认 int 为0 ,float为0.0,double为0.0,Boolean为false,char为’\u0000’
引用数据类型在初始化的时候默认是null
不能同时使用静态和动态初始化

int[] nums = new int[3]{1,2,3};
  1. 二维数组初始化
    1 静态初始
int[][] a = {{1,2},{3,4},{5,6}}

2 动态初始化

int[][] a = new int[3][]

(四) 代码块

用{}括起来的代码:

  1. 普通代码块: 类中方法的方法体
  2. 构造代码块:类中{}直接括起来的语句,每次创建对象都会被调用,并且优先于构造函数执行
  3. 静态代码块:类中static{}括起来的语句,只执行一次,先于构造代码块执行
  4. 同步代码块:类中Synchronized(){}括起来的语句,多线程环境下互斥执行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值