java入门第二天课程,JAVA学习第二天之SE入门

学习目的

了解JDK在操作系统环境中的配置

了解各个环境变量的作用

掌握java在操作系统下的常用命令

掌握java的四大基本特性

掌握java的基础知识点(标识符、变量、数据类型)

了解基本的进制转换

一.入门前奏--环境变量

1.1 path系统变量

定义

填写操作系统搜索某个命令文件的路径依据,指定操作系统可执行文件的完整路径。

原理

计算机系统在底层执行 可执行命令.exe文件时,会先根据path变量搜索可执行文件的路径,若执行文件不在当前目录下,会依次搜索path中设置的其他路径。

用法

path一般指定jdk和jre在系统变量中的加载路径,可以使其bin目录下的javac编译程序和java运行程序能被系统执行。

ad4c28869316

系统变量path路径.png

1.2 classpath字节码文件路径

定义

classpath是字节码路径,隶属于 java 语言,专门给jvm的类加载器指路,给jvm引入其它第三方类库,指定当前路径.。

原理

指定-搜索程序中所使用到的类包的文件路径(常有已编写好的类:rt.jar基础类库,dt.jar运行环境类库,tools.jar工具类库),编译器在该路径下查找.class字节码文件,然后加载执行。

用法

一般在使用集成开发环境时配置,用DOS命令行窗口编写和运行时则不用配置classpath路径。一旦配置则“锁定”为classpath相对路径下执行,JVM就是通过CLASSPATH来寻找类的.class文件。

ad4c28869316

字节码路径classpath路径.png

1.3 JAVA_HOME

定义

JAVA_HOME即java的家目录,供需要运行 JAVA程序使用的路径,通常是配置集成开发环境或Tomcat时指定查找的JDK路径。

分类

用户变量:指定可以由当前的用户运行的程序路径和变量路径。

系统变量:指定可以由系统直接运行的程序路径和变量路径。

1.4 常见问题

DOS 窗口中找不到命令

操作系统是如何搜索命令文件的?实际上是先在当前路径下找,找不到的时候自动去环境变量 path的路径中查找,找到则执行该命令,找不到则在 DOS 窗口中提示错误信息。

1.5 java常用命令行

命令

作用

书写格式

javac

编译源文件成.class字节码文件

javac xxx.java

java

运行字节码文件

java xxx.class

运行jar文件

java -jar xxx.jar

javap

解析字节码文件/反编译工具

java -[参数] 类名/字节码文件名

-help 输出 javap 的帮助信息

java -help

-l 输出行及局部变量表

java -l

-public 只显示 public 类及成员

java -public

-private 显示所有类和成员

java -private

-s 输出内部类型签名

java -s

-verbose 输出堆栈大小、各方法的args 数

java -verbose

-c 输出类中各方法未解析的代码

java -c

-s 输出内部类型签名

java

jdb

命令行调试环境/查错工具

jdb .class类名

jar

jar 打包

javaws

jconsole

java监测和管理控制台

jconsole

javaws

查看java应用程序高速缓存

javaws

jps

java虚拟机进程状态工具

jps 进程名

jstat

JVM统计监视工具(监控工具)

jstat -help

二、 java基础

2.1 java基本特性

简单性

java是面向对象的语言,Java在面世前已封装好各种类和接口,java程序员只需要通过创建对象、调用接口方法即可,不需要关注过程的细节。

面向对象

Java 中提供了封装、继承、多态等面向对象的机制。

健壮性

Java 引入了自动垃圾回收机制(GC 机制),Java 程序启动了一个单独的垃圾回收线程,时刻监测内存使用情况,在特定时机会回收/释放垃圾数据,让内存时刻处于最好的状态。

多线程

Java 语言支持多个线程同时并发执行,同时也提供了多线程环境下的安全机制。

可移植性/跨平台

可移植性/跨平台表示 Java 语言只需要编写/编译一次,即可处处运行。Java 代码既可以运行在 windows 的环境下,又可以运行在 Linux 的环境下,而不需要修改Java 源程序。

ad4c28869316

java跨平台.png

2.2 注释

定义

注释是对java代码的解释和说明,良好且规范的注释,让程序员更加快速的理解代码。

要求

编写注释是程序员最基本的素质,养成编写注释的好习惯,要有编写注释的意识。不多不少,恰到好处,可以描述清楚程序的核心功能。

编写位置

类和接口上:文档注释创建者,创建时间,版本,以及该类的作用

方法中:单行注释参数的类型,方法的返回值

常量:多行注释,标明该常量的用途

2.3 标识符

定义

标识符是用来标识某个实体、对象、类、方法名、变量、常量、语句块的一个字符符号。

命名规则

标识符只能由数字、字母、下划线、美元符号$组成,但不能以数字开始,也不建议用下划线开始,$符号开头的标识符具有特别意义。

