不知不觉,十月份要结束了,趁着周末对这个月的学习进行总结和整理。
一、有关Java的学习
这个月在Java上花费的时间最多,在b站上跟着秦疆老师系统的过了一遍JavaSE,把Java中的基础中的基础过了一遍。总体感受就是各个编程语言都是互通的,只不过是每个语言有不同的语句格式,但是能够实现同样的功能。Java是一个面向对象的编程语言,主要是通过抽象出一个一个的类,然后对各个类进行定义,从而使其各司其职,共同完成一项任务。我是在IDLE开发平台上对Java中的程序进行编写。通过基础的学习,我深刻的体会到一个小的项目在声明各个类时规范的重要性,从新建project->package->Module->class。一层一层的把所有命名都规范化,在需要更改或 *** 作某一程序使,可快速找到。有关内容的收获,主要从以下几个模块进行总结:
(1)注释、标识符、关键字、数据类型、变量、常量:这些内容和C语言中的内容十分相似。
注释,也是用双斜杠注释一行,用来注释一段代码,之前在编码的时候,总是凭借着自己脑海里的思路,把它写成代码,而没有进行注释,说明这些代码的意思是什么。等到过几天再回头看代码时,很难想起来这些代码的思想和含义,所以在这部分的收获就是能够及时的对编写的代码进行注释,以防过后回过头再看代码时,想不起来是什么意思,这也方便让他人去读懂自己的代码,毕竟代码是写给人看的。
标识符、关键字:标识符通俗易懂,就是我们在程序中定义一个变量或者是一个常量时,我们需要起一个别称用来代替它,就比如我们的名字,可以用一个学号来标识;关键字是编程语言系统内部定义好的,我们在声明标识符时,不能够和关键字一样。在声明标识符时使我养成了一个遵循驼峰原则的好习惯。
数据类型:在java中的数据类型主要包括八大数据类型,与数字有关的有int、byte、double、float、long、shot,这些数据类型的取值范围不同,如果我们要用一个变量存储较大的数时,我们就需要根据情况,选择一个能够存储这个数,不会发生溢出的类型。与逻辑有关的有boolean,返回值只有True或False,在C语言中是bool,所表示的意思一样。与字符有关的有char,String。单个字符用char,一串字符用String。
变量、常量:在了解了以上几个的定义时,就可以定义一个变量,或者是常量,在定义常量时,用到的关键是final,在C语言中则没有。我们在声明一个变量或者是常量时,我们还可以设置其是为公有public,还是私有private,还是静态static,还是保护类型protected。
(2)运算符、位运算符、三元运算符、逻辑运算符:运算符这些貌似在每一个语言中的用法都没有太大的区别:
运算符:我们所熟知的+、-、*、/、%(取余),除此之外还有++,--,取余这个运算,我在刷ACM题时频繁的用到,它与求偶数,奇数,素数,多位数拆分,位数等都有直接的联系。++、--的计算方式和C语言中的一样,i++就是先参与运算再加一,++i是加一再参加运算。这两个用到的也比较多,比如在在for循环中,可以作为循环变量的改变条件,我们也可以在一个程序中用于标记某一项事物的数量。在遍历数组中也会用到++这个运算符。
位运算符:主要是&,|,^,~,<<,>>位运算符是直接和二进制打交道的,我们存储到计算机中的数据都是以二进制进行存储的,那我们从最底层对这个进行更改是较为方便的。位运算符在之前学习编程语言时没有用到过,我也是在学Java时才接触, *** 作很简单,&的意思就是两个二进制数只有全是1的 时候才为1,其余为0。|的意思是全为0的时候才为0,其余为1。^的意思则是,对应为相同则为0,其余为1。~的意思是对应位全部取反就行。左移<<运算符其实就是乘以2的次方,右移>>运算符就是除以2的次方。位运算目前来说我似乎还没用应用到具体题目中,但既然有这个 知识点,就有它存在的价值。
三元运算符:比如x>y?a:b;意思就是x是否大于y,若为真,则取值为a,若为假,则取值为b。这个主要运用在比较两个数的大小上,或者是运用到判断两个式子之间的关系,然后从后面的两个选择中选取一个作为返回值。用的也比较多。
逻辑运算符:&&、||、!=、<、>、<=、>=。逻辑运算符的结果就两种,要么为真要么为假,我们在写程序中,肯定会判断某一个条件是否成立,那我们就需要用到逻辑运算符,&&的意思就是条件两边都为真才为真,||的意思是条件两边全为假时才为假。其它的就是我们在数学运算中经常用到的。
(3)流程控制语句,主要包括顺序,选择,循环结构,这是编程的三大特点,在每个语言中都适用。语句主要有for、while、do-while、switch。
for循环语句在遍历一个数组,输出一些有意义的数字,都提供了很大的便利,还有嵌套循环是在for循环的内部再设置一个for循环,在实际应用中,我们可以进行二维数组的输入输出,排序算法,九乘九乘法表的输出,for循环主要用于实现一些我们知道循环次数的程序。
while循环语句与for循环有相同之处也有不同之处,相同之处在于,在特定循环次数的条件下这两个的功能一样的,但是在循环次数不确定的条件下我们无法运用for循环进行实现,我们可以通过while,当条件为真时我们就可以一直循环,不用理会它的循环次数。
do-while又是和while很相似的东西,但是do-while与众不同的地方在于他至少会执行一次循环体。即无论条件成立不成立,它都会先执行一次循环体再进行条件的判断。
switch是一个多分支语句,主要由case,break,default关键字组成。它的应用主要是讲一个例子分成多个段落,当判断的内容对应于某一段时,就会执行后面的语句。比如成绩判定分为优良中差,我们就可以划分多个分数段来判定到底执行哪一个case后面的语句。在使用switch特别要注意的是每一个case后面都跟一个break,这样就会避免程序继续去执行下面的case,switch在执行时,遇到break才会循环,若都没有break,则会执行到default才停止。
在这里顺便说一下break和continue这两个关键字,他们经常和循环进行搭配使用。break的意思是终止这一层的循环,也就是离他最近的这个for循环停止了,不用在执行了,而continue则是从结束这一趟的循环,继续本层for循环的下一轮。根据实际情况的不同我们可以自己选择。比我们要找一个数组中的某个数,我们希望的是在第一次找到这个数时,就不需要接下来的循环了,因为已经找到了我们要找的数,所以选择用break。而如果我们想要找这个数在这个数组中出现的次数,我们就需要用到cotinue,找到就继续下一次查找。
(4)方法的定义、调用、重载、递归、形参实参,static关键字。java中的方法其实和C语言中的函数是一样的。之所以叫做方法,我个人理解是因为它是定义在类中的,类中的方法就是这个类对象的行为。
方法的定义,我们是用修饰符(public private static)等表示访问这个方法的方式,然后才是返回值类型(int void char)等,再接着是函数名,然后跟着形参。再用一个花括号,在里面写这个方法能实现什么,能做什么。比如定义一个方法
public static void eat(){System.out.println("吃饭");}这个方法的名字叫做eat,无返回值(void),是一个公有的静态方法。
方法的调用,其实这些东西都是互相关联的,当我们把一个方法写好之后,我们就可以来调用这个方法,以实现我们的需求。当一个方法被static关键字修饰时,我们在这个类中,不需要创建对象,可以直接调用这个方法,在这个方法中不能调用非静态的方法。通常我们在调用一个方法时,我们都会先实例化一个类的对象,通过对象去调用这个方法。
方法的重载,我们可以定义许多方法名相同的方法,只要保证他后面的形参的个数不同或者是形参的类型不同即可,方法的返回值可以相同也可以不同。在我们调用方法名相同的方法时,主要根据我们传递给它的参数的不同,来决定调用哪一个方法,这就是多态。
方法中的递归,我们在方法中调用本身就是递归,递归需要有递归终止条件,即什么时间我们要停止递归,还要有递归体,即每一次递归所需要执行的东西,n的阶乘,斐波那契数列等都用到了递归的思想。
方法名后面的形参,也就是形式参数,是我们在声明一个方法时,所需要用到的参数,当在调用的时候,可以通过实际参数传进来,进而实现参数的真正意义。方法后面是否有形参要根据情况,可有可无。
static这个关键字是我们在每一个类中都会碰到的,并且使用比较频繁。它可以用来修饰一个方法,也可以用来修饰变量或者是常量。当声明一个方法时,如果使用static,意思是如果没有创建类的对象,我们可以直接通过这个方法名来调用这个方法。而非静态的方法,需要创建一个类的对象来调用,而不能直接通过方法名进行调用。
(5)java中的数组,它和C原因类型的数组声明不一样,格式是:数据类型【】数组名,而C语言时数据类型 数组名【】,初始化时,需要用到new关键字。在学习数组的过程中,我掌握了稀疏矩阵的实现,将二位数组转换为稀疏矩阵,然后稀疏矩阵再转换为二维数组。在刷题的时候,也用到了这个思想,题目是这样的,在一个二维数组中,找出一个数在本行是最大的,在它所在的这一列是最小的,如果能找到,则输出它所在的行和列。
(6)面向对象,类的创建,类的实例化、构造器、三大特性。java是一门面向对象的编程语言,C语言是一个面向过程的编程语言,这是他们之间的差别,除此之外,java中主要通过一个一个的类,来实现各种人们 所需的功能。
类的创建及实例化:所谓类就是把一类事物抽象出来共有的部分,比如,学生,老师,工人,我们可以抽象出来一个类,这类叫做人。这是我个人的理解。创建类时,我们用修饰符 class关键字 类名,进行定义。定义完一个类之后,我们可以对这个类进行实例化,及声明一个该类的对象,这称作一个类的实例化,在进行类的实例化的同时,其实系统隐士的调用了一个叫做的构造器的东西。它是由class 类名组成的一个方法,里面没有什么东西,主要是对类中的属性进行初始化。一旦创建对象,我们就自动的调用了这个函数。当我们声明一个有参的构造器时,必须要显式的声明无参构造方法。
有关构造器,其实就是当我们在实例化一个类时,系统自动对对象的属性进行初始化。它的名字和类名相同,没有返回值,默认为无参构造,若声明有参构造,必须要显示定义无参构造。
封装,就是将每一个类进行封装,各自实现不同的功能,一起实现一个大的功能群体。封装的时候,我主要学到了get和set的用法,即当我们在声明一个类之后,若定义属性,则一般将其私有化,这样外部就无法直接访问我们设定的私有属性,无法直接对其更改或赋值,这是可以在类的内部,声明两个方法,一个用于给私有属性进行赋值,一个用于读取赋值后的结果。在类的外部可以通过访问这两个方法,间接地访问类的私有属性。
继承,子类可以继承父类,关键字是extends,父类拥有的公有属性和方法,可以被子类所继承,在此基础上,子类还可以声明一些自己特有的属性和方法,在声明方法时,子类可以声明和父类相同的方法,这就是方法的重写,它和重载不一样,方法重写时,方法名,返回值类型,参数列表都要和父类中的保持一致,方法体中实现的功能,可以根据自己所需进行定义。继承中涉及到的东西比较多,比如修饰符public,protected,private,default,object(所有类的父类,所有类都继承这个类),java中的继承只能是单继承,一个类只能继承另一个类,一个类也可以被多个子类所继承。super关键字的意思是我们所继承的那个父类的对象,而this关键字指的是我们当前这个类本身,关于继承,大概基础阶段就学到了这么多东西。
多态,实际上就是父类的引用指向子类的对象。个人理解即我们在实例化一个子类的对象时,我们把这个对象的类型声明为父类,多态的使用通常和方法重写挂钩,主要是看我们实例化的哪个对象。当我们想要转换对象的引用时,子类名称 子类对象名=(子类名称) 父类对象名;我们要知道,当转换之后,子类对象可以访问子类中特有的方法,若没有转换,则只能访问父类和子类中都有的方法。
关于Java的基础学习,十月份基本上就是这些内容,下个月将结合一个具体的案例,来联系前期所学过的基础。
这个月的课比较多,特别是最后一周,基本上每天晚上都有课,没有完整的时间去学一些东西。刚开了一门大数据分析与云计算,让装虚拟机都装了三天。深刻教训就是,一定要将电脑的系统装好之后,再进行其他的 *** 作,如果没有一个稳定的 *** 作系统,一旦重装系统,东西都需要重新安装,重新配置。VMware在网上找了一些安装步骤,跟着安装了四五遍,才知道了安装的流程,然后就是ubuntu的安装,一直失败,安装了一个晚上结果白费,特别浪费时间,但好在,经过几天的安装,最终还是给安装上了。
最后这一周借了三本书,一本算法设计与分析,一本Python语言,一本数据结构与算法。
刚开始看数据结构与算法,之前学的都是理论的知识,从来没有上机实现过,下个月的目标就是要把借的数据结构与算法这本书中的所有算法案例代码,全部用C语言进行上机实现,这是十一月份的主要任务,再有一个就是学习Java的进阶课程,在b站上跟视频。课程表较多,再兼顾到各个学科,已经是很不粗了,接下来的一个月,继续加油。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)