java学习笔记(2)注释、public lcass、class、标识符、字面值、变量
java学习笔记(1)中说过了java的一些基础知识,发展史,特点,编译和运行过程,配置环境变量等,接下来开始介绍java的语法等只是点
关于java源程序中的注释:
*什么是注释?注释的作用是什么?
-出现在java源程序当中,是对java源代码的解释说明。
-注释不会被编译到.class字节码文件当中。
-一个号的开发习惯,应该是多编写注释。这样程序的可读性增强。
*java的注释怎么写呢?
-单行注释
//单行注释,只注释当前行
-多行注释
/*
多行注释
多行注释
...
*/
-javadoc注释(比较专业的注释,可以用javadoc命令生成说明文档,这个命令也是在JDK的bin目录下)
/**
* javadoc注释
* javadoc注释,同样是多行注释
*/
下面来试一试,我是用vscode编写的代码,将HelloWorld.java程序用注释说明一下
// public 表示公开的 // class 表示定义一个类 // HelloWorld 表示一个类名 public class HelloWorld{//表示定义一个公开的类名为HelloWorld类 // 类里面的内容叫作【类体】,记住 // 类体中不能直接编写java语句【除了生命变量之外】 // System.out.println("Hello, world!");//这个地方打开注释,编译就通不过 /* public表示公开的 static表示静态的 void表示空 main表示方法名是main (String[] args)是main方法的形式参数列表 需要记住的是,以下的方法是一个程序的主方法,是一个程序的入口,主方法以main命名 这是SUN公司规定的写法,不这么写程序进不来!! */ public static void main(String[] args) {//表示定义一个公开的静态的主方法,返回值是空 // 方法里的内容叫作方法体 // 下面的语句叫java语句 // java语句【java语句以";"结尾,分号必须是半角分号】 // 先记住以下代码的意思是,向控制台输出一段字符串 // 以下双引号必须是半角的双引号【这是java语法都的一部分】 // java中所有的字符串都使用双引号括起来,记住不能是单引号 System.out.println("Hello, world!"); // 再向控制台输出消息 System.out.println("Hello,jackson!"); // 输出中文 System.out.println("您好,杰克!"); // 输出中文【提示,以下程序员两边的双引号是全角的】 System.out.println("我是一个“程序员”"); } }
然后编译时报错了,
出现这样的错误,一般是因为代码中含有中文字符,注释中的中文字符也算。由于使用CMD运行java程序的时候,系统默认的编码格式是gbk。而包含中文字符的代码一般是UNICODE格式,所以直接运行含有中文字符的代码就很容易出现编码错误。
第一种解决办法,用这个命令编译:javac -encoding UTF-8 HelloWorld.java
第二种办法,用nodepad++或editplus将编码转化为UTF-8编码格式
刚才没注意到
我的vscode是用的UTF-8 with BOM编码格式,忙活了半天,最后右键这点选择为UTF-8格式即可
不过编译命令还是的使用:javac -encoding UTF-8 ./HelloWorld.java
然后让程序运行一下:java HelloWorld
ok正常!!!
另外注意类体中不能直接编写java语句,除声明变量之外
接下来我们重新建一个K.java文件
里面用class创建了B、X、Y、Z这几个类
然后执行javac ./K.java
然后会把B、X、Y、Z这几个类编译出来
那么public class和class的区别是什么呢?
public class和class的区别?
*一个java源文件当中可以定义多个class
*一个java源文件当中public的class不是必须要有的
*一个class会对应生成xxx.class字节码文件
*一个java源文件当中定义公开的类的话,public的class只能有一个,并且该类名称必须和java源文件名称一致
*每一个class当中都可以编写main方法,都可以设定程序的入口,想指向B.class中的main方法,执行java B即可,依此类推
*当在命令窗口中执行java Hello,那么要求Hello.class当中必须有主方法,若没有主方法,会出现运行阶段的错误,报错是,该类中没有主方法
例子:
class B{ public static void main(String[] args){ System.out.println("B`s main method invoke!"); } } class X{ public static void main(String[] args){ System.out.println("X`s main method invoke!"); } } class Y{ public static void main(String[] args){ System.out.println("Y`s main method invoke!"); } } class Z{ public static void main(String[] args){ System.out.println("Z`s main method invoke!"); } } public class K{ public static void main(String[] args){ System.out.println("K`s main method invoke!"); } }
标识符:
/* 关于java语言中的标识符 1、什么是标识符? -在java源程序当中,凡是程序员有权利自己命名的单词都是标识符 -标识符在EditPlus编辑器当中以黑色字体高亮显示 -标识符可以标识什么元素呢? *类名 *方法名 *变量名 *接口名 *常量名 ...... 2、标识符的命名规则?【不按照这个规则来,编译器会报错,这是语法】 *一个合法的标识符只能由数字、字母、下划线_、美元符号$组成,不能含有其它的符号 *不能以数字开头 *严格区分大小写 *关键字不能做标识符 *理论上无长度限制,但是最好不要太长 3、标识符的命名规范?【只是一种规范,不属于语法,不遵守规范,编译器不会报错】 *最好见名知意 例如: public class UserService{ public void login(String username,String password){ } } *遵守驼峰命名方式 例如: SystemService UserService CustomeService *类名、接口名:首字母大写,后面每个单词首字母大写 *变量、方法名:首字母小写,后面每个单词首字母大写 *常量名全部大写 java语言汇总常见的关键字 public class static void if for while do default byte short int long float double boolean char private protected switch true false throw throws try catch... */ public class IdentifierTest01{//IdetifierTest01是一个类名,名字可以修改 //main是一个方法名 public static void main(String[] args){//args是一个变量名 System.out.println("") } // doSome就是方法名 public static void doSome(){ // i就是变量名 int i = 10; } }
字面值:
/* 关于字面值 *字面值: -10、100 -"abc" -'a' -true -false *字面值就是数据。 *字面值是java源程序的组成部分之一,包括关键字和标识符他们都是java源程序的组成部分。 *数据在现实世界当中是分门别类的,所以数据在计算机编程语言当中也是有类型的。【数据类型】 -10、100属于整数型字面值 -3.14属于浮点型字面值 -true、false属于布尔型字面值 -"abc"、"中国人"属于字符串型字面值 -'a'、'人'属于字符型字面值 *注意:java语言当中所有的字符串型字面值必须使用""双引号括起来,双引号是半角(英文状态下的双引号) *java语言当中所有的字符型字面值必须使用''单引号括起来,单引号是半角 */ public class ConstTest01{ public static void main(String[] args){ System.out.println("abc"); System.out.println("最近您过的怎么样?"); System.out.println(10); System.out.println(100); System.out.println(false); System.out.println(true); System.out.println('A');//注意单引号是字符型字面值 System.out.println(3.14); // 下面会编译报错,因为单引号中只能存放单个字符,属于字符型字面值 // System.out.println('ABC'); } }
变量:
/* 关于java语言当中的变量: 1、什么是变量? *变量本质上来说是内存中的一块空间,这块空间有数据类型、有名字、有字面值。 *变量分为三部分:数据类型、名字、字面值【数据】。 *变量是内存中存储数据的最基本的单元。 2、数据类型的作用? *不同的数据有不同的类型,不同的数据类型底层会分配不同大小的内存空间。 *数据类型是指导程序在运行阶段应该分配多大的内存空间。 3、变量要求:变量中存储的具体的"数据"必须和变量的"数据类型"一致。当不一致的时候编译报错。 4、声明/定义变量的语法格式: 数据类型 变量名; *数据类型:比如说 int是整数型 *变量名:只要是合法的标识符就行。规范中要求,首字母小写,后面的单词首字母大写。 例如: int i; int age; int size; int length; int num; 其中int是数据类型,i、age、size、length、num都是变量名。 5、变量声明之后,怎么赋值? 变量名 = 字面值; 要求:字面值的数据类型必须和变量的数据类型一致。 = 等号,是一个运算符,叫作赋值运算符,赋值运算符先运算等号右边的表达式,表达式 执行结束之后的结果赋值给等号左边的变量。 6、声明和赋值可以放到一起完成。 int i = 10; 7、变量赋值之后,可以重新赋值,变量的值可变化。 int i = 10; System.out.println(i);//10 i = 20; System.out.println(i);//20 i = 100; System.out.println(i);//100 8、有了变量的概念之后,内存空间得到重复的使用。 9、通常访问一个变量包括两种访问方式: *第一种:读取变量中保存的具体数据。(get方式/获取) *第二种:修改变量中保存的具体数据。(set方式/设置) i = 20;//set System.out.println(i);//get 10、变量在一行上可以声明多个。 int a,b,c; 11、java中的变量必须先声明并且赋值后才能访问。 int i;程序执行到这里,内存空间并没有开辟出来,变量i并没有初始化。 所以没有赋值之前变量是无法访问的。 */ public class VarTest01{ public static void main(String[] args){ //声明一个int类型的变量,起名i int i; // 编译报错:变量i并没有初始化。 // 在java当中变量必须先声明再赋值之后才能访问。声明但没赋值的情况下无法访问,编译会报错。 // System.out.println(i); i = 100;//给i变量赋值,i变量在这里完成初始化,内存开辟。 System.out.println(i); // i再次重新赋值 i = 200; System.out.println(i); } }
/* 关于java语言中的变量: 1、方法体中的java代码,是遵守自上而下的顺序依次执行的,逐行执行。 第一行; 第二行; 第三行; 特点:上一行的程序不结束,下一行永远不会执行。 2、在同一个"作用域"当中,变量名不能重名。但是变量可以重新赋值。 */ public class VarTest02{ public static void main(String[] args){ int i = 100; System.out.println(i);//100 i = 200; System.out.println(i);//200 //以下代码顺序执行有错误,应该先声明赋值再访问。 // System.out.println(k); // int k = 300; //以下代码重复声明相同类型,相同名字的变量,在java中是不允许的,要和javascript区别开 // int i = 90; // System.out.println(i); } }
/* 关于java中的变量: 变量的作用域: 1、什么是作用域? 变量的作用域,其实描述的就是变量的作用域范围。 在上面范围之内是可以被访问的,只要出了这个范围该变量就无法访问了。 2、变量的作用域只要记住一句话: 出了大括号就不认识了。 */ public class VarTest03{ // 注意:这里的static不要去掉 static int k = 90; public static void main(String[] args){ // 变量i的作用域是main方法 // 在整个main方法当中是有效的,可见的,可访问的 int i = 100; System.out.println(i);//100 System.out.println(k);//可以访问k 90 // 以下会编写一个for循环语句 // 这个for循环后面的控制语句,后面再说。 for(int a=0;a<10;a++){//a变量的作用域是整个for循环,循环结束后,a变量的内存就释放了 } // 这里访问不了a变量 // System.out.println(a); int j;//j变量的作用域是main方法,不是for循环 for(j=0;j<10;j++){ } System.out.println(j);//10 } public static void dosome(){ // 这里无法访问main方法当中的变量i // 已经出了i变量的作用域 // System.out.println(i); // 可以访问k System.out.println(k); } }
/* 关于变量的分类: 根据变量声明的位置来分类: *局部变量 -在方法体当中声明的变量叫作局部变量。 *成员变量 -在方法体外【类体内】声明的变量叫作成员变量。 在不同的作用域当中,作用域是可以一样的。 在同一个作用域当中,变量名不能重名。 */ public class VarTest04{ // 成员变量 int k = 200; // 主方法入口 public static void main(String[] args){ // i是局部变量 // int i = 10; // java遵循就近原则 System.out.println(i);//100 } //这属于成员变量 去掉static之后 main中就访问不到类体中的i变量了 static int i = 100; // 类体汇总不能直接编写java语句【除了声明变量之外】 // System.out.println(i); // dosome方法 public static void dosome(){ // 局部变量 int i = 90; } }