目录
编辑器+编译器
初级编辑器:记事本
1、新建记事本,.txt强转后缀名为.java(源文件),输入类代码
2、保存:由于编辑器编辑的源文件含中文,需要将保存类型改为所有文件,将编码方式从UTF-8改为ANSI(暂时我也不知道为啥,后期有时间求证)
3、编译器编译:利用命令行窗口进行编译+运行
其中,编译代码为:
javac Welcome.java
运行代码为:
java Welcome
中级编辑器:notepad(原理和初级编辑器相同)
高级工具(全包了):集成开发环境(Intergrated Development Environment, IDE)
其实我们可以将源文件代码看成一篇文章,文章分为段落,句子,词汇,标点符号。
标点符号主要有
本章来看句子和词汇。
句子
三种流程控制语句能表示所有的事情:变量、选择、循环
变量
(强类型语言java)声明变量类型:变量类型 变量;
(使用时必须)初始化:变量 = ..;
当然,也可在声明的时候直接初始化:变量类型 变量 = ..;
拆解来看,变量、常量为“名词”;=号是“动词”,在编程中我们可以称之为运算符。
名词
自动转换
容量小的数据类型可以自动转换为容量大的数据类型
/**
*文档说明
*@
*/
public class zuoye {
int a=3;//成员变量,从属于对象
static int b=4;//静态变量,从属于类
public static void main(String[] args){
//这是单行注释
/*这是多行注释,注意不能嵌套
System.out.println("要说技术哪家强");
System.out.println("当属中国尚学堂");
System.out.println("学堂一支穿云箭");
System.out.println("万水千山来相见");
*/
//局部变量,因为它在方法里面(从属于方法)
int c =015;
int d;//只是声明了变量d,没有初始化
System.out.println(c);
d=1;//变量使用之前,必须初始化
System.out.println("d的值为"+d);/*这个加号是连接的意思*/
/*局部变量:首字母小写和驼峰原则*/
//常量
final double PI=3.14;
//再重新赋值PI=3.1415会出错; //无法为常量再次分配值;
final int MAX_SPEED=120;
//常量的命名:全用大写字母,单词之间下划隔开
/*字符常量;符号常量
final+变量=常量
*/
long yearSalary=300000000000L;//超过21亿,但数字30...默认为整型,需要后面加L表示长整型
double d1=3.14E2;
float f1=1.65F;//同上,数字1.65默认为double型,需要后面加f表示浮点型
double d2=16.5/10;
System.out.println(f1==d2);
char c1='a';
char c2='中';
System.out.println(c1);
System.out.println(c2);
}
/*变量(Variable):停车位
常量(Constant):一生只爱一个人,一生只赋一个值
8种基本数据类型:数值型(整数类型byte1字节-8比特256个状态(256种字符)、short2(65536)、int4(21亿)、long8;浮点类型float4、double8)、字符型、布尔型
整数默认为int
浮点数存在舍人误差,数字不能精确表示,一般用double(BigDecimal)
小数(浮点数/浮点常量)默认为double
*java中字符串不是基本数据类型,而是一个类
*/
//保存可默认编译用UTF-8;有中文保存时编译用ANSI
//编译完,如果源文件有几个类,那就有几个字节码文件
}
动词
1二元运算
1.1括号运算符()
1.2算术运算符*,/,%;+_
二元运算符的运算规则
(默认声明int)整数运算结果默认是int,除非有(>=1个)操作数是long(结果为long)
int d2 = 32 /3 ,结果为10
(默认声明int)取模运算的结果余数为整数,结果余数符号和左边操作数相同:7%-3=1
int d2 = 32 % -3 ,结果为2
(默认声明double)浮点运算(操作数一个为double)结果默认是double,除非两个操作数都是float(结果为float)
double d2=32.0 /3 ,结果为10.66666...
温馨提示:Java是强类型语言,必须要声明变量类型(说的第二遍)
加加++
g=10;
int h = g++;
System.out.println(h);//结果为h=10,先赋值h=g=10,后自增g=g+1=10+1=11
g=10;
int i = ++g;
System.out.println(i)//结果为i=11:先自增g=g+1=10+1=11,后赋值i=g=11
加号+
含义1:加法;含义2:字符串String连接符
String a= "3" ;
int b =4 ;
System.out.println(a+b);//输出为34,但注意它不是数字34,而是字符串3和数字4
字符
char c1 = 'h' ;
char c2 = 'i' ;
System.out.println(c1+c2);//结果为209,其中h的值为104,i的值为105(ASCII值)
System.out.println(""+c1+c2);//结果为hi
强制转换(如取整)
double a = 3.14159 ;
int b = (int)a ;//浮点数强转为整数,直接丢失小数部分,可做取整功能
System.out.println(b);//结果为3
超出表数范围,转成一个没有意义的值
tips:操作比较大的数时,注意是否会溢出
int money = 1000000000;
int years = 20;
int total = money * years;//溢出,结果为200亿,int只有21亿的位置
long tatal1 = money * years;//解决方案1溢出,相乘结果溢出,再赋给long类型的tatal无济于事
long tatal2 = money * ((long)years);//解决方案2正确,引入long类型因子,使相乘结果为long类型
//long tatal2 = 1L * money * years;
2、逻辑运算
输出的是true和false,布尔值(boolean)
两个常量值:true和false,作用:做逻辑判断
占1个或4个字节(一般是4),不可以使用0或非0替代true和false(java特点,区别于c)
2.1、关系运算符>,>=;==;!=
布尔值boolean比大小
int a = 32;
int b = 4;
boolean c = a>b;
System.out.println(c);//输出结果为true
char d = 'h' ;//可以用System.out.println((int)d);查看char的“值”为104,即h的ASCII码值
boolean e = d>100;
System.out.println(e);
char d = 104 ;//字符的两种赋值形式
2.2、逻辑运算符
与&、短路与$$、或|、抑或^
逻辑运算符位运算
位运算指的是二进制位的运算
与&、或|、抑或^,与boolean值逻辑运算符相同
<<左移运算符(相当于乘2);>>右移运算符(相当于除2取商),乘除以2最快。
int a = 7;//0111
int b = 8;//1000
0111
1000
0000//System.out.println(a&b);0111与1000的结果为0000,转换为10进制输出为15
1111//System.out.println(a|b);0111或1000的结果为1111,转换为10进制输出为15
1111//System.out.println(a^b);0111抑或1000的结果为1111,转换为10进制输出为15
正数8取反:
错误答案:0111为7//System.out.println(~b);输出结果为-9
正确答案:
8的原码:01000(符号位)
8的原码的反码:10111(反码:取反)
8的原码的反码的补码:(取反)11000+1=11001(补码:符号位不变其余位取反,再+1)结果为 -9
拓展 负数-8取反:
-8的原码:11000
-8的原码的补码:10111+1=11000
-8的原码的补码的反码:00111,结果为 7
总结,添符号位,正数先反后补(负数先补后反),但更多的问题来了,溢出?
3、条件运算符?:
String a = x?y:z//x为true,则返回y,否则返回z,等同于
if(x){
a=y;
}else{
a=z;
}
段落
循环语句
四步走(for和while本质相同,直接粘也可):
while
初始化部分
while(布尔表达式){
循环体;
迭代因子;
}
for
for(初始表达式;布尔表达式;迭代因子) {
循环体;
}
有用工具
有用工具1:continue和break
continue,结束本次循环,继续下一次
break,结束整个循环,终止
continue标签
特别的,Java没有goto标签,不会像c语言那样乱跳
只有一个地方能实现类似功能,即带标签的continue
//打印101~150之间所有的质数
public static void main(String[] args){
outer:for (int i = 101 ; i < 150 ; i++){
for (int j = 2 ; j < i / 2 ; j++){
if ( i % j == 0)/*计算能不能被整除*/{
continue outer;//符合条件,跳到外部循环继续(如果没有用标签不会跳,继续 在本部进行下一轮循环)
}
}
System.out.print(i + " ");
}
}
有用工具2:计数器
选择语句
if
初级版
if (布尔表达式){
语句块
}
if语句不写{},则只能作用于后面的第一条语句;tips:任何时候都写上{},即使只有一句话
中级版(双分支)
if(布尔表达式) {
语句块1;
}else{
语句块2;
}
高级版(多分支)(搞定这个就行)
if(布尔表达式) {
语句块1;
}else if {
语句块2;
}else {
语句块3;
}
switch
switch (表达式) {
case 值1:
语句块1;
break;
case 值2:
语句块2;
break;
default:
默认语句块;
}
与if的关系:本质一样,布尔表达式为判断相等,但switch判断相等更直观;等价if如下:
if(表达式==case1){
语句块1;
}else if(表达式==case2){
语句块2;
}else{
默认语句块;
}