20145326《Java程序设计》第二周学习总结
教材学习内容总结
本周学习教材第三章,本章主要讲述了java语言中的一些基础语法,java是个支持面向对象的程序语言,但在正式进入面向对象支持语法的探讨前,对于类型、变量、运算符、流程控制等,这些各种程序语言都会有的基本语法元素,还是要有一定的基础。虽然各种程序语言都有这些基本语法元素,但千万别因此而轻忽它们,因为各种程序语言都有其诞生的宗旨与演化过程,对这些基本语法元素,也就会有其独有的特性。
1. 类型
在java的世界中,并非每个东西都抽象化为对象,你还是要面对系统的一些特性。例如你还是要意会到内存长度有限的问题,所以程序执行时遇到123这个整数时,还是要想一下,用多少长度的内存来储存它比较经济。基本上,java可区分为基本类型和类类型两大类型系统,其中类类型也称为参考类型。
基本类型(每种类型都有其储存范围,如超出范围,即Overflow):
所谓基本类型,就是在使用时,得考虑一下数据用多少内存长度来存比较经济,利用程序语法告诉JVM,然后由JVM自动为你在内存中配置与管理。在java中的基本类型主要可以区分为整数、字节、浮点数、字符与布尔。
- 整数:可分为short整数(占2字节),int整数(占4字节),long整数(占8字节)三种,不同长度的整数,可储存的整数范围也不同。long整数占的内存长度比int整数来得多,可表示的整数范围也就比int大。例如,int类型的十进制2其实是以000000000 00000000 00000000 00000000 00000010形式存储在内存中。所占字节越多的整数类型可表示的整数范围越大。
- 字节:byte类型顾名思义,长度就是一字节,在需要逐字节处理数据时(如图像处理、编码处理等)就会使用byte类型,byte也可以用来表示整数,可表示的整数范围是-128~127。
- 浮点数:主要用来储存小数数值,可分为float浮点数(占4字节),double浮点数(占8字节)。double浮点数使用的内存空间比float浮点数来得多,可表示的精确度也比较大。
- 字符:char类型用来储存‘A’、‘B’、‘林’等字符符号。每个字符类型占2字节,汉字字符与英文字符在java中同样都是双字节储存。
- 布尔:boolean类型可表示true和false,分别代表逻辑的“真”与“假”。在java中不用在意boolean类型的长度,因为你也无法将boolean类型与其他类型做运算。
- 备注:每种类型占有的内存长度不同,可储存的数值范围也就不同。例如,int类型的内存空间是四字节,所以可储存的整数范围为-2147483648~2147483647,如果储存值超过了类型范围称为溢值,会造成程序不可预期的后果,而且我们不用记忆各种类型可储存的数值范围,可以通过API来实现。System.out.printf()是标准API,意思是对输出文字做格式化后再显示在文本模式中,一些常用的格式控制符号要熟记!(书上有表格列出) 类类型:详见第四章
2. 变量
程序语言中的暂存位置我们称之为变量,可以声明变量,也就是告诉JVM,我想要某个位置,这个位置叫做XXX名称,可以放什么类型的数据。 1. 使用前要声明变量类型,即使用上文所提到过的short,byte,char等关键词来声明 2. 变量在命名时有一些规则,它不可以使用数字作为开头,不可使用特殊字符,而且变量名称不可以与java的关键词同名,常用“驼峰式”命名法,如“int ageOfStudent”。目前为止,我们的程序范例都是撰写在main()中,在方法中声明的变量称为局部变量。 3. 不可以声明局部变量后未指定任何值给它之前就使用变量。在调用变量之前,要对变量初始化,即给变量赋值。ps:如果,在变量赋值后,不打算改变可以加上final,例如final double PI=3.1415926;来防止自己或他人不经意修改。 4. tips:在表示数字常量时,0b表示二进制数,0x表示十六进制数,如int a=0xC,在表示较长的数字时,使用下划线可以使表达更加清楚。如int b=0b1010 _1010 _1010。
3. 运算符
- 算数运算符+、-、*、/。也就是加、减、乘、除。%成为模运算符或余除运算符。算数运算符使用上与学过的加减乘除一样,也是先乘除后加减。(详情看书上例子)运算符两边各留一个空格,这样比较容易阅读。
- 数学上还有大于、等于、小于的比较运算,java中也提供了这些运算,这些运算符称为比较运算符,它们有大于(>)、小于(<)、等于(==)、不小于(>=)、不大于(<=)以及不等于(!=)等条件运算符。记住“等于”是两个等号!一个=是指定运算。java有个条件运算符,(Conditional Operator):条件式?成立返回值:失败返回值。如System.out.println("是否及格?%d%n", score>=60?'yes':'no');
- 在逻辑运算符中,有“且”“或”“反相”这几种逻辑。分别用&&(与)、||(或)、!(非)来表示。&&的特点在于如果&&左边为假,则不论右边真值如何,其逻辑判断返回结果为假;同样的,||的特点在于如果||的左边为真,则不论右边真值如何,其逻辑判断返回结果为真。这在一定的程度上还是能提高代码的编译执行效率。
- 位运算符:在数字设计上有AND、OR、NOT、XOR与补码运算,在java中提供对应的位运算符,分别是&(AND)、|(OR)、^(XOR)、~(补码)。如果不会基本位运算,可以从书上的例子找找感觉。位运算是逐位运算。补码运算是将所有位0变1,1变0。java在位运算中还有(>>)左移与(<<)右移两个运算符。左移运算符会将所有位往左移指定数位,左边被挤出去的位会被丢弃,而右边补上0;右移运算符则相反,会将所有位往右移指定位数,右边被挤出去的位会被丢弃,至于最左边补上原来的位,如果左边原来就是0就补0,是1就补1.还有个>>>运算符,这个运算符在右移后,最左边一定是补0.
- 递增递减运算我也觉得没什么难度,和c语言里的知识很类似。关键是要区分i++,++i,如果将++运算写在变量前,表示先将变量值加1,然后再返回变量值;将++写在变量后,表示先返回变量值,然后再对变量加1.(书上有例子)
- 指定运算的话,参考书上的表格就行了,没什么难度。
4. 类型转换
- 在实际操作中无论是刻意修改还是无心之失,都会出现将变量类型混淆的情况。例如,在默认情况下,整数均为int型,浮点数为double型。像在如下例子中 float PI = 3.14,3.14默认为double型,不能把double型的小数赋给float型,这样就会丢失精度,编译时就会报错。但如果非要用float来储存的话,可以在3.14后面加个F,或者float PI=(float)3.14。在程序中写下一个整数时,默认是不超过int类型长度。如果超过了,你就要告诉编译程序,用long来配置整数的长度,也就是在数字后加上个L.
- 运算时,类型不相同,则运算时会以最长的类型为主(自动提升)。当然如果操作中都是不大于int的整数,则全部自动提升为int类型进行运算。
- System.out.println(10/3);显示的是3,不是3.3333。因为10与3都是在int类型下的计算,若要表示3.333,则必须是System.out.println(10.0/3)。
5. 流程控制
- if……else我觉得很简单,直接类比c语言学的知识。
- switch:使用效果类似多个if……else语句连用,但是更为简洁,通过不同的switch值进入case语句。
- for:写成for( ……; ……; ……),第一个分号前内容多为变量初始化。第一个分号后为判断,结果为true执行第二个分号后的语句并进入循环,结果为false则结束循环。块与块之间用分号隔开,块的内部用逗号隔开。
- while do 与 do while:while(条件式){描述句},先判断条件式是否成立,如果成立,则执行描述句。也可以while(true)直接进入循环,在循环内通过if语句判断,达成某种情况依靠break;结束循环。do while与其的区别是先产生一个number(以书上例子为例),再判断要不要执行循环。而while do是直接一来就进入循环。
- break、continue:break为直接结束循环,continue为结束当前循环,跳过之后的描述语句,然后返回开头进行下一轮循环。break、continue还可以配合标签使用(书上有例子),具体过程将在程序实践中展示。
教材学习中的问题和解决过程
课后选择题:DADDABADAD
课后程序题1
运行结果: 1000和495的最大公因子是: 5 1000和495的最小公倍数是: 99000
其实感觉难度不大,因为上学期学过密码学数学基础这门课,刚好这里用到了辗转相除法的概念,在此通过while语句来实现循环,最后当余数为0时结束循环。
课后程序题2
运行结果: 153 370 371 407
我首先想到的是用for循环,通过穷举来找出100~1000中的阿姆斯特朗数,值得注意的是要用%将个位上的数分离出来,且a、b、c都是int型。其他没什么难的地方。
代码调试中的问题和解决过程
如果是continue back1,没有任何输出结果。但如果是continue back2,输出“hello world”九次。这里虽然没有展示break的情况,但是break与continue结合标签使用时,back标签都要在for之前!
其他(感悟、思考等,可选)
1.java中的基础语法和c语言中的基础语法其实并没有太大区别,所以可以类比来学习,这样会事半功倍。 2.除了掌握一些基础的知识,主要还是要多敲代码,细节决定成败,不断实践,不断发现错误,不断解决问题,这样自身能力才能提高~!
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
目标 | 3500行 | 25篇 | 300小时 | |
第一周 | 120/120 | 1/1 | 14/14 | |
第二周 | 340/460 | 1/2 | 14/28 | |
第三周 | ||||
第四周 |
参考资料
- ...