第一章计算机系统概述
1.1标识符和保留字
标识符:编程中的各种单词
自定义的标识符可以是任何字母、数字、下划线(_)和美元符号的组合,但不以数字开头
保留字:具有特殊意义的标识符 eg.abstract,do,package,this,throw,public...
Java是大小写敏感的:类名首字母大写,常量全部字母大写,方法用小写
1.2注释
/*
*/用于多行注释
/**
*/对文档的注释
1.3编程语言级别
低级语言:机器语言,汇编语言
还有高级语言,汇编语言
每种CPU都有自己的汇编语言
1.4面向对象的软件原理
每个对象都有自己的状态和行为,状态由对象的属性定义,而行为由对象的方法定义
类就是对象的蓝图。由一个类可以得到多个对象,一个对象必定属于某一个类
对象必须封装起来,使得只能通过对象的方法才能改变对象的状态
1.5源文件
源文件是没有生成字节码前的文件,以.java结尾,而编译后的文件以.class结尾
第二章 数据和表达式
2.1print和println方法
System.out.println();其中System是一个类,out是类里的一个对象,调用了println方法
println方法将信息输出后 将光标移动到下一行起始处,print方法只会输出信息
2.2字符串拼接
" "+" " 和 " "+a 空字符串加上其他标识符会将其自动转化为字符串
经典例题:
int a = 15; int b = 21; int c = a+b; String s = "ab"; String string = a+b+s+c;//a+b此时不是字符串,而是运算式 System.out.println(string);
运行结果: 36ab36
int a = 15; int b = 21; int c = a+b;//c=36; String s = "a+b"; String string = s+a+b+c;//此时a,b,c均按照字符串打印出来 System.out.println(string);
运行结果: a+b152136
从左向右打印,字符串仅将后面的当作字符串,前面的依旧运算后再打印。
需要注意的是字符串里的照着引号内打出,并不计算。
2.3转义序列
\t 制表符 空8个空格
\n 换行符
2.4基本数据类型
八种基本数据类型:4种整型(byte,short,int,long),2种浮点型(float,double),字符型(char),布尔类型(Boolean)
float和double区别:float是4个字节,存在七位有效数字,double是8个字节,存在十五位有效数字
无论小数点后几位,小数都是默认double类型,整数默认int类型
eg.float a = 1.3456446846464f(或者F); 打印a为1.3456447(即小数点后第七位出现了四舍五入)
char型' 'char型不可为空
注意:String不是一个基本数据类型,而是一个类
2.5算数运算符
求余运算返回值的符号与被除数符号一致,a=q*b+r 其中a是被除数,b是除数(a%b)结果符号与a保持一致
eg.
int a = 7; int b = -3; int c = a%b; System.out.println(c);
运算结果:1
int a = -7; int b = 3;//或b=-3 int c = a%b; System.out.println(c);
运算结果:-1
2.6运算符优先级
优先级:()>算数运算符>赋值运算符
经典例题:若出现若干数字,其中有加减和乘除,那么如何编写程序运算呢?
提示:分情况讨论,若只有三个数字参与运算,则只有两种情况,要么先算前面的,要么先算后面的,先算后面的仅有一种情况,即第一个运算符是加减后面的是乘除,这种情况使用与句,a+b*c,则将b=b*c三个数的运算转化为a+b;另一种情况是从左往右算,这样的话a op1 b op2 c,使a=a op1 b,op1=op2,b=c;此时也将三个数的运算转化为了a与b的运算。
若数字不止三位,那么可依次向后读取,如a*b+c/d,经过上面的运算,我们已经将其转化为a+c/d,再经过一次上面的运算,则又是a op1 b的形式,继续读取和计算,即可达到计算包含若干数字的无括号运算,由于重复用到上述过程,则需for循环。
while (scanner.hasNextLine()) { String[] str = scanner.nextLine().split(" "); a = Integer.parseInt(str[0]); op1 = str[1]; b = Integer.parseInt(str[2]); //for循环由此开始,一次读取三个数字,两个运算符 for(int i = 3;i < str.length-1;i += 2) {//注意数组的length方法 op2 = str[i]; c = Integer.parseInt(str[i+1]); if ((op1.equals("+") || op1.equals("-")) && (op2.equals("*") || op2.equals("/"))) { if (op2.equals("*")) { b = b * c; } else if (op2.equals("/")) b = b / c; } else { switch (op1) { case "*": a = a * b; break; case "/": a = a / b; break; case "+": a = a + b; break; case "-": a = a - b; break; } b = c; op1 = op2; } }//for循环到此结束此时式子全部转化为a op1 b的形式 switch (op1) { case "*": a = a * b; break; case "/": a = a / b; break; case "+": a = a + b; break; case "-": a = a - b; break; } System.out.println("result = " + a); }
2.6自增自减运算符
前缀和后缀的区别:
int count = 15;
total=count++;//count将值先赋给total,再加一,即total为15,count为16
total=++count;//count先加一,变为17,再将值赋给total,total为17
2.7类型转换的安全性
容量:byte 压缩类型转换将丢失信息,尽管扩展类型转换不会丢掉信息,但int(long)转换为float或者long转换为double类型时,最低有效位数字可能丢失,因为浮点型虽然容量大,但有效位数比long小 注意:byte或short转化为char类型时,虽然为扩展类型转换,但byte或short可能为负整数,转化为无正负的字符值时其数值发生改变,甚至与原来数值无关。 2.8数据类型转换技术 数据转换的方式有三种:赋值类型转换,提升类型转换,强制类型转换。 赋值类型转换只能为扩展类型转换; 提升类型转换:result=sum/count,sum为浮点型,count为整数型,则count会自动升级为浮点型 强制类型转换:dollars=(int)money/count;money为浮点型,但被强制转换为整数型,然后做除法 注意:强制类型转换符优先级高于算术运算符,先转换,可能再自动升级 2.9Scanner类 Scanner类中的一些方法: String next()以字符串类型返回下一个输入数据项 String nextLine()以字符串类型返回当前行剩余的所有输入数据项 byte nextByte()以字节类型返回下一个输入数据项 ....其他基本数据类型以此类推 如果要读取文件,代码可以为: String filename = “ ”; Scanner scanner = new Scanner(new File(filename)); }while (scanner.hasNextLine()) {
String[] str = scanner.nextLine().split(" ");
a = Integer.parseInt(str[0]);
op1 = str[1];
b = Integer.parseInt(str[2]);