Java笔记 01
1 Java程序的运行机制
程序的运行机制分为两种:
- 编译型
- 解释型
两者唯一的区别在于时机不同。举个例子,比如现在有一个中国人和一个外国人,两个国家的文字不同,美国人要看中国人写的书,但他看不懂,此时有两种方式阅读这本书
- 此时美国人可以将这本中文的书全部翻译成英文;
- 找一个第三方的翻译,让这个翻译把这本书翻译成英文,翻译一段,这个外国人看一段。
这两种方式都可以让这个外国人看完这本书,各有优缺点。在第一个方法中,假如书的原作者对书的内容进行了更新,则原有的翻译版本就不可用了,必须重新翻译一遍。第二个方法中第三方翻译是实时的,能够应对文章内容发生变化的这种情况。回到最初的问题,编译型就对应这个例子中的对整本书进行翻译,解释性就对应第二种方法。
编译型是将整个源码编译成计算机可执行的文件,然后在计算机上运行,这样在电脑上的执行速度较快,开发操作系统通常用这种方式去做,像C/C++语言都是编译型的;解释型通常应用在对计算机执行速度较高的场景,像网页之类的开发,Java就属于解释型语言。但现在计算机硬件发展的很快,计算机内存越来越大,导致这两种方式的区别越来越小了,现在解释型的效率也很高。
笼统地讲,Java的运行机制就是程序员首先编辑源代码,之后Java的编译器会将源代码编译成一个字节码文件,就是那个.class文件;最后提交给操作系统执行,当然中间还有一些流程,等以后学的深了我会重新回来更新这篇博客。
2 IDE集成开发环境安装
我知道的开发Java的软件有eclipse、IDEA,我装的是IDEA旗舰版(还没破解),之前就装过了,所以安装和配置流程就不写了,关于开发环境以及软件的安装网上有很多教程,随着教程一步步安装就可以,安装后可以根据自己的情况对软件进行一些优化。附两个IDEA安装和优化的链接吧,这里我是在网上随便找了两个链接,目的是提供一个关键字的指引,不知道质量如何,感兴趣的小伙伴可以根据关键字自己去搜索筛选。
3 Java基础语法
1 注释
单行注释 //
多行注释 /**/ 键入/ *之后回车即可
文档注释 /** */ 同上,键入/**后回车即可
2标识符
Java中的关键字
Java标识符
关于标识符,有几个需要注意的地方
- 所有标识符都应该以字母(大小写都可以),美元符号$,或者下划线_开始
- 首字符之后可以是字母、美元符号、下划线或数字的任意组合
- 不能使用前面说的Java关键字作为变量名或方法名
- 标识符是大小写敏感的
- 可以使用中文或拼音命名,但不建议这样使用。
3.1Java数据类型
Java是一种强类型语言,它要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用。与强类型相对的还有弱类型语言。
Java的数据类型分为两大类
- 基本类型
- 引用类型
注:浮点类型比较时尽量用相同的类型。
Java常用转义字符
\t 空格 \n 换行 \u 转义(\u后面可以跟一个十六进制数,来表示十六进制所对应的字符) …
//布尔值扩展
boolean flag = true;
if(flag==true){}
if(flag){} //两行if语句表示的含义相同,推荐使用第二种方法
3.2数据类型转换
由于java是强类型语言,所以要进行有些运算的时候需要用到类型转换。再具体运算时,不同类型的数据先转化为同一类型,然后再进行运算。
低------------------------------------->高
byte,short,char->int->long->float->double
由高到低时需要用到强制转换 (类型)变量名 //(int)10.2
由低到高时会自动转换
注:
- 不能对布尔值进行转换
- 不能把对象类型转换为不相干的类型
- 在把高容量转换到低容量的时候要进行强制转换
- 转换的时候可能存在内存溢出,或者精度问题
示例:
public class HelloWorld {
public static void main(String[] args) {
//操作比较大的数的时候,注意溢出问题
//数字之间可以用下划线分割,不影响数据的值。
int money = 10_0000_0000;
int years = 20;
int total = money*years; //结果为-1474836480,int的范围为21_0000_0000左右,计算的时候溢出了
System.out.println(total);
long total1 = (long)money*years; //在计算之前进行强制转换
System.out.println(total1);
}
}
3.3变量、常量、作用域
变量可以理解为数学应用题中假设的那个未知数x。Java是一种强类型语言,每个变量都必须声明其类型。Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。形式如下:
int a = 1;
//数据类型 名称 = 数值;
变量作用域:
- 类变量 可以在方法中直接使用
- 实例变量 在方法中调用实例变量时需要先将类引入
- 局部变量
public class HelloWorld {
//类变量 static
static double salary = 2500;
//实例变量:从属于对象。定义在类中,在方法中使用。如果不自行初始化,使用的是这个类型的默认值。
//布尔值:默认值false
//除了基本类型,其余的默认值都是null
String name;
int age;
//main方法
public static void main(String[] args) {
int i = 10; //局部变量,生命周期在它存在的两个括号内。必须声明和初始化值
HelloWorld helloWorld = new HelloWorld();
System.out.println(helloWorld.age); //输出实例变量
System.out.println(salary);
}
//其他方法
public void method(){
}
}
常量
常量为初始化后不能再改变的值。可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。
final 常量名=数值;
final double E=2.7; //常量名一般用大写表示
public class HelloWorld {
//修饰符不区分先后顺序 像static、final等
static final double PI = 3.14;
final static double PI1=3.14;
public static void main(String[] args) {
System.out.println(PI);
System.out.println(PI1);
}
}
最后总结一下变量的命名规范
-
所有变量、方法、类名要与其本身含义有相关性。
-
类成员变量、局部变量:首字母小写和驼峰原则:nextPeople
-
常量:大写字母和下划线
-
类名:首字母大写和驼峰原则 HelloWorld
-
方法名:首字母小写和驼峰原则 add()、addNext()
3.4运算符
注 =为赋值运算符;==为比较运算符,即比较两个元素是否相等。
理解++ 、-- 自增和自减的执行顺序
public class HelloWorld {
public static void main(String[] args) {
int a = 3;
int b = a++; //先赋值给b,之后进行自增
System.out.println(a); //上一行执行后a进行了自增,所以此处a的值为4
int c = ++a; //先进行自增,之后赋值给c
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
}
位运算:
public class HelloWorld {
public static void main(String[] args) {
/*
位运算
A = 0011 1100
B = 0010 0100
A&B 与运算 都是1则为1,否则为0
A|B 或运算 有一个1则为1 没有则为0
A^B 两位相同则为0,否则为1
~B 对B的每个位取反
面试题:如何快速计算2*8
逻辑运算符:<<左移 *2 >>右移 /2 位运算效率高
0000 0000 0
0000 0001 1
0000 0011 3
0000 0100 4
0000 1000 8
0001 0000 8
*/
System.out.println(2<<3);
}
}
赋值运算符:a+=b->a=a+b
字符串连接
public class HelloWorld {
public static void main(String[] args) {
int a = 10;
int b = 20;
//字符串连接符 +
System.out.println(a+b+"");
System.out.println(""+a+b);
}
}
//三元运算符
//x ? y : z
//如果x位true,则结果为y,否则为z
public class HelloWorld {
public static void main(String[] args) {
int score = 70;
String type = score<60?"不及格":"及格";
System.out.println(type);
}
}
4包机制
- 为了更好地组织类,Java提供了包机制,用于区别类名的命名空间
- 一般利用公司域名倒置作为包名 com.baidu.www
- 为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包。使用import语句即可。