命名规范

驼峰命名方式,具体参考阿里巴巴java编程规约

类名、接口名:首字母大写,后面每个单词首字母大写,不能以数字开头(pulic修饰的类名和接口名与字节码命名相同)

变量名、方法名:首字母小写,后面每个单词首字母大写

常量名:全部大写,单词和单词之间使用下划线_衔接,如:大写_大写,LOGIN_SUCCESS、ACCESS_TOKEN 等。

2.4 关键字

关键字

作用

abstract

表明类或者成员方法具有抽象属性

boolean

基本数据类型,布尔类型

break

提前跳出一个块

byte

基本数据类型,字节类型

case

用在 switch 语句之中,表示其中的一个分支

catch

用在异常处理中,用来捕捉异常

char

基本数据类型,字符类型

class

声明一个类

continue

回到一个块的开始处

default

默认,用在 switch 语句中表明一个默认的分支

do

用在 do-while 循环结构中

double

基本数据类型,双精度浮点数类型

else

用在条件语句中,表明当条件不成立时的分支

enum

枚举,和class一样,定义枚举类

extends

继承,表面一个类或接口是另外一个的子类

final

表示不可变,最终的

finally

处理异常,声明一个肯定会被执行到的语句块

float

基本数据类型,单精度浮点数类型

for

循环结构

goto

保留关键字,没有具体含义,java中不支持

if

条件语句

implements

表明一个类实现了给定的接口

import

表明要访问指定的类或包

instanceof

判断符,测试一个对象是否是指定类型的实例对象

int

基本数据类型,整数类型

interface

接口

long

基本数据类型,长整数类型

native

声明一个方法底层由 C/C++语言实现,可被计算机执行

new

创建新实例对象

package

private

访问控制方式:私用模式

protected

访问控制方式:保护模式

public

访问控制方式:共用模式

return

从成员方法中返回数据

short

基本数据类型,短整数类型

static

静态属性

super

表明当前对象的父类型引用或者父类型的构造方法

switch

分支语句结构的引导词

synchronized

表明一段代码需要同步执行,线程安全标志

this

指向当前实例对象的引用

throw

抛出一个异常

throws

声明在当前定义的成员方法中所有需要抛出的异常

transient

声明不用序列化的成员域

try

尝试一个可能抛出异常的程序块

void

声明当前成员方法没有返回值

volatile

表明两个或者多个变量必须同步地发生变化

while

用在循环结构中

2.5 变量

变量本质

变量是一块拥有名字的内存空间,不同的变量在JVM不同的内存空间中,变量即保存内存地址。

变量定义

变量是内存当中存储数据最基本的单元,将数据(字面量)放到内存当中,给这块内存空间起一个名字后就是变量。

变量三要素

数据类型:指定变量的字面量的数值类型,分八大基础数据类型和引用数据类型。

变量名:变量的名称,一般见名知意;存储在虚拟机栈中的栈帧的局部变量区。

字面量:区分不同数据类型变量的数值,存储在虚拟机栈中的栈帧的操作数区。

2.5.1 变量分类

常量

常量指的是 static 和 final修饰的变量,只允许赋值一次,一旦赋值,不可以再修改,存储在方法区。

静态变量

静态变量又叫类变量,属于类级别的变量,与类一起加载到方法区内存当中。静态变量是static修饰的属性,在编译期初始化,且只初始化一次到方法区中。静态变量不需要对象就可以直接调用。

非静态变量

非静态变量是不使用static关键字修饰的变量,需要创建对象后才能使用。

实例变量

实例变量又叫成员变量,属于类级别变量,编写在方法体外,类体内。需要 类在堆内存中实例化、创建对象后,才能使用(运行期)。

局部变量

定义在方法体内的变量,只在方法体当中有效,方法开始执行,局部变量的内存才会被分配;当方法执行结束之后,局部变量的内存就释放了。

注意

静态方法中不能直接调用或引用非静态的变量和方法,因为初始化和运行期对不上。而非静态的可以直接调用静态的。

2.5.2 变量在内存的存储方式

局部变量

局部变量存在于:方法体内--栈内存栈帧局部变量区,使用前必须初始化

成员变量

成员变量存在于:类体内--随类加载信息而加载,使用前若不初始化,系统赋默认值

三 java数据类型

数据概念

在计算机中,所有的java文件都是以数据的形式存在的。而存储的数据分为不同的数据类型,每一种数据类型存储不一样大小的数据。数据的最小单位是位--bit,又称比特;存储容量的基本单位是字节--byte。

计算机数据形式

1byte = 8bit

1字节=8位:00000000

2字节=16位:00000000 00000000

4字节=32位:00000000 00000000 00000000 00000000

8字节=64位:00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

