java语言基础知识(完整版)_java基础知识-程序员宅基地

技术标签: java  面试题  java知识  

目录

一、java开发环境

二、名词解释

1.JVM

三、eclipse

1.定义

四、注释

1.解释性文本

2.其他注释

五、变量

4.命名规则

六、八种数据基本类型

七、数据类型之间的转换

1.自动类型转换

八、运算符

1.算术运算符

(2)使用情况分两种:

(3)简化版:

2.关系运算符

九、分支结构

1.if结构

十、循环结构

1.while结构

十一、嵌套结构

1.定义

十二、数组

1.定义

2.声明

3.初始化

十三、方法

1.意义

2.定义

3.调用

十四、关键字用法

1.scanner

4.水平制表符 \t


一、java开发环境

  1. 编译运行过程(常见面试题)
  1. 编译期:

将.java源文件交给编译器编译成.class字节码文件的过程

(2)运行期:

把编译后的.class字节码文件经过JVM加载并运行.class字节码文件

  1. 配置环境变量

windows 10系统下配置JDK环境变量:
      (1).安装JDK,安装过程中可以自定义安装目录等信息,例如我们选择安装目录为D:/java/jdk1.8.0_08;

(2).安装完成后,右击“我的电脑”,点击“属性”;

(3).选择“高级系统设置”选项卡,选择“高级”栏,点击“环境变量”;

(4).在“系统变量”中,设置3项属性,JAVA_HOME     PATH     CLASSPATH

若已存在则点击“编辑”,不存在则点击“新建”;

(5).JAVA_HOME指明JDK安装路径,例如刚刚安装时所选择的路径D:/java/jdk1.8.0_08,此路径下包括lib,bin,jre等文件夹;

Path使得系统可以在任何路径下识别java命令,设为: %JAVA_HOME%/bin;

创建 CLASSPATH变量

CLASSPATH为java加载类(class or lib)路径,只有类在classpath中,java命令才能识别,设为: .;%JAVA_HOME%/lib ;

(6).“开始”->;“运行”(win10系统下 win+R键 回车),键入“cmd”;

(7).键入命令“javac”,“java”,“java -version”几个命令,出现画面,说明环境变量配置成功即环境变量配置成功;

  1. java开发环境特点

跨平台的:软件可以不受计算机硬件和操作系统的约束而在任意计算机环境下正常运行;

 面向对象:指以对象为基本粒度,其下包含属性和方法;

 安全性:可以分为四个层面,即语言级安全性、编译时安全性、运行时安全性、可执行代码安全性;

多线程是指允许一个应用程序同时存在两个或两个以上的线程,用于支持事务并发和多任务处理;

一次编程到处使用:Java源代码的书写不拘泥于特定的环境,可以用记事本、文本编辑器等编辑软件来实现,然后将源文件进行编译,编译通过后可直接运行

二、名词解释

1.JVM

Java虚拟机;加载.class字节码文件并运行.class字节码文件

  1. JRE

Java运行环境;包含JVM和运行java所必需的java系统类库

  1. JDK

Java开发工具包,包含JRE和开发java程序所必须的命令工具

  1. 说明:
  1. 运行java程序的最小环境为 JRE
  2. 开发java程序的最小环境为 JDK

三、eclipse

1.定义

IDE集成开发环境(带图形界面的功能强大的开发工具)

  1. 优点

IBM公司的、开源的、免费的,不需要安装,仅需解压即可

  1. 开发步骤

新建Java项目/工程-------------小区

新建Java包--------------------楼+单元

新建Java类--------------------房子

四、注释

1.解释性文本

单行注释: // 文字注释

多行注释: /*

文字注释

......

文字注释

*/

文档注释: /**  文档注释   */

2.其他注释

其他注释属于后期内容,后期定会填充

五、变量

1.声明-----------相当于在银行开个账户

 int a; //声明一个整型的变量,名为a

 int b,c,d; //声明三个整型的变量,名为b,c,d

2.初始化--------相当于给银行账户存钱

 int a = 250; //声明整型变量a并赋值为250

      int a;   //声明整型变量a

      a = 250; //给变量a赋值为250

3.使用-----------相当于使用银行账户里的钱

对变量的使用就是对它所存的那个数的使用  

   int a = 5;

     int b = a+10; //取出a的值5,加10后,再赋值给变量b

  System.out.println(b);   //输出变量b的值15

  System.out.println("b"); //输出b,双引号中的原样输出

     a = a+10; //取出a的值5,加10后,再赋值给a

  //在a本身基础之上增10

  System.out.println(a); //15

