JSE1-基础概念

30 篇文章 0 订阅

1 Java 简介

1.1 概述

  • Java 分成三种版本

    • Java 标准版(JSE Java Standard Edition)
    • Java 微缩版(JME Java Micro Edition)
    • Java 企业版(JEE Java Enterprise Edition)
  • Java 标准组织: JCP(Java Community Process)
    主要职能是发展和更新 Java 技术规范、参考实现(RI)、技术兼容包(TCK)

1.1 java语言特点

java语言特点: 简单的、面向对象、平台无关、多线程、分布式、安全、高性能、可靠的、解释型、自动垃圾回收等特点
- 平台无关性: 一次编写,到处运行:Write Once, Run Anywhere
- 分布式:软件由很多个可以独立执行的模块组成,这些模块被分布在多台计算机上,可以同时运行,对外看起来还是一个整体

1.2 java使用过程

java入门-java使用过程

  • 1:编写代码

Java 文件, 上图的Hello.java。

  • 2:编译

编译后的文件叫做 class 文件,上图Hello.class 文件。

  • 3:类装载 ClassLoader

类装载的功能是为执行程序寻找和装载所需要的类。

  • 4:字节码(byte-code)校验

功能是对 class 文件的代码进行校验,保证代码的安全性。

  • 5:解释(Interpreter)

可是机器也不能认识 class 文件,还需要被解释器进行解释,机器才能最终理解我们所要表达的东西。

  • 6:运行 (run)

最后由运行环境中的 Runtime 对代码进行运行,真正实现我们想要机器完成的工作。

1.3 Java 技术三大特性

1.3.1 ==虚拟机==

Java虚拟机JVM(Java Virtual Machine), Java 运行环境

基本功能:

  • (1):通过 ClassLoader 寻找和装载 class 文件

  • (2):解释字节码成为指令并执行,提供 class 文件的运行环境

  • (3):进行运行期间垃圾回收

  • (4):提供与硬件交互的平台

JVM 定义下列项:

  • 指令集(相当于中央处理器[CPU] )

  • 寄存器

  • 类文件格式

  • 垃圾收集堆

  • 存储区

JVM 的代码格式由紧缩有效的字节码构成。由JVM字节码编写的程序必须保持适当的类型约束。
大部分类型检查是在编译时完成。 任何从属的 Java 技术解释器必须能够运行任何含有类文件的程序,这些类文件应符合 Java 虚拟机规范中所指定的类文件格式。

java入门-java在JVM上运行

1.3.2 垃圾回收

1.3.2.1 什么是垃圾

在程序运行的过程中,存在被分配了的内存块不再被需要的情况,这些内存块对程序来讲就是垃圾。

产生了垃圾,自然就需要清理这些垃圾,更为重要的是需要把这些垃圾所占用的内存资源,回收回来,加以再利用,从而节省资源,提高系统性能。

1.3.2.2 垃圾回收
  • 不再需要的已分配内存应取消分配(释放内存)

  • 在其它语言中,取消分配是程序员的责任

  • Java 编程语言提供了一种系统级线程以跟踪内存分配

  • 垃圾收集

  • 可检查和释放不再需要的内存

  • 可自动完成上述工作

  • 可在 JVM 实现周期中,产生意想不到的变化

在 C,C++ 或其它语言中,程序员负责释放内存

Java 编程语言解除了程序员释放内存的责任。它可提供一种系统级线程以跟踪每一次内存的分配情况。
在 Java 虚拟机的空闲周期,垃圾收集线程检查并释放那些可被释放的内存。垃圾收集在 Java 技术程序的生命周期中自动进行,它解除了释放内存的要求,这样能够有效避免内存漏洞和内存泄露(内存泄露就是程序运行期间,所占用的内存一直往上涨,很容易造成系统资源耗尽而降低性能或崩溃)。

1.3.2.3 垃圾回收注意
  • (1):在 Java 里面,垃圾回收是一个自动的系统行为,程序员不能控制垃圾回收的功能和行为。比如垃圾回收什么时候开始,什么时候结束,还有到底哪些资源需要回收等,都是程序员不能控制的。

  • (2):有一些跟垃圾回收相关的方法,比如:System.gc() , 调用这些方法,仅仅是在通知垃圾回收程序,至于垃圾回收程序运不运行,什么时候运行,都是无法控制的。

  • (3):程序员可以通过设置对象为null(后面会讲到)来标示某个对象不再被需要了,这只是表示这个对象可以被回收了,并不是马上被回收。

1.3.3 ==代码安全==

