不知道为什么,最近很喜欢Java这门语言,个人认为,学习一门编程语言,扎实的基础是相当重要的,所以在这里,我想跟大家分享一下我掌握的知识点
嗯,不说大家都知道,Java是一门兼容性很好的语言,跨平台支持的很好,比较常用的有Linux和Windows,所以首先,我将会跟大家分享以下两者的区别
Linux与Windows的区别
Linux是一个开源的操作系统,与Windows有三大不同点:
文件系统不同:Windows是盘符,Linux是目录
外部设备映射不同: Windows是盘符,Linux是挂载点(目录)
安全级别不同: Windows安全级别低,Linux安全级别高,因为是服务端系统 /home——具有最高权限
c语言和Java的区别
而对于c语言和Java的区别的话,主要就是在编译过程
c文件,编译,直接编译为可执行文件(0,1)
java文件,编译,字节码文件(.class),jvm(不同平台有不同的JVM)
运行字节码文件,计算机识别(0,1)
JDK、JRE、JVM
上面提到了JVM(Java虚拟机),那我们就来看下JDK、JRE、JVM三者的关系
JDK - Java开发工具包
JRE- Java运行环境
JVM - Java虚拟机
三者的区别可以用一句话进行概括:运行一个Java程序所需要的最小环境是 JRE,开发一个Java的最小环境是JDK,加载字节码文件,实现跨平台需要用到JVM
环境
说到环境这个词,我就不得不说一下Java的IDE(集成开发环境)eclipse,这是一款主流的Java开发环境,代码提示,搭建目录结构等等,都是十分赞的,推荐使用
eclipse常用的快捷键,我这里想跟大家分享一些:
输入main的时候,然后就使用Alt+/之后就可以出现代码提示Alt+/是比较常用的一个代码提示快捷键(可以完成一些代码的插入)CTRL+1(快速修复)就是可以快速查看错误并且快速修复Shift+Enter(当前行下插入一个空行,不限位置)ctrl+shift+enter(当前行上插入一个空行)ctrl+d删除当前行Alt+上下键,可以交换语句的位置ctrl+alt+上下键可以快速的复制一行,当时有时候会和电脑自带的快捷键冲突所以需要自定义一下,改为ctrl+上下键ctrl+shift+f(格式化当前代码)ctrl+f(查找与替换)ctrl+shift+x(把当前选中的文本全部变成小写)ctrl+shift+y(把当前选中的文本全部变成大写)ctrl+/(注释或取消注释当前行)ctrl+shift+/(注释多行)ctrl+shift+(解除多行注释)
命名
有了环境之后就可以开始搭建我们的目录结构了,搭建目录结构就需要使用到命名操作,在一门编程语言中,命名是对团队合作的十分重要的一步,一个好的命名可以给开发带来极大的便利
变量的命名其实比较基础的就是要做到“见名知意”,变量的命名采用驼峰式命名法,类名的首字母大写,命名之后就需要声明变量和初始化变量,凡事都是需要先有了才可以对其进行操作,变量也是一样,需要在使用前进行初始化,而且必须与数据类型相匹配。
还需要注意的一点是:默认的整数会杯认为是int类型,默认的小数是double型
整型直接量可以直接赋值给byte,char,short,byte,char,short只要参与运算,则一律转为int
分支结构
分支结构有:if语句,if else语句,else if 语句,switch case语句
需要注意的是:在Java中,存在变量的作用域
变量的作用于就是从变量声明到包含这个变量的最近的大括号结束
当作用范围重叠时,变量不能重名
除了分支结构,我们经常使用的还有循环,所谓循环就是:一组相同或相似的语句被有规律的重复性执行
对于循环,我们需要做到的三点是:
循环三要素:
1.循环条件初始化
2.循环条件(以循环变量为条件)
3.循环变量的改变(向着循环结束变)——在循环过程中改变的量就是循环变量
这里,我想用一道经典的题来进行讲解:
//题目如下:用编程实现9+99+999+...+99..9(十个九),并且输出运算结果
//题目分析如下:
//设num为每次加的那个数,可以看到,当
/**
* i=1 num=9
* i=2 num=99
* i=3 num=999
* i=4 num=9999
*/
/**
* 9到99 9*10+9
* 99到999 99*10+9
* 999到9999 999*10+9
*/
// 有了以上的规律,编写程序就不是什么难事啦
我们知道,循环常用的有三种:当到型循环(while),直到型循环(do-while),for循环
那面对这三种我们应该怎么选用呢,请看下面几点:
如果题目中出现“当”这个字眼的话,一般我们会选用当到型循环
如果题目中出现“直到”这个字眼的话,我们一般使用直到型循环
如果题目给出的了固定的循环次数,我们可以选用for循环
上面的三点看起来可能十分不起眼,那我们现在就来实战演练一下:
题目:有数列2/3、4/5、6/9、10/15……求此数列前30项的和分析:对于数列的题,首先要找出通项公式,或前后项的计算关系公式,根据公式求所需。由于数列的题一般执行次数能确定,用for循环语句来编写比较方便
题目:年存款利率为3%,本金为10000,存款总额超过20000时,求具体的收益分析:对于这类型的题,其实隐含了”当“字,当存款总额超过20000时,求具体的收益。用while循环语句来编写比较方便
数据结构
前面我们一直在说编写程序,那程序到底是什么呢,简单的说,程序是由算法和数据结构组成的,以上的分支结构和循环都是流程问题亦即算法问题,所谓的数据结构就是把数据按照某种特定的结构来保存,设计合理的数据结构是十分重要的,数组就是一种基本的数据结构
数组:相同的数据类型的元素组成的集合就是数组
数组的声明有多种方式,常用的如下:
int[] arr = new int[4];
int [] arr = {1,2,3};
int[] arr;
arr = new int[4];
int[] arr = new int[]{1,2,3};
数组也有很多实用的API,具体的,大家可以查阅相关的文档
方法
方法用于封装特定逻辑功能,尽可能独立,可以被反复调用,减少代码输出
方法定义五要素
修饰词
返回值类型
方法名
参数列表
方法体
方法的参数可有可无,有参数更加灵活当方法需要返回结果时,设置特定返回值类型,不需要结果的时候,为void返回结果通过return 关键字,return 后的数据必须和返回值的类型匹配
类——面向对象
我们看到的东西其实都可以称之为对象,将对象抽象出来,就有了类
类是一种数据类型
类中只能包含:属性(变量)和行为(方法)
一个类可以创建多个对象
同一个类的多个对象,结构相同,数据不同
将类实例化,我们可以使用new
new 出来的东西在堆里面,其余在栈里面成员变量都是在堆里面的局部变量在栈里面成员变量在创建对象时存在,对象被回收时消失垃圾回收器不定时回收没有引用指向的对象,回收过程透明自动调用方式:System.gc()内存泄漏是由于不再使用的对象未被及时回收建议,对象不用时,对象及时赋值为null(空,没有指向对象)
讲到类就脱不了方法,讲到方法,就不得不提及下方法的重载,讲到方法的重载就需要知道方法的签名
方法的签名:就是方法名和参数列表
一个类中不可以有两个方法的签名完全相同,那重载(overload)指代的就是方法的签名不同(方法名相同,参数不同)
一个类中,经常见到的不外乎构造方法,而,构造方法是可以重载的
那构造方法是什么呢,有什么作用呢,一般用来做什么呢
构造方法与类同名,没有返回值类型
构造方法常常用于给成员变量初始化
构造方法是在创建对象时被自动调用
编辑器会在没有显示指明构造方法的情况下,默认给出一个无参数的构造方法
我们知道,类是需要实例化之后才可以使用的,那实例化出来的那么多个对象在使用的时候怎么区分呢,于是我们就有了this,但是,需要注意的是,这个不是指针
Java 没有指针,没有二维数组(叫做数组的数组)
this在这里只是一个简单的指向作用,谁调用它,就指向谁
帧栈和方法区
有调用就会有存储,存储主要有两个(帧栈和方法区)
在Java中,调用一个方法就会得到一个“帧栈”,帧栈中存储的就是局部变量,方法调用结束之后,帧栈就消失,局部变量也会跟着相应的消失
相应的还有方法区:方法区用于存放类的信息,Java程序运行时,首先啊会通过类装载器载入类文件的字节码信息,经过解析后将其装入方法区,类的各种信息都在方法区存储
所以简单的总结一下就是
所以简单的总结一下就是
方法区:存储类的信息(.class及方法)方法只有一个,通过this关键字区分