//变量在用之前必须声明并初始化

     //System.out.println(m); //编译错误,变量m未声明

  int m;

 //System.out.println(m); //编译错误,变量m未初始化

4.命名规则

只能包含字母、数字、_和$符,并且不能以数字开头

严格区分大小写

不能使用关键字

允许中文命名,但不建议,

建议"英文的见名知意"、"驼峰命名法"

六、八种数据基本类型

数据类型

占位

字节

范围

1

byte

8

1

-128~127

2

short

16

2

-32768~32767

3

char

16

2

0~65535

4

int

32

4

-2147483648~2147483647

5

double

64

8

无限大

6

float

32

4

无限大

7

long

64

8

-9223372036854775808~

9223372036854775807

8

boolean

8

1

True   false

七、数据类型之间的转换

byte short char 通常转换为int计算

1.自动类型转换

基本数据的自动类型转换只有7种数据类型,除了布尔型
基本原则:低级别可以转高级别
从左向右可以依次转换:byte-short-int-long-float-double
 char-int-long-float-double
运算时的自动转换条件:两种数据类型要兼容,目标类型大于原类型

当范围大的类型与范围小的类型进行运算时,结果会自动转成范围大的类型

2.强制类型转换

高级别转低级别时必须进行强制类型转换

  是否进行强制类型转换取决于数据类型级别的高低,而不取决于数据类型的实际值

格式:(type)value, type是要强制类型转换后的数据类型

public class mainTest {

    public static void main(String[] args) {

        int pageSize = 3;

        long pageNo = 2;

        int num =  (int) ((pageNo-1)*pageSize);// 强制类型转换,long类型转换为int类型

        System.out.println(num);

        int test =  (int)(pageNo-1)*pageSize;

        System.out.println(test);

    }

}

八、运算符

1.算术运算符

+ , - , * , / , % , ++ , --

(1)使用规则:必须与变量一起使用

a++/++a/a--/--a

++/--表示变量里的值会自动+1/-1后存入变量里

2使用情况分两种:

与变量单独使用时(既不与其他任何字符连用)

eg:a++

当自增/自减表达式参与其他运算时

符号在前,变量先自增/自减,然后把新值赋值给表达式。

符号在后,先把值赋值给表达式,变量再自增/自减。

3简化版:

符号在前,先运算再赋值。

符号在后,先赋值再运算。

2.关系运算符

> , < , >= , <=  ,== , != , boolean

  1. 逻辑运算符

&& , || , !  boolean

逻辑运算符

逻辑功能

&(并且)

有false则false

|(或者)

有true则true。

!(非)

非false则true,非true则false。

^(异或)

相同为false,不同为true。

&&(短路与)

有false则false,若&&左边表达式或者值为false则右边不进行计算

||(短路或)

有true则true,若||左边表达式或者值为true则右边不进行计算

    2.赋值运算符

= , += , -= , *= , /= , %=

运算符

用法举例

等效的表达式

+=

a += b

a = a+b

-=

a -= b

a = a-b

*=

a *= b

a = a*b

/=

a /= b

a = a/b

%=

a %= b

a = a%b

  3.三目运算符

boolean?语句块1:语句块2

执行规则:  Boolean值为true 则执行 语句块1;

Boolean值为false 则执行 语句块2;

  4.字符串连接运算符

字符串连接用 + 来实现,“ + ”是算术运算符又是字符串拼接运算符,即 若同时出现则字符串连接前的运算符为算术运算符,字符串连接后的都为字符串连接运算符

Eg.

System.out.println(9 + 7 + "may" + 4 + 7);

输出结果为 : 16may47

九、分支结构

1.if结构

语句:

if(boolean){

  语句块

}

执行过程:

若Boolean值为true,则执行语句块

若Boolean值为false,则不执行语句块

  1. if...else结构

语句:

 if(boolean){

  语句块1

}else{

语句块2

}

执行过程:

若Boolean值为true,则执行语句块1

若Boolean值为false,则执行语句块2

      2.if...else if结构

语句:

if(boolean—1){

语句块1

}elseif(boolean—2){

语句块2

}elseif(boolean—3){

语句块3

}else{

语句块4

}

执行过程:

判断boolean-1,结果为true则执行语句块1,若执行条件为false则

执行boolean-2,结果为true则执行语句块2,若执行条件为false则