Java 如何保证编写的代码是安全可靠:

  • (1):第一关:编写的代码首先要被编译成为 class 文件,如果代码写得有问题,编译期间就会发现,然后提示有编译错误,无法编译通过。
  • (2):第二关:通过编译关后,在类装载(ClassLoader)的时候,还会进行类装载检查,把本机上的类和网络资源类相分离,在调入类的时候进行检查,因而可以限制任何“特洛伊木马”的应用。

  • (3):第三关:类装载后,在运行前,还会进行字节码校验,以判断你的程序是安全的。
    Java 软件代码在实际运行之前要经过几次测试。

    JVM将代码输入一个字节码校验器以测试代码段格式并进行规则检查--检查伪造指针、违反对象访问权限或试图改变对象类型的非法代码。

    注意:所有源于网络的类文件都要经过字节码校验器

    字节码校验器对程序代码进行四遍校验,这可以保证代码符合JVM 规范并且不破坏系统的完整性。如果校验器在完成四遍校验后未返回出错信息.

    字节码校验要点:

      • 类符合JVM规范的类文件格式
      • 无访问限制异常
      • 代码未引起操作数栈上溢或下溢
      • 所有操作代码的参数类型将总是正确的
      • 无非法数据转换发生,如将整数转换为对象引用
      • 对象域访问是合法的
  • (4):第四关:如果你的程序在网络上运行,还有沙箱(SandBox)的保护,什么是沙箱呢?就是如果你的程序没有获得授权,只能在沙箱限定的范围内运行,是不能够访问本地资源的,从而保证安全性。

java入门-编译安全

2.java基础语法

2.1 关键字

abstract    do  implements  private throw
boolean double  import  protected   throws
break   else    instanceof  public  transient
byte    extends int return  true
case    false   interface   short   try
catch   final   long    static  void
char    finally native  super   volatile
class   float   new switch  while
continue    for null    synchronized    enum
default if  package this    assert
class

关键字说明

abstract:表明类或类中的方法是抽象的;

•boolean:基本数据类型之一,布尔类型;

•break:提前跳出一个块;

•byte:基本数据类型之一,字节类型;

•case:在 switch 语句中,表明其中的一个分支;

•catch:用于处理例外情况,用来捕捉异常;

•char:基本数据类型之一,字符类型;

•class:类;

•continue:回到一个块的开始处;

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

•do:用在 do while 循环结构中;

•double:基本数据类型之一,双精度浮点数类型;

•else:在条件语句中,表明当条件不成立时的分支;

•extends:用来表明一个类是另一个类的子类;

•final:用来表明一个类不能派生出子类,或类中的方法不能被覆盖,或声明一个变量是常量;

•finally:用于处理异常情况,用来声明一个肯定会被执行到的块;

•float:基本数据类型之一,单精度浮点数类型;

•for:一种循环结构的引导词;

•if:条件语句的引导词;

•implements:表明一个类实现了给定的接口;

•import:表明要访问指定的类或包;

•instanceof:用来测试一个对象是否是一个指定类的实例;

•int:基本数据类型之一,整数类型;

•interface:接口;

•long:基本数据类型之一,长整数类型;

•native:用来声明一个方法是由与机器相关的语言(如 C/C++/FORTRAN 语言)实现的;

•new:用来申请新对象;

•package:包;

•private:一种访问方式:私有模式;

•protected:一种访问方式:保护模式;

•public:一种访问方式:公共模式;

•return:从方法中返回值;

•short:基本数据类型之一,短整数类型;

•static:表明域或方法是静态的,即该域或方法是属于类的;

•strictfp:用来声明 FP-strict(双精度或单精度浮点数)表达式,参见 IEEE 754 算术规范;

•super:当前对象的父类对象的引用;

•switch:分支结构的引导词;

•synchronized:表明一段代码的执行需要同步;

•this:当前对象的引用;

•throw:抛出一个异常;

•throws:声明方法中抛出的所有异常;

•transient:声明不用序列化的域;

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

•void:表明方法不返回值;

•volatile:表明两个或多个变量必须同步地发生变化;

•while:用在循环结构中;

•assert:声明断言;

•enum:声明枚举类型;

注意:
- 关键字都是小写的
- goto 和 const 不是 Java 编程语言中使用的关键字,但是是 Java 的保留字
- true 和 false 不是关键字,而是 boolean 类型直接量

2.2 标识符

2.2.1 什么是标识符

在 Java 编程语言中,标识符是赋予变量、类或方法的名称。

2.2.2 标识符命名规则

(1):首字母只能以字母、下划线、 ,线  开 头 , 其 后 可 以 跟 字 母 、 下 划 线 、 和数字

(2):标识符区分大小写 (Java 都区分大小写);标识符不能是关键字;标识符长度没有限制

(3):标识符由多个单词构成时驼峰; 命名的有意义,望文知意; 少用$(1不习惯,2有情况特殊含义)

(4):由于 Java 语言使用 Unicode 字符集,所以字母包括:

 ‘A’-‘Z’和‘a’-‘z’;Unicode 字符集中序号大于 0xC0 的所有符号;Unicode 字符集支持多种看起来相同的字母;建议标识符中最好使用 ASCII 字母

