Java基础知识

Java基础知识

Java基础知识

不知道为什么,最近很喜欢Java这门语言,个人认为,学习一门编程语言,扎实的基础是相当重要的,所以在这里,我想跟大家分享一下我掌握的知识点

嗯,不说大家都知道,Java是一门兼容性很好的语言,跨平台支持的很好,比较常用的有LinuxWindows,所以首先,我将会跟大家分享以下两者的区别

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.循环变量的改变(向着循环结束变)——在循环过程中改变的量就是循环变量

这里,我想用一道经典的题来进行讲解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//题目如下:用编程实现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循环语句来编写比较方便

数据结构

前面我们一直在说编写程序,那程序到底是什么呢,简单的说,程序是由算法数据结构组成的,以上的分支结构和循环都是流程问题亦即算法问题,所谓的数据结构就是把数据按照某种特定的结构来保存,设计合理的数据结构是十分重要的,数组就是一种基本的数据结构

数组:相同的数据类型的元素组成的集合就是数组
数组的声明有多种方式,常用的如下:

1
2
3
4
5
6
7
8
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关键字区分