我们先来了解一下Java语言,JavaSE是Java编程语言的标准版,主要是来学习Java的基本语法,书写方式,以及一些简单的逻辑循环和判断,包括一些关键字,特殊类(抽象类),特殊的方法(static修饰的方法,final修饰的方法)等等,最重要的是Java语言是比较C语言和C++语言是比较简单的,Java是面向对象的语言,面向对象的语言的三大特性"封装","继承","多态",Java作为面向对象语言的一种,也是具有这样的特性的
Java语言的编译过程是靠JVM(虚拟机)来完成的,先把编译好的.java文件,传入的JVM中编译成.class的文件(这里的内容都是乱码,我们是看不懂的,但是机器可以),这些.class文件传入计算机进行读写,输出我们想要的内容,正因为有JVM这一步的编译使得Java代码的可移植性,比较高,虽然可移植性高,但是有利有弊,这样就使得Java代码的效率变低了,占用的空间也变大了
第一部分:基本数据类型与数组
第一小部分:类型可以分为四大类:1.逻辑类型,2.整数类型,3.字符类型4.浮点类型
1.逻辑类型:也就是boolean类型的"true""false"
2.整数类型:从小到大排序为"byte","short","int","long",我们在Java代码中长用的是int,和long最常用的是int,Java中的变量声明为 "数据类型 变量名;"例如"int num;"
3.字符类型:字符类型是用关键字"char"来声明的,要注意的是单引号('')中的是字符,双引号("")中的是字符串.也叫String类
4.浮点类型: float,和double 在Java代码中最常用的是 double 类型的,float 类型在使用的时候在后面要加上"f"或"F",比如"float num = 12.3f或 float num = 12.3F"在使用float的时候一般我们都是加"F"更好区分
第二小部分:类型转换
数据类型我们按照精度从小到大排序可以排成:byte , short , char , int , long , float , double
类型转换我们分成两种:1.自动类型转换,2.强制类型转换
1.自动类型转换:精度由小到大,比如"double num = 100;"这就是"int"转"double"
2.强制类型转换:精度由大到小,会导致精度丢失,比如"int num = (int)19.2F",把float类型的强制转为int类型的会导致小数点后面的部分丢失.
第三小部分:输入输出
1.输入:我能使用Java.util中的Scanner类来帮我我们解决,比如Scanner scanner = new Scanner(System.in);这个过程是创建对象的过程,我们也叫"实例化"
2.输出:用"System.out.println();"通过这个语句可以进行输出
第四小部分:数组的声明
1.一般采取的声明方式为:数据类型[] 数组名 = new 数据类型[],比如"int[] arr = new int[]";第一个[]中是不可以放数字的,这一点不同于其他编程语言,也是我自己在写代码中发现的自己出现的问题
2.二维数组的声明:声明的方式和一维数组的方式一样,二维数组的本质就是一维数组.
3.访问数组中的元素:我们通过数组名[数字]的方式来访问数组中的内容"num[4]",在访问的事后要注意出现"数组越界"的发生
第二部分:运算符和语句
1.运算符:"过"(这个不会别学编程了)
2.语句:
2.1 if()语句:当()中的内容为true的时候会进入if 条件的内部
**2.2 if()-else() 语句:**当if()中的内容为true的时候会进入if 条件的内部,如果为false就会进入else()中
2.3 多重的if()-else()语句:可以同if()-else() 语句进行理解
2.4 switch()开关语句:此语句在使用的时要多注意加"default",满足条件后要关闭使用
2.5 while()循环语句:()中的条件每循环一次都会进行一次判断,如果判断的结果为"true"就进入循环继续执行,如果为false就退出循环
2.6continue和break语句:多用于循环当中区别在于continue是跳过此处循环,而break是终止本次循环,退出循环,我们通过在循环语句中加入这两个语句,让我们在必要的时候退出循环,避免陷入到死循环的陷阱中
2.7 for(表达式1;表达式2;表达式3){}:for语句起到判断并循环的用法,在我们写Java代码中也是我们最常用的语法,表达式1是声明变量,表达式2是判断语句,表达式3是更新变量语句.
2.8 for与数组的关系:我们可以通过for循环的特点,通过循环遍历数组中的每一个元素.在通过输出语句可以打印输入数组中的每一个元素.
2.9 import语句:import是导入类库中的类,也可以导入自定义包中的类
第三部分:类与对象(核心部分)
3.1类的声明:通过class关键字来声明类,比如"class Test1",写类的目的是为了描述一类事物所有的属性和功能,在声明类的时候类名的首字母要大写
3.2类体:类体中存在的是"方法"和"变量(成员变量)"
3.3成员变量和局部变量:成员变量是在类中声明的变量,生命周期是程序的开始运行到程序的结束,局部变量是在方法中声明的变量,生命周期是方法的被调用的开始与结束,生命周期与成员变量相比较短,我们通过"this"关键字的方式把成员变量的值赋给局部变量使用,也可以用来防止变量名的重复导致,程序在运行的时候无法识别我们是使用的成员变量还是局部变量.
**3.4方法:**方法的声明是放在类中的不是放在"main"方法中的,"main"方法我们也叫主方法,方法中是不可以在声明方法的,会报错,方法的声明要放在类中,这也是我在自己实践中亲身出现的错误
3.5构造方法:每个类都会有构造方法,如果你在类中没有写构造方法,编译器也会,默认生成一个构造方法,构造方法的方法名必须和类名是一样的,而且是没有返回值的,我们可以根据定义,不同的形参,创建多个构造方法
3.6声明对象:通过类名加对象名的方式,比如"类名 对象名",也可以通过"类名 对象名 = new 类名"的方式进行对象的声明
3.7对象的引用和实体:我们在进行对对象中的内容进行比较的时候,如果通过"new"创建出来的对象进行比较,那我们比较的就是它们的"引用",也就是简称为存放的"地址",反之我们的比较的是里面的内容.
3.8实例变量和类变量:实例变量和类变量本质都是成员变量,类变量是被关键字"static"修饰过的变量,也叫"静态变量",不同对象的实例变量是不同的,类变量是被所有变量所共同拥有的,可以通过类名直接访问类变量,类变量不能被"this和super"使用.
3.9实例方法和类方法:被关键字"static"修饰过的方法是类方法,我们通过对象调用实例方法,通过类名调用类方法
3.10:方法重载:我们可以在一个类中定义多个名字相同的方法,要想构成方法重载,这些名字相同的方法 形参的数据类型 形参的个数,至少有一个是不相同的,才能构成方法重载,我们在调用方法的时候,根据传入的参数个数,以及传入参数的数据类型来去区别方法,进而调用不同的方法.
第四部分:关键字和访问权限
4.1this关键字:在构造方法中,我们定义的形参与构造方法中接受这些形参的局部变量相同时,我们通过关键字"this",来区分传入的参数和局部变量,this出现在实例方法中时,this表示正在调用该方法中的当前对象.
4.2private权限:也叫私有的,被private修饰过的方法和变量,叫私有变量和私有方法,这样的方法和变量的使用范围是在当前类中,其他类中不能访问,我们一般把变量的访问权限都定义为private,方法看情况
4.3public权限:也叫公共的,其他类中也可以访问被该类修饰的方法和变量"main"方法就是
4.4 instanceof运算符:在instanceof中当左边的操作元素是右边类或者是其子类所创建的对象时,会输出true否则输出false
4.5 super关键字:子类从父类中继承得到的方法和成员变量被,隐藏和被重写时,我们再次调用时,我们调用的就是子类中新写的,方法和变量,如果我们想要访问被覆盖和隐藏的方法和变量时,我们可以通过"super"关键字获取的父类中的信息.访问方法"super.fun()",访问变量"super.n".
4.6 final关键字:final修饰过的类是不可以被继承的,final修饰过的变量数值是不能被修改的,final修饰过的方法是不可以被重写的,
第五部分:子类与继承
5.1子类与父类:我们创建类一个"Animal"类和"Dog"类通过关键字"extends"完成"Dog extends Animal"此中的Dog就是Animal的子类,Animal就是Dog的父类
5.2子类的继承性:
5.2.1子类和父类在同一个包中:子类继承了父类中访问权限不是"private"的所有的方法和成员变量,继承的成员变量和方法的权限都是与父类的权限是一样的
5.2.2子类和父类在不同包中:子类会继承父类的中的protected,和public权限的方法和变量
5.2.3成员变量的隐藏:在子类中声明一个与父类名字一样的成员变量,子类中的这个成员变量就会隐藏父类中的成员变量,
5.2.4方法重写:在子类中声明一个与父类一样的方法,子类声明的方法就覆盖掉了子类从父类中继承的原方法,
5.2.5对象的向上转型对象:通过这个方法,我们可以创建父类的对象去实现子类的实例,我们通过不同的向上转型,但是通过相同的对象可以调用不同子类中的方法 "Anmial a = new Dog"
**第六部分:我们来讲解一下"面向对象"的编程语言的三大特点"封装","继承",''多态'',同样也是Java的特性,在Java中封装是为了,方便调用者,我们把一些必要的东西给封装起来,避免调用者对其修改,有降低了调用者的思考,比如我们就不需要去了解"JVM"内部是什么样的,就大大降低了,程序员的门槛.**继承,是为了帮助我们在写代码是的内聚性,一个好的代码,内聚性一定是低的,使得我们更加容易读懂代码,在多个类中我们可能会用到相同的变量和方法,我们可以通过继承的方式获取到,这在一定程度上是降低了我们代码的行数,也体现出的一定的面向过程,多态,多态的存在是因为继承的原因,我们的继承只可以单继承,不可以实现多继承出现,多继承会出现"菱形继承"问题,我们为了实现多态就实现了接口,接口中的方法是抽象方法,接口中声明的方法是不需要具体实例的,所有实现接口的类,都必须要重写接口中的抽象方法,抽象类的定义是:抽象类被"abstract"关键字修饰,抽象类中一定会有抽象方法,而接口中的方法都是抽象方法,接口可以被多个类次实现,这也就弥补了,类不能实现多继承的问题.
我们在来讲解一下内部类,异常类和匿名类:在Java中类中还是可以定义类的但是,用的是比较少的,只有匿名类用的比较多,简单来说就是在类的内部再定义一个类.
关于Java中的异常,我们为了确保程序的正常运行,我们会在程序可能出现异常的地方进行异常的检查,我们会把异常信息放入到"try{}"中,如果try{}中出现异常就会把异常抛出,与try{}一起使用的是"catch(){}"try{}中抛出异常会与catch()中的内容进行匹配,如果catch(){}中有相对应的异常信息,程序就会打印输出相关的异常信息,程序员看到相关的异常信息会快速定位到出现异常的位置,修改代码,如果catch(){}中没有相对应的异常,就会交给JVM来处理,程序会终止.
最后我们来讲解一下String类,String类中的东西确实比较多,而且也非常常用,但是都是比较简单的,我就简单来讲解一下,比如String的常量,String的对象,但是要注意的是,String的常量是不可修改的,可以理解为被final关键字修饰过,String类中还有许多方法,比如我们比较常用的,比较两个字符串中的内容关键字"equals()",还有String数组.这里比较多我就不一一介绍了.
我简单讲解一下我的收获,在大学的生活很安逸,也就是在这种状态下我度过了大一的时间,当我回过头想想的时候,我以后要干什么?我会干什么?我的专业能让我干什么?,这三个问题一直困扰着我,我在刚刚大一的时候,我的目标就是好好学习,拿奖学金,入党,拿三好学生,但是我的短板我也知道,就是英语太差,导致我在大一下学期的期末考试时,英语挂科了,我也知道挂科意味着什么,我大二就索性摆烂了,就在我不作为的一段时间中,我通过我们的课程了解到了编程,根据现在的情况来看当个程序员,并不是好的选择,但是以我目前的学校层次,和我自己的短板,我不敢拿将近3年的时间去赌考研成功,我知道我一旦失败了,我是不可能复习的,我前面的功课对我未来找工作是没有任何作用的,我也打电话听取了我目前在211就读的哥哥的意见,我就开始想我在大学剩下的时间里去学习一门什么样子的"技术",在多次权衡下我就选择了走编程这一条路,现在我已经系统的学习了一个半月,把JavaSE部分学习完毕,并写下此次总结,我相信实力才是王牌.