day6-注释、标识符、关键字

java基础01

注释、标识符、关键字

注释

注释的作用和注释的优点不做赘述,简单来说注释是一个好的习惯

java中的注释有三种:

  • 单行注释
  • 多行注释
  • 文档注释

在这里插入图片描述

comments下可以设置注释的样式
我这里更喜欢默认的样式

直接选中内容再按ctrl+/也可以达到用单行注释注释多行的效果

文档注释
通常它以 /** 开始,以 */结束。也就是

/**+tab 即可自动生成(要在idea中自己配置)

/**

* @method checkUser(这里用一句话描述这个方法的作用)

* @return boolean

* @authorjarek

* @date 2015年11月6日下午3:26:33

*/

说明注释允许你在程序中嵌入关于程序的信息。你可以使用 javadoc 工具软件来生成信息,并输出到HTML文件中。

标识符

Java标识符由数字字母下划线(_),美元符号($)或人民币符号(¥)组成。在Java 中是区分大小写的,而且还要求首位不能是数字。最重要的是,Java关键字不能当作Java标识符。

下面的标识符是合法的:
myName,My_name,Points,$points,_sys_ta,OK,_23b,_3_
下面的标识符是非法的:

#name,25name,class,&time,if

标识符的规则:由字母,数字,下划线_,美元$组成,但数字不能开头.

标识符不能是java的关键字和保留字,但可以包含关键字和保留字,不能包含空格

标识符只能包含美元符($),不能包含@,#等其它字符

Java 9规定:不允许单独使用下划线作为分隔符。

Java 的关键字加上goto、const、true、false、nulll 一共有53个关键字和保留字,都不能作为Java的标识符。

关键字

通常在任何一款ide中是彩色的,例如public、static、class等
在这里插入图片描述

数据类型

强类型语言
要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用
弱类型语言
在弱类型语言中,变量能够隐式的转换为无关类型,在强类型语言中不可以隐式转化,必须通过显示转换(注意这里的无关类型。大部分语言能够隐式的转换相关类型,例如整数和浮点数之间的加法。无关类型则像整形和字符串类型。)在典型的弱类型语言中,整数类型9和字符串类型"9"是可以转换的,

java是强类型语言,每个变量都必须声明其类型

java的数据类型分为两大类

  • 基本类型
    • 数值类型
      • 整数类型
        • byte 占1个字节 范围:-128~127
        • short 占2个字节 范围:-32768~32767
        • int 占4个字节 范围:-2147483648~2147483647
        • long 占8个字节 范围:-9223372036854775808~9223372036854775807
      • 浮点类型
        • float 占4个字节
        • double 占9个字节
      • 字符类型 char 占2个字节
    • boolean类型 占1位,值仅有true和false
  • 引用类型
    • 接口
    • 数组

一个字节2^8=256,也就是1个字节8位,即1byte==8bit;
计算机的规矩是
1024b=1kb

硬盘制造商们的规矩是
1000b=1kb

32位的电脑只能扩展到4GB的内存。64位则很多。

long num1 = 10L;
float num2 = 20.1F;
char c = 'c';
string s = "s";

上面两个是在后面需要在数字后加符号的。还有8,16进制也是类似,这里不做赘述。

最大最小值可以去对应的类中查看源码。int 的包装类是Integer(i大写)。

值得注意的是java所有传递都是值传递
就像

int[] a;
int[] b=a;

这里也是将a的地址复制一份给b,而不是直接传递引用a的地址,也即是不会和a共用一个内存空间,a与b是两个对象。这一点特别要和其他语言注意。

数据类型拓展
整数扩展

二进制以 0b 开头
八进制以 0 开头
十六进制以 0x 开头
不需要空格隔开

浮点数扩展

金融中
一般的浮点数计算是不准确的
加减会有精度缺失。
使用BigDecimal类来处理。
尽量避免浮点数比较和运算。

字符扩展

所有的字符本质是数字,将数字编码对应转换为字符。
常用的有Unicode编码
从U0000~UFFFF来表示
ASCII编码
从0~127来表示

转义字符

System.out.println("hello \t\n world!");

其中的\t是tab,\n是换行