执行boolean-3,结果为true则执行语句块3,若执行条件为false则

执行语句块4

      3.switch...case结构

优点:效率高、结构清晰

缺点:只能对整数来判断、相等

break:跳出switch

int num = 2;

switch (num){         //byte,short,int,char,

//string(jdk 1.7后可以支持)

case 1://if(num ==1)

System.out.println(1);

case 2://以此为入口

System.out.println(2);

break;//跳出switch

case 3://以此为入口

System.out.println(3);

default://所有case都未匹配时在执行

System.out.println(3);

}

十、循环结构

1.while结构

  语句: 

  while(boolean){

   语句块

   }

  执行过程:

  判断boolean的值,若为true则执行语句块;

   判断boolean的值,若为true则执行语句块;

   判断boolean的值,若为true则执行语句块;

   如此反复,直到boolean的值为false时结束

  1. do...while结构

语句:

do{

语句块

}while(boolean)

执行过程:

执行语句块,

判断boolean的值,若为true则执行语句块;

   判断boolean的值,若为true则执行语句块;

   判断boolean的值,若为true则执行语句块;

   如此反复,直到boolean的值为false时结束

      2.for循环结构

语句:

for(初始条件 1 ; 判断条件 2; 改变条件 3 ){

循环体   4;

}

初始条件1;

for(;判断条件2;){

循环体4

改变条件3;

}

执行过程:(1 2 4 3 2  4  3  2)

执行初始条件1

执行判断条件2 若为true,则执行循环体4,在执行改变条件3;

执行判断条件2 若为true,则执行循环体4,在执行改变条件3:

......

执行判断条件2 若为true,则执行循环体4,在执行改变条件3:

执行判断条件2 若为false,则for循环结束

for(;;){//没有条件的循环是死循环

执行体

}

       3.三种结构最佳适用情况

先看循环是否与次数相关

若与次数相关-------for循环--------------打印机类型

若与次数无关,再看要素1与要素3是否相同

相同时-----do...while 语句循环-------猜数字游戏

不同时-----while语句循环

        4.小结:

1)顺序结构:从上到下逐行执行,每句必走

2)分支结构:有条件的执行某语句一次,并非每句都走

3)循环结构:有条件的执行某语句多次,并非每句都走

十一、嵌套结构

1.定义

循环中套循环, 一般多行多列时使用,外层控制行,内层控制列

  1. 执行规则

外层循环走一次,内层循环走所有次

     2.建议

嵌套层数越少越好,能有一层就不用两层,能用两层就不用三层

若业务必须通过三层以上的循环来解决,说明设计有问题

十二、数组

1.定义

数组也是一种数据类型(引用数据类型)

数组是相同数据类型元素的集合

2.声明

int[] arr = new int [10];

//声明整型数组arr,包含10个元素

//每个元素都是int类型,默认值为0

3.初始化

---初始化数组中的数据

int[]  arr = new int [4]; //0,0,0,0

int[]  arr = {1,4,5,8};//1,4,5,8

int[]  arr = new int []{1,4,5,8};//1,4,5,8



int[] arr;

arr = {1,4,5,8};//编译错误,此方式只能声明同时初始化

arr = new []{1,4,5,8};//正确

4.访问

----访问数组中的数据

(1)通过(数组名.length)可以获得数组的长度(元素的个数)

int [] arr = new int [5];

Systrem.out.println("arr.length");

(2)通过下标/索引来访问数组中的元素

  下表从0开始,最大到(数组长度-1)

int[]  arr = new int [3];

arr[0] = 100;//给arr第1个元素赋值为100;

arr[1] = 100;//给arr第1个元素赋值为200;

arr[2] = 100;//给arr第3个元素赋值为300;

arr[3] = 400;//运行时,会发生数组下标超出界限(越界)的异常



System.out.println (arr.length);//输出数组长度

System.out.println (arr[arr.length-1]);//输出arr中最后一个数组

5. 遍历

----从头到尾看

int[] arr = new int [10];

for (int i = 0;i <arr.length;i++){//遍历数组

arr[i] = 100;//给每个元素都赋值为100

arr[i] = (int)(Math.Random.()*100)//赋值100内的随机数

System,out.println(arr[i]);//输出每个元素

}

//将arr数组转换为字符串并输出

System.out println(Arrays.toString(arr));//简便输出基本数组

6.复制

方式1:(灵活性更好)

int[] a ={10,20,30,40,50};