3.1 数据类型分类

整数型默认int:byte(1字节)、short(2字节)、int(4字节)、long(8字节)

浮点型默认double:float(4字节)、double(8字节)

字符型:char(2字节)

布尔型:boolean(1字节),JVM 支持 boolean 数组,但是数组底层也是通过读写 byte数组来实现的。

3.2 数据类型取值范围

在二进制位当中,最左边的二进制位是符号位,0 表示正数,1 表示负数。每种数据类型根据其占用空间大小,最大值是左边一个0右边n个1,如byte最大值01111111,short最大值01111111 11111111

基本数据类型

占用字节(位数)

范围

byte

1字节(8位)

11111111、(-128~127)

short

2字节(16位)

11111111 11111111、(-32768~32767)

int

4字节(32位)

11111111..11111111、(-2147483648~2147483647)

long

8字节(64位)

11111111 ...... 11111111

float

4字节(32位)

11111111..11111111、(-2147483648~2147483647)

double

8字节(64位)

11111111 ...... 11111111

boolean

1字节(8位)

true、false

char

2字节(16位)

0~65535、(2^16-1)

引用数据类型

占用字节(位数)

范围

String

多个char型

char数组

Object

所有类的父类

BigDecimal

超大精度的数据

System

系统类

输入流in、输出流out、错误输出流err

file

文件对象

实际存在的文件和目录

FileInputStream

文件输入流

文件

FileOutputStream

文件输出流

文件

3.3 数据类型转换

转换范围

八种基本数据类型中,除 boolean类型不能转换,剩下七种类型之间都可以进行转换;

转换要求

如果int型字面量没有超出 byte(128)、short(32767)、char (65535)的取值范围,可以直接将其赋值给byte、short、char 类型的变量;

小转大

小容量向大容量转换称为自动类型转换

原理:小容量在左边补0补齐位数到大容量

容量从小到大排序:byte < short(char) < int < long < float < double,其中 short 和 char 都占用两个字节,但是 char 可以表示更大的正整数;

大转小

大容量转换成小容量称为强制类型转换

原理:大容量在左边删除位数到小容量),编写时必须添加“强制类型转换符”,但运行时可能出现精度损失,谨慎使用;

短整型转换

byte、short、char 类型混合运算时,先各自转换成 int 类型再做运算;

隐藏错误:byte b1= 12 和 byte b1 += 12 正确;byte = b1 + 2 编译错误。b1直接赋值时不超过范围可以直接赋,而做+运算时b1是int类型,大转小编译错误。

混合转换

多种数据类型混合运算,各自先转换成容量最大的那一种再做运算。(多类型混合运算经常编译不通过)

注意

对于基本数据类型的赋值运算,经常因为字面量会出现超出范围而最终赋值了补码的数。

3.4 编码转换

编码

从字符类型转换到二进制数的过程称为编码

解码

从二进制数到字符类型数据的过程称为解码

字符编码

Unicode编码:\u 后面的十六进制表示中文汉字的 unicode编码,如\u4e2d的4e2d就是字符编码集的 中 字对应的十六进制。

常见字符

对应ASCLL码

二进制数

a

97

01100001

b

98

01100010

c

99

01100011

d

100

e

101

...z

123

A

65

B

66

C

67

D

68

...Z

91

0

48

1

49

2

50

四 进制数

概念

进制数指的是使用不同基底的数来表示日常生活的十进制数的数制,其中以2为基底表示的是二进制数,以8为基底表示的是八进制数,以16为基底表示的是十六进制数

4.1 常见进制数

二进制

以0b开始,以2为基底来表示十进制数的进制数。所有执行代码和指令在计算机底层的实现都是二进制,每一个程序都由代码片段组成,代码片段由标识符、变量、数据类型等组成,根据数据类型的不同,可以转换为二进制0、1底层实现。

十进制

现实中最常见的数,任何进制数都可以转换为十进制数。

八进制

以0开始,以8为基底来表示十进制数的进制数。

十六进制

以0x开始,以16为基底来表示十进制数的进制数。

4.2 码制数(最高位0为正,1为负)

概念

码制数指的是计算机底层用来表示数据的都是二进制数,但二进制数也有正负区分,为了方便区分则采用了码制数表示不同大小的二进制数。计算机底层统一采用补码来表示数据。

4.2.1 常见码制数

原码

直接将字面量数值转换为二进制的数值就是原码。正数的原码、反码、补码都是同一个。

反码

对于负数的反码,是将转换后的二进制最高位取1,其余位数按位取反所得。(如-15原码=1000 1111,反码=1111 0000)

补码

在负数的二进制反码基础上末位加1,而反码也可根据补码减1得到。计算机底层在任何情况下都是采用二进制补码的形式存储数据。