转义字符意义ASCII码值(十进制)
\a响铃(BEL)
\b退格(BS) ,将当前位置移到前一列008
\f换页(FF),将当前位置移到下页开头012
\n换行(LF) ,将当前位置移到下一行开头010
\r回车(CR) ,将当前位置移到本行开头013
\t水平制表(HT) (跳到下一个TAB位置)009
\v垂直制表(VT)011
\代表一个反斜线字符’’’092
代表一个单引号(撇号)字符039
"代表一个双引号字符034
?代表一个问号063
\0空字符(NUL)000
\ddd1到3位八进制数所代表的任意字符三位八进制
\xhh十六进制所代表的任意字符十六进制

仔细分析如下代码

        String a= new String("hello world!");
        String b= new String("hello world!");
        System.out.print("a==b?");System.out.println(a==b);
        System.out.println("a.HashCode="+System.identityHashCode(a));
        System.out.println("b.HashCode="+System.identityHashCode(b));
        String c= "hello world!";
        String d= "hello world!";
        System.out.print("c==d?");System.out.println(c==d);
        System.out.println("c.HashCode="+System.identityHashCode(c));
        System.out.println("d.HashCode="+System.identityHashCode(d));
        

下面是运行结果

a==b?false
a.hashCode=1163157884
b.hashCode=1956725890
c==d?true
c.hashCode=356573597
d.hashCode=356573597

Process finished with exit code 0

用到的System.identityHashCode();方法的源码

/*
Returns the same hash code for the given object as would be returned by the default method hashCode(), whether or not the given object's class overrides hashCode(). The hash code for the null reference is zero.
Params:
x – object for which the hashCode is to be calculated
Returns:
the hashCode
Since:
JDK1.1
*/
public static native int identityHashCode(Object x);

思考一下,为什么会发生这种情况呢。
我这里给出的答案是

String a= new String(“hello world!”) ;在编译阶段JVM先去常量池中查找是否存在"hello world!",
如果过不存在,则在常量池中开辟一个空间存储"hello world!"。在运行时期,通过String类的构造器在堆内存中new了一个空间,然后将String池中的"hello world!"复制一份存放到该堆空间中,在栈中开辟名字为a的空间,存放堆中new出来的这个String对象的地址值。

String c= “hello world!”; 在编译期,JVM会去常量池来查找是否存在"hello world!"
如果不存在,就在常量池中开辟一个空间来存储"hello world!"
如果存在,就不用新开辟空间。然后在栈内存中开辟一个名字为c的空间,来存储"hello world!"在常量池中的地址值。

这里我们可以看看new String(“hello world!”);的源码

/*
Initializes a newly created String object so that it represents the same sequence of characters as the argument; in other words, the newly created string is a copy of the argument string. Unless an explicit copy of original is needed, use of this constructor is unnecessary since Strings are immutable.
Params:
original – A String
*/
public String(String original) {
        this.value = original.value;
        this.hash = original.hash;
    }

对了,这里的new String(“hello world!”)是先生成"hello world!"对象再给new String()包装