int[] b =new int[6];



System.arraycopy(a, 1, b, 0, 4);

//System.arraycopy(src, srcPos, dest, destPos, length);

//a:源数组(src)

//1:源数组的起始下标(srcPos)

//b:目标数组(dest)

//0:目标数组的起始下标(destPos)

//4:要复制的元素个数(length)

注意:此方式容易溢出!编译出现错误

方式2:(灵活性差)

int[] a = {2,5,3,8,6,7};

int[] b = Arrays.copyOf(a, 6);

//int[] b = Arrays.copyOf(original, newLength);

//a:源数组(original)

//b:目标数组

//6:目标数组的长度(元素个数)(newLength)

//--若目标数组长度大于源数组长度,则末尾补默认值0

//--若目标数组长度小于源数组长度,则从末尾截掉



a = Arrays.copyOf(a,a.length+1);//数组扩容

7.排序

常用的排序方法:冒泡排序、插入排序、快速排序---执行效率不算太高

冒泡排序---工作中永远不会写,但是一个常见面试题

排序分类:升序(从小到大)/降序(从大到小)

(1)Arrays.sort(arr);//对arr进行升序排列

(2)升序排列:

for (int i = 0; i < arr.length; i++) {

Arrays.sort(arr);

System.out.print(arr[i]+"\t");

}

 降序排列:

for(int i=arr.length-1;i>=0;i--) {

Arrays.sort(arr);

System.out.print(arr[i]+"\t");

}

十三、方法

1.意义

1)封装一段特定的业务逻辑功能

2)方法尽可能独立,一个方法只干一件事

3)方法可以被反复调用多次

4)减少代码重复,有利于代码的复用;有利于团队的协作

2.定义

五要素:

修饰词  返回值类型   方法名(参数列表){

方法体

}

1)修饰词:public  

2)返回值类型:方法可有返回值,也可没有返回值

无返回值时:返回值类型写成void

有返回值时:返回值类型写成特定的数据类型

  返回值有误判断:

方法执行完后

(1)若还需要用到方法中的某个数据-----有返回值

(2)若不再需要用到方法中的某个数据---无返回值

3)方法名:见明知义,驼峰命名

4)参数列表:方法可有参,也可无参

参数:  定义方法时的参数为 形参-----String name/int i...

调用方法时的参数为 实参-----int i=3/lisi/12

有参数:方法更加灵活

无参数:

5)方法体:

3.调用

1)无返回值:方法名(有参传参)

2)有返回值:若有返回值,则在的方法中必须通过return来返回数据

并且return后的书必须与返回值类型匹配

数据类型  变量 = 方法名(有参传参)

十四、关键字用法

1.scanner

Scanner接受用户输入的数据

1)在package下:

import java.util.Scanner;

2)在main中:

Scanner com = new Scanner(System.in);

3)在第二步之后:

int command = com.nextInt();

2.break与continue

 break:循环中看到break就跳出循环(在某种特殊条件下提前结束循环)

当多层嵌套时,只用于跳出一层循环

continue:跳过循环体中的剩余语句,进入下一次循环(不能出现在switch语句中)

3.Return

1)return值:

(1)结束方法的执行

(2)返回结果给调用方

--用在有返回值的方法中

2)return; :

(1)结束方法的执行

(2)在某种特定条件下提前结束方法

4.水平制表符 \t

\t 表示制表符,相当于制表符

前面的输出内容位数为8的倍数,\t将输出8个空格

前面的输出内容位数不是8的倍数,\t将补足8位

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Healer_xiaozhen/article/details/108186961

智能推荐

Spring 报错:Error creating bean with name的解决方法_error creating bean with name 'org.springframework-程序员宅基地

文章浏览阅读9.7w次,点赞2次,收藏7次。Spring报错:Error creating bean with name的解决方法_error creating bean with name 'org.springframework.transaction.annotation.pr

【白兔兔】用TiKZ画2017高考全国1卷理科数学流程图_2017年高考数学全国一卷的流程图题怎么算-程序员宅基地

文章浏览阅读689次。2017高考全国1卷数学流程图_2017年高考数学全国一卷的流程图题怎么算

ES6—46:class中getter和setter的设置方法_class统一设置setter-程序员宅基地

文章浏览阅读546次。测试代码实现效果_class统一设置setter

python编程用什么软件-python用什么软件编写-程序员宅基地