(5):标识符不应该使用中文,虽然中文标识符也能够正常编译和运行,其原因如上一点讲到的:是把中文当作 Unicode 字符集中的符号来对待了。

2.2.3 示例

错误的标识符及其原因分析如下:

My Variable     //含有空格
9pins           //首字符为数字
a+c             //加号不是字母
testing1-2-3    //减号不是字母
It's            //单引号不是字母
java&uml        //与号不是字母

2.3 数据类型

2.3.1 概述

数据类型简单的说就是根据数据的进行分类,划分的每种数据类型都具有区别于其它类型的特征,每一类数据都有相应的特点和操作功能。例如数字类型的就能够进行加减乘除的操作。

java基础语法-数据类型

2.3.2 基本数据类型

Java 中的基本数据类型分为八个原始数据类型,原始类型可分为四种:

(1):逻辑型 :boolean

只允许true 和 false;有些语言允许将数字值转换成逻辑值(所谓“非零即真”),Java不允许.

(2):字符型:char
char表示单个字符,1个char代表1个16-bit(2个字节)无符号的(不分正负的)Unicode(\u????) 字符,char必须在单引号内.

char c1 = 'a';
char c2 = '\uae13';
char c3 = '\n';

(3):整数型:byte(字节型)、short(短整型)、int(整型)、long(长整型)

(4):浮点型:float、double(小数默认double),表示小数或指数

double abc = 5.6; //小数默认double
float abc = 5.6F;
float abc = 5.6f;
double abc = 5.6D;
double abc = 5.6d;

2.3.3 取值范围

名称长度范围默认值
byte8位(1字节[byte],8位[bit])-2^7^~ 2^7^-10
short16 位-2^15^ ~ 2^15^-10
int32 位-2^31^ ~ 2^31^–10
long64 位-2^63^ ~ 2^63^-10
float32 位-2^149^ ~ 2^128^-10.0
double64 位-2^1074^ ~ 2^1024^-10.0
char16 位2^16^-1(Unicode)Unicode 0

2.3.4 字符串型 String

String 多个字符,用双引号,字符数量是任意多个。字符本身符合 Unicode 标准,可以反斜线符号(转义字符)。与 C 和 C++不同,String 不能用 \0 作为结束。

2.3.5 char和String区别及初始化

char 和 String 类型变量的声明和初始化如下所示:

char ch = ‘A’; // 声明并初始化一个字符变量

char c2 = ‘\uae13’; //unicode定义方式

char ch1,ch2 ; //声明两个字符变量

String greeting = “Good Morning !! \n” ; //基本字符,包含转义

String s2 = “\uae13\uae15”;//unicode定义方式

String str1,str2 ; // 声明两个字符串变量

注意:

(1):String 不是原始的数据类型,而是一个类(class)

(2):String 包含的字符数量是任意多个,而字符类型只能是一个。

要特别注意:”a” 表示的是字符串,而’a’表示的是字符类型,它们具有不同的功能。

(3):String 的默认值是 null

==示例:==

        /**
        //打印结果如下
         c1->a
         c2->긓
         c3->

         s1->cc
         s2->긓긕
         */
    char c1 = 'a';
    char c2 = '\uae13';
    char c3 = '\n';
    String  s1 = "cc";
    String  s2 = "\uae13\uae15";
    System.out.println("c1->"+c1);
    System.out.println("c2->"+c2);
    System.out.println("c3->"+c3);
    System.out.println("s1->"+s1);
    System.out.println("s2->"+s2);

2.3.6 ==Unicode 编码和转义字符==

  • Unicode 编码
    Unicode 编码又叫统一码、万国码或单一码,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
    unicode 的表达如下:
    ‘\u????’ 一个 Unicode 字符。????应严格按照==四个16 进制数==进行替换。

  • 占用空间: 2个byte(字节),16bit(位),4个16进制数(16bit=4*4 bit=4 个 2^4数字=4 个 16进制数字.)

  • 转义字符是指,用一些普通字符的组合来代替一些特殊字符,由于其组合改变了原来字符表示的含义,因此称为“转义”。

常见的转义字符:

\n 回车(\u000a)
\t 水平制表符(\u0009)
\b 空格(\u0008)
\r 换行(\u000d)
\f 换页(\u000c)
\' 单引号(\u0027)
\" 双引号(\u0022)
\\ 反斜杠(\u005c)

2.3.7 声明和赋值

  • 1)声明:

声明为 Java 程序实体引入标识符,能够使用这些名字访问到这些实体,声明实体包括:类名、属性名、方法名、变量名、参数名、接口名等等。其实简单点说就是定义某个东西并对外宣称它。

  • 2)赋值:

赋值就是为一个声明的变量或者常量赋予具体的值,也就是赋予值的意思。使用一个等号”=”来表示。

示例:int a = 5;这句话的意思就是,声明一个类型为 int 的变量 a,并将它赋值为 5。

2.4 常量和变量

  • 1)常量

常量是值不可以改变的标识符。

对常量的定义规则:建议大家尽量全部大写,并用下划线将词分隔。如:FILE_PATH

  • 2)变量

变量是值可以改变的标识符,用来引用一个存储单元,可以通过操作变量来操作变量所对应的内存区域或值块的值。

  • 2.1) 变量说明

(1):遵从所有标识符的规则;大小写混用,但首字符应小写;尽量不要使用下划线和$符号

(2):可以先声明再赋值,如:int i;i=9;也可以声明的同时进行赋值:int i=9;

(3):变量均具有: 名字、类型(基本或引用)、一定大小的存储单元以及值

2.5 java基本知识

  • 语句: 用分号”;”结尾的一行代码就是语句,Java 中语句必须以”;”结尾
  • 块(block1): 一个块是以{}作为边界的语句的集合,块可以嵌套
  • 注释: 三种
    //或 /···/。 /*···/将注释形成文档,并输入给 javadoc 以生成 HTML 代码文档。
  • 类: 类名应该是名词,大小写可混用,但首字母应大写。

  • 接口──接口名大小写规则与类名相同。

  • 方法:方法名应该是动词,大小写可混用,但首字母应小写。在每个方法名内,大写字母将词分隔并限制使用下划线。

  • 变量:所有变量都可大小写混用,但首字符应小写。词由大写字母分隔,限制用下划线,限制使用美元符号($),因为这个字符对内部类有特殊的含义。
    变量应该代表一定的含义,通过它可传达给读者使用它的意图。尽量避免使用单个字符,除非是临时“即用即扔”的变量(例如,用 i, j, k 作为循环控制变量)

  • 常量: 全部大写并用下划线将词分隔。MAXI_SIZE

  • 控制结构: ─当语句是控制结构的一部分时,即使是单个语句也应使用括号({})将语句封闭。例如:

if  (condition) {

do something

}elsedo something else
  • 语句行: 每行只写一个语句并使用四个缩进的空格使你的代码更易读。

2.6 运算符

2.6.1 算数运算

+、-、*、/(除于,5/2=2)、%(mod运算)、++-- 

x++ 和+ +x , x++是先使用,然后再加;++x 是先加然后再使用

2.6.2 比较运算

>、<、>=、<=、==、!=、instanceof、&&(与)、||(或)

字符可以比较大小(用它们的 ascii 码,化为整数)

2.6.3 逻辑运算

&(与,都11),|(或,有11),~(补码 Complement,取反),^(异或,两不同1,两同0)
多个则两两计算
例:
false^false^false-->false
false^true^false--->true
false^false^true->true

java基础语法-运算符-逻辑运算

2.6.4 位运算

右移一位(>>)相对于除以 2:左移(<<)相对于乘以 2。

System.out.println(10>>1);-->5
System.out.println(10>>1>>1);-->2
System.out.println(10>>1>>1>>1);-->1
System.out.println(10>>1>>1>>1>>1);-->0
System.out.println(10>>1>>1>>1>>1>>1);-->0
System.out.println(20<<2);-->80

2.6.5 移位运算

2.6.9 其它

  • 赋值运算 =
  • 字符串连接 +
  • 三目运算 ?:
int i = (10>8)?1:2;-->1
int j = (5>8)?1:2;-->2

2.7 控制语句

2.7.1 if else

2.7.2 switch

表示选择分支

switch (expr){
    case expr2:
    statements;
    break;

    case expr3:
    statements;
    break;

    default:
    statements;
    //break;

expr只能是整数型的值或者 enum 枚举类型的常量值,包含byte、short、int 和 char,不能是字符串或对象,也不能是 long 型的值.
注意勿忘break;

2.7.3 循环控制

for (初值表达式; boolean 测试表达式; 改变量表达式){
    语句或语句块
}

//可以省略部分或全部无限循环
for(;;){
}


while   (布尔表达式) {
    语句或块
}

do {
语句或块;
}while (布尔测试);

continue;//本次循环

beeak;//本次条件

label 举例如下:

public static void test1() {
    LABLE:
    for (int i = 0; i < 10; i++) {
        if (i == 3) {
            break LABLE;
        }
        System.out.println("i==" + i);
    }
}

i==0
i==1
i==2

public static void test2() {
    for (int j = 0; j < 8; j++) {
        LABLE:
        if (j == 3) {
            break LABLE;
        }
        System.out.println("j==" + j);
    }
}


j==0
j==1
j==2
j==3
j==4
j==5
j==6
j==7 

文中内容根据网络文字总结.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值