布尔值扩展
boolean flag=false;
if(flag){}
if(!flag){}
if(flag==false{}
if(flag!=false){}
类型转换
强制类型转换

低 -------------> 高
byte,short,char,int,long,float,double
高转低转换就可能发生内存溢出

(类型)变量名

自动转换

自动转换就是低转高,不用强行转换

注意点

  1. 不能转换布尔变量
  2. 不能把对象类型转换为不相干的类型
  3. 大容量转到低容量需要强制转换,反之不需要
  4. 转换可能遇到精度丢失

变量,常量

java是一种强类型的语言,每个变量都要申明其类型。
java变量是程序中最基本的存储单元,包括变量名,变量类型和作用域。

  • 每个变量都有类型,类型可以是基本类型,也可以是引用类型
  • 变量名必须是合法的标识符
  • 变量声明是一条完整的语句,因此每一个声明都必须以分号结束

变量作用域

  • 类变量
  • 实例变量,从属对象,如果不自行初始化,则为该类型的默认值
  • 局部变量,作用域内有效
public class hello {
    static int allCliks=0;//类变量
    String str = "hello world!"; //实例变量
    public void method(){
        int i =0;//局部变量
    }
}

所有数值型默认值是0,0.0,0000等
布尔值默认值是false
除了基本类型,其余的都是null

但是jdk1.8实际中

    public static void main(String[] args) {
        char c;
        System.out.println(c);
        boolean b;
        System.out.println(b);
        int i;
        System.out.println(i);
        int in[];
        System.out.println(in);
        String s;
        System.out.println(s);
    }

都会报错,也就是必须强制要设置一个初始值。
在这里插入图片描述

变量命名法
  • 所有变量、方法、类名:见名知意
  • 类成员变量:首字母小写和驼峰原则
  • 局部变量:首字母小写和驼峰原则
  • 常量:大写字母和下划线:MAX_VALUE
  • 类名:首字母大写和驼峰原则:GoodMan
  • 方法名:首字母小写和驼峰原则

骆驼式命名法就是当变量名或函数名是由一个或多个单词连结在一起,而构成的唯一识别字时,第一个单词以小写字母开始;从第二个单词开始以后的每个单词的首字母都采用大写字母,例如:myFirstName、myLastName,这样的变量名看上去就像骆驼峰一样此起彼伏,故得名。

有些程序员喜欢全部小写,有些程序员喜欢用下划线,所以如果要写一个my name的变量,他们常用的写法会有myname、my_name、MyName或者myName。这样的命名规则不适合所有程序员阅读,而利用驼峰命名法来表示,可以增加程序可读性。
例如,下面是分别用骆驼式命名法和下划线法命名的同一个函数

printEmployeePaychecks()print_employee_paychecks()

第一个函数名使用了骆驼式命名法——函数名中的每一个逻辑断点都有一个大写字母来标记;第二个函数名使用了下划线法----函数名中的每一个逻辑断点都有一个下划线来标记。
骆驼式命名法在许多新的函数库和Microsoft Windows这样的环境中使用得相当多。另一方面,下划线法是c出现后开始流行起来的,在许多旧的程序和UNIX这样的环境中,它的使用非常普遍。

修饰符,不存在先后顺序
也就是下面两个语句是一样的效果

static final double pi = 3.14;
final static double pi = 3.14;

运算符

  • 算术运算符:+ , - , * , / , % , ++ , –
  • 赋值运算符:=
  • 关系运算符:> , < , >= , <= , == , != , instanceof
  • 逻辑运算符:&& , || , !
  • 位运算符: & , | , ^ , ~ , >> , << , >>>
  • 条件运算符(三目运算符)? :
  • 扩展复制运算符:+= , -= , *= , /=
a++;//这一行语句结束后再执行a+1
++a;//这一行语句执行前再执行a+1
if(a==true)? x1:x2;//如果a==true,执行x1,否则执行x2;

包机制、JavaDoc

一般用公司域名倒置作为包名
package和import

JavaDoc 命令可以生产自己的API文档的

标签描述示例
@author标识一个类的作者@author description
@deprecated指名一个过期的类或成员@deprecated description
{@docRoot}指明当前文档根目录的路径Directory Path
@exception标志一个类抛出的异常@exception exception-name explanation
{@inheritDoc}从直接父类继承的注释Inherits a comment from the immediate surperclass.
{@link}插入一个到另一个主题的链接{@link name text}
{@linkplain}插入一个到另一个主题的链接,但是该链接显示纯文本字体Inserts an in-line link to another topic.
@param说明一个方法的参数@param parameter-name explanation
@return说明返回值类型@return explanation
@see 指定一个到另一个主题的链接 @see anchor
@serial说明一个序列化属性@serial description
@serialData说明通过writeObject( ) 和 writeExternal( )方法写的数据@serialData description
@serialField说明一个ObjectStreamField组件@serialField name type description
@since标记当引入一个特定的变化时@since release
@throws和 @exception标签一样.The @throws tag has the same meaning as the @exception tag.
{@value}显示常量的值,该常量必须是static属性。Displays the value of a constant, which must be a static field.
@version指定类的版本@version info

目录的命令行内执行

javadoc -encoding UTF-8 -charset UTF-8 xxxx.java
#修改编码,避免中文乱码

会生成一个对应的结构文件(以网页展示index.html)

或者idea中
在这里插入图片描述

在这里插入图片描述
即可。

java docs

在这里插入图片描述
解压jdk中src.zip,用idea打开文件目录,然后等待加载完成后用tool工具确定输出目录后生成doc。会等几分钟。耐心一点

生成的doc目录下打开index.html
在这里插入图片描述
最后这样查询即可
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值