文章浏览阅读5.2k次。现在,python语言可以说是非常火热的语言之一。很多人开始学习python,下面我将和大家说说,python用什么软件编写。Python开发软件可根据其用途不同分为两种,一种是Python代码编辑器,一种是Python集成开发工具,两者的配合使用可以极大的提高Python开发人员的编程效率,以下是常用的几款Python代码编辑器和Python集成开发工具。一、Python代码编辑器1. Subl..._python敲代码用什么软件

golang基础-接口、接口嵌套、类型断言、接口与结构体_接口等转换_go 结构体转为接口类型-程序员宅基地

文章浏览阅读2.4k次。接口package mainimport "fmt"type Test interface { Print() Sleep()}type Student struct { name string age int score int}/*student实现接口Print方法*/func (p Student) Print() {_go 结构体转为接口类型

通过SSH远程访问puppy linux-程序员宅基地

文章浏览阅读402次。http://fengqing888.blog.163.com/blog/static/3301141620117205563951/ 转载于:https://blog.51cto.com/584250550/1187682_puppy linux ssh

随便推点

JDBC通过文件读取加载方式连接数据库(以MySQL为例)_jdbc 加载本地文件到-程序员宅基地

文章浏览阅读5.5k次。JDBC通过文件读取加载方式连接数据库(以MySQL为例)前言: 在java项目开发中,必然会经常使用到数据库连接,并且数据库的种类也不尽相同,另外JDBC(java DataBase Connectivity :java数据库连接)的方式也有很多种方式。所以本博文是以文件读取加载方式连接数据库,这种方式的好处在于当数据库驱动,地址或者用户名密码发生变动时,只需要在文件里改动即可,而不需要在代码里改_jdbc 加载本地文件到

数值积分中的辛普森方法及其误差估计-程序员宅基地

文章浏览阅读3.3k次。$f$在$(x_0,x_2)$上四阶可导,且在$[x_0,x_2]$上三阶导函数连续.则\begin{equation} \int_{x_0}^{x_2}f(x)dx=\frac{h}{3}[f(x_0)+4f(x_1)+f(x_2)]-\frac{h^5}{90}f^{(4)}(\xi) \end{equation}其中$h=x_1-x_0=x_2-x_1$.证明:我们仍然进行牛顿插..._辛普森公式误差怎么求

面试必问题目“进程、线程对比”,包你会_问什么进程比线程 重量-程序员宅基地

文章浏览阅读103次。简要说明烟雨红尘小说网 https://wap.zuxs.net/在C语言、C++等方向面试时,经常会被问道 进程、线程等问题,当然了10年前我刚开始找工作那会,也是各种煎熬“我又不写操作系统,为什么还要学这么底层的知识”,真想不通面试官是不是sha。。。转眼间,我现在成了面试官,你说可笑不。。。。世事变化无常啊。。。。为了让各位小伙伴把这块理解了,所以趁一个空闲时机把它们的对..._问什么进程比线程 重量

java:枚举:Demo_enumdemo-程序员宅基地

文章浏览阅读1.1w次。 定义Color枚举类:package testEnum;public enum Color { RED(0,"红色"), BLUE(1,"这是蓝色"), YELLOW(2,"这是黄色"), GREEN(3,"这是绿色"); //可以看出这在枚举类型里定义变量和方法和在普通类里面定义方法和变量没有什么区别。 //唯一要注意的只是变量和方法定义必须放在所有枚举值定义..._enumdemo

如何在HBuilder里面运行php文件_hbuilder运行php-程序员宅基地

文章浏览阅读1.7w次,点赞4次,收藏19次。1.首先在HBuilder里面配置外部服务器2.绑定你的项目,即在下面圈选的地方写上你项目的完整路径3.点击下面的图标运行你的项目注意:到此处就成功了。..._hbuilder运行php

使用VScode开发ESP8266,PlatformIO开发ESP8266-程序员宅基地

文章浏览阅读4.6k次,点赞5次,收藏39次。安装arduino扩展首先下载arduino IDE并安装。然后打开VScode安装arduino扩展“File”-“Preference”-“settings”打开设置窗口,输入arduino搜索,往下拉找到arduino Path,把刚才arduino IDE的安装路径复制进去,注意要将 “\” 改为 “/”打开或新建.ino文件,我这里使用自带的Blink例程来测试。打开.ino后,点击右下角来配置编程器、开发板参数、COM口,和在arduino IDE中一样。这些配置和安信_vscode开发esp8266

推荐文章

热门文章

相关标签