五 运算符(以二进制数进行运算)

赋值运算符

= 号(从右往左,将右边字面量赋给左边变量)

扩展运算符

+=、-=、*=、\=、%=,(运算前后不改变数据类型)

算数运算符

+、-、*、\(除,取整数商)、%(按模取余,取余数)

关系运算符

>、>=、

逻辑运算符(运算操作数为布尔型,运算结果也为布尔型)

逻辑与(&):操作数为布尔型,同真为真,一假则假;

逻辑或(|):操作数为布尔型,一真则真,同假才假

短路与(&&):左边为真判断右边,左边为假直接是假。

短路或(||):左边为真直接为真,左边为假判断右边。

位运算符

按位与(&):操作数为int型,两个二进制数的相应位值全为1才为1,其他都为0。11=1、10=0、01=0、00=0

按位或(|):操作数为int型,两个二进制数的相应位值一个为1即为1,两个0才为0。11=1、10=1、01=1、00=0

逻辑异或(^):相同为假,相异为真,两个二进制数的相应位值不同时,该位运算结果为1,否则为0。10=1、01=1、11=0、00=0

位移运算符(对补码进行移动变化,最高位0为正,1为负)

正数移:三码(源码、反码、补码)相同,所以无论左移还是右移都是补0.(左移则表示放大2的N次方,右移表示缩小2的N次方)

负数移:对负数的补码移动,左移在右边补0,右移需要在左边补1

左移(<,左移后右边空出位填补0,高位左移溢出则舍弃该高位。如a=15,二进制数为00001111,a<<2表示左移2位,移动后得00111100。

带符号右移(>>):将运算符左边的运算对象,向右移动右操作数指定的位数。若是正数,高位补零;若是负数,高位补1,即符号位不变,缺位补符号位。如16>>2 = 4,00010000右移动2位为00000100;-16>>2 = -4,10010000右移动2位为10000100。

无符号右移(>>>):将运算符左边的运算对象,向右移动右操作数指定的位数。但忽略符号位扩展,0补最高位,缺位不管左边数字是正是负都补0,无符号右移运算只针对负数计算。

三目运算符:布尔表达式?表达式 1:表达式 2,判断式为真执行表达式1,为假执行表达式2。

字符串连接运算符:+、new

按位取反(~):对一个二进制数按位取反,即将0变1,1变0

自增运算符:

n++(先赋值再自增加1)

n--(先赋值再自减去1)

++n(先自增加1再赋值)

--n(先自减去1再赋值)

常见面试题

java常见的数据类型有哪些?

java常见数据类型分为基本数据类型和引用数据类型。

基本数据类型包括:数值型(byte、short、int、long、float、double),布尔型(boolean)以及字符型(char)。

除了基本类型外,其他数据类型都属于引用类型,包括类(自定义类和本地类)、接口、数组等都是引用数据类型。

什么是自动装箱?什么是自动拆箱?

答:

基本类型都有对应的包装类型,基本类型与其对应的包装类型之间的赋值使用自动装箱与拆箱完成。

基本数据类型数值转换为对应的包装类型,称为自动装箱,如int转换为Integer

包装类型转换为对应的基本数据类型称为拆箱,如Double转换为double。

什么是自动类型转换?什么是强制类型转换?

答:

在八大基本数据类型中,除了boolean类型,其他的数据类型由小容量向大容量转型,称为自动类型转换,自动类型转换是根据小容量位数的高位补全转换为大容量。而大容量向小容量转型称为强制类型转换,强制类型转换是根据大容量需要丢掉高位的数换为小容量,因而容易造成精度和数据丢失。

描述一下n++和++n的区别?

答:

n++先进行赋值运算,再自增加1;

++n先进行自增加1,再进行赋值运算。

在静态方法里可以访问非静态变量吗?

答:

Java 中的 static变量归相应的类所有,它的值对于类的所有实例都是相同的。static 变量是在 JVM 加载类的时候就已经初始化的,而非静态变量需要先创建或实例化对象才能调用。如果代码试图访问非静态的变量,而且不是通过类的实例(或对象)去访问,编译器会报错。因为非静态变量在加载时,对象还没有被创建,并且没有与实例相关联。

什么是包装类?Java 中都有哪些包装类?

答:

基本数据类型都有对应的包装类型,当一个方法中的参数需要传入对象形式的数值时,基本数据类型就不能满足需求,因此提供对应的包装类型。包装类型一共有八种。

什么是实例变量?什么是局部变量?什么是类变量?什么是final 变量?

答:

谈谈new Integer(123) 与 Integer.valueOf(123) 的区别?

答:

new Integer(123) 每次都会新建一个对象;Integer.valueOf(123)则会使用缓存池中已存在的对象,多次调用会取得同一个对象的引用,而不会另外创建新的对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值