书写注释是一个非常好的习惯
注释并不会被执行,是给我们写代码的人看的
单行注释 //我是单行注释
多行注释 /*我是多行注释
我是多行注释*/
文档注释 //JavaDoc:文档注释 /** */
/** * @Description HelloWorld * @Author haohao_不秃头 */
概念:就是用于给程序中的变量、类、方法命名的符号;
Java 所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。
标识符规则:
可以使用中文命名,但是一般不建议这样使用,也不建议使用拼音,很Low
java中包含50个关键,所有关键字都是小写的
三个特殊的直接量(iteral);true false null 都不是关键字
abstract | assert | boolean | break | byte |
---|---|---|---|---|
case | catch | char | class | const |
continue | default | do | double | else |
enum | extends | final | finally | float |
for | goto | if | implements | import |
instanceof | int | interface | long | native |
new | package | private | protected | public |
return | strictfp | short | static | super |
switch | synchronized | this | throw | throws |
transient | try | void | volatile | while |
关键字 | 含义 |
---|---|
abstract | 表明类或者成员方法具有抽象属性 |
assert | 断言,用来进行程序调试 |
boolean | 基本数据类型之一,声明布尔类型的关键字 |
break | 提前跳出一个块 |
byte | 基本数据类型之一,字节类型 |
case | 用在switch语句之中,表示其中的一个分支 |
catch | 用在异常处理中,用来捕捉异常 |
char | 基本数据类型之一,字符类型 |
class | 声明一个类 |
const | 保留关键字,没有具体含义 |
continue | 回到一个块的开始处 |
default | 默认,例如,用在switch语句中,表明一个默认的分支。Java8 中也作用于声明接口函数的默认实现 |
do | 用在do-while循环结构中 |
double | 基本数据类型之一,双精度浮点数类型 |
else | 用在条件语句中,表明当条件不成立时的分支 |
enum | 枚举 |
extends | 表明一个类型是另一个类型的子类型。对于类,可以是另一个类或者抽象类;对于接口,可以是另一个接口 |
final | 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量 |
finally | 用于处理异常情况,用来声明一个基本肯定会被执行到的语句块 |
float | 基本数据类型之一,单精度浮点数类型 |
for | 一种循环结构的引导词 |
goto | 保留关键字,没有具体含义 |
if | 条件语句的引导词 |
implements | 表明一个类实现了给定的接口 |
import | 表明要访问指定的类或包 |
instanceof | 用来测试一个对象是否是指定类型的实例对象 |
int | 基本数据类型之一,整数类型 |
interface | 接口 |
long | 基本数据类型之一,长整数类型 |
native | 用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的 |
new | 用来创建新实例对象 |
package | 包 |
private | 一种访问控制方式:私用模式 |
protected | 一种访问控制方式:保护模式 |
public | 一种访问控制方式:共用模式 |
return | 从成员方法中返回数据 |
short | 基本数据类型之一,短整数类型 |
static | 表明具有静态属性 |
strictfp | 用来声明FP_strict(单精度或双精度浮点数)表达式遵循[IEEE 754](https://baike.baidu.com/item/IEEE 754)算术规范 |
super | 表明当前对象的父类型的引用或者父类型的构造方法 |
switch | 分支语句结构的引导词 |
synchronized | 表明一段代码需要同步执行 |
this | 指向当前实例对象的引用 |
throw | 抛出一个异常 |
throws | 声明在当前定义的成员方法中所有需要抛出的异常 |
transient | 声明不用序列化的成员域 |
try | 尝试一个可能抛出异常的程序块 |
void | 声明当前成员方法没有返回值 |
volatile | 表明两个或者多个变量必须同步地发生变化 |
while | 用在循环结构中 |
java的数据类型分为两大类
String不是属性类型,是类
位(bit):是计算机 内部数据 储存的最小单元,11001100就是一个八位二进制数
字节(byte):是计算机中 数据处理 的基本单位,习惯用大写B来表示
字符:是指计算机中使用的字母、数字、字和符号
思考:电脑的32位和64位的区别是什么呢?
System.out.println(0.2 + 0.1); System.out.println(0.3 - 0.1); System.out.println(0.2 * 0.1); System.out.println(0.3 / 0.1);
输出:
0.30000000000000004 0.19999999999999998 0.020000000000000004 2.9999999999999996
BigDecimal简介
构造器描述
方法描述
在Java中,值类型表示的是这种数据类型的值代表数据本身。八种基本数据类型就是值类型,基本数据类型都是直接存储在内存中的内存栈上的,数据本身的值就是存储在栈空间里面。
引用类型是通过class来定义的类型,除了八种数据类型之外的所有类型都是引用类型。引用类型继承于Object类(也是引用类型)都是按照Java里面存储对象的内存模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储,简单地讲,“引用”是存储在有序的内存栈上的,而对象本身的值是存储在内存堆上的。
从低位类型到高位类型可以自动转换,从高位类型到低位类型需要强制类型转换,另外,目标类型需能与源类型兼容。
public class Test { public static void main(String[] args) { int price = 3; double finalPrice = price; System.out.println(finalPrice); System.out.println(price+finalPrice); /*输出结果: 3.0 6.0*/ } }
特殊情况:
Animal cat = new Cat();
public class Test { public static void main(String[] args) { double finalPrice = 3.25; int price = (int)finalPrice; System.out.println(price); //输出结果:3 //损失了部分数据 } }
语法与上述相同,需要注意若转换后在运行时实际不是对应的对象,会抛出ClassCastException运行时异常。
Animal animal = new Cat(); Cat cat = (Cat)animal;
注意点:
不能对布尔值进行转换
不能把对象类型转换为不相干的类型
在把高容量转换为低容量时,强制转换
转换的时候可能存在内存溢出,或者精度问题
type varName [=value] [{,varName[=value]}]; //数据类型 变量名 = 值;可以使用逗号隔开来声明多个同类型变量 //不提倡同时声明多个变量,要分开写 int a, b, c; int a=1, b=2, c=3; //程序可读性
public class Variable { static int allClicks = 0; //类变量 String str = "hell world"; //实例变量 public void method(){ int i = 0; //局部变量 } }
实例
import java.io.*; public class Employee { //salary是静态的私有变量 private static double salary; // DEPARTMENT是一个常量 public static final String DEPARTMENT = "开发人员"; public static void main(String[] args){ salary = 10000; System.out.println(DEPARTMENT+"平均工资:"+salary); } }
以上实例编译运行结果如下:
开发人员平均工资:10000.0
实例
import java.io.*; public class Employee{ // 这个实例变量对子类可见 public String name; // 私有变量,仅在该类可见 private double salary; //在构造器中对name赋值 public Employee (String empName){ name = empName; } //设定salary的值 public void setSalary(double empSal){ salary = empSal; } // 打印信息 public void printEmp(){ System.out.println("名字 : " + name ); System.out.println("薪水 : " + salary); } public static void main(String[] args){ Employee empOne = new Employee("haohao"); empOne.setSalary(1000.0); empOne.printEmp(); } }
以上实例编译运行结果如下:
$ javac Employee.java $ java Employee 名字 : haohao 薪水 : 1000.0
实例 1
在以下实例中age是一个局部变量。定义在pupAge()方法中,它的作用域就限制在这个方法中。
package com.runoob.test; public class Test{ public void pupAge(){ int age = 0; age = age + 7; System.out.println("小狗的年龄是: " + age); } public static void main(String[] args){ Test test = new Test(); test.pupAge(); } }
以上实例编译运行结果如下:
小狗的年龄是: 7
实例 2
在下面的例子中 age 变量没有初始化,所以在编译时会出错:
package com.runoob.test; public class Test{ public void pupAge(){ int age; age = age + 7; System.out.println("小狗的年龄是 : " + age); } public static void main(String[] args){ Test test = new Test(); test.pupAge(); } }
以上实例编译运行结果如下:
Test.java:4:variable number might not have been initialized age = age + 7; ^ 1 error
final 常量名 = 值; final double PI = 3.14;
package pkg1[. pkg2[. pkg3...]]
一般利用公司域名倒置作为包名 com.baidu.www
为了能够使用某一个包的成员,我们需要在 java 程序中明确的导入该包,使用“import”语句即可完成此功能
import package1[.package2...].(classname |*)
javadoc命令是用来生成自己API文档的
参数信息