1、java基础

java入门

计算机语言发展史

计算机语言经历了三代:第一代是机器语言,第二代是汇编语言,第三代是高级语言。

Java的核心优势

跨平台是Java语言的核心优势,赶上最初互联网的发展,并随着互联网的发展而发展,建立了强大的生态体系,目前已经覆盖IT各行业的“第一大语言”,是计算机界的“英语”。

虽然,目前也有很多跨平台的语言,但是已经失去先机,无法和Java强大的生态体系抗衡。Java仍将在未来几十年成为编程语言的主流语言。

​ JAVA虚拟机是JAVA实现跨平台的核心。事实上,基于JAVA虚拟机(JVM)的编程语言还有很多种。

Java各版本的含义

JavaSE(Java Standard Edition):标准版,定位在个人计算机上的应用。这个版本是Java平台的核心,它提供了非常丰富的API来开发一般个人计算机上的应用程序,包括用户界面接口AWT及Swing,网络功能与国际化、图像处理能力以及输入输出支持等。在上世纪90年代末互联网上大放异彩的Applet也属于这个版本。Applet后来为Flash取代,Flash即将被HTML5取代。

JavaEE(Java Enterprise Edition):企业版,定位在服务器端的应用。

JavaEE是JavaSE的扩展,增加了用于服务器开发的类库。如:JDBC是让程序员能直接在Java内使用的SQL的语法来访问数据库内的数据;Servlet能够延伸服务器的功能,通过请求-响应的模式来处理客户端的请求;JSP是一种可以将Java程序代码内嵌在网页内的技术;

JavaME(Java Micro Edition):微型版,定位在消费性电子产品的应用上

JavaME是JavaSE的内伸,包含J2SE的一部分核心类,也有自己的扩展类,增加了适合微小装置的类库:javax.microedition.io.*等。该版本针对资源有限的电子消费产品的需求精简核心类库,并提供了模块化的架构让不同类型产品能够随时增加支持的能力。
在这里插入图片描述
很多人开始会误解为安卓开发就是JavaME,这两个是完全不同的内容。

Java的特性和优势

跨平台/可移植性

​ 这是Java的核心优势。Java在设计时就很注重移植和跨平台性。比如:Java的int永远都是32位。不像C++可能是16,32,可能是根据编译器厂商规定的变化。这样的话程序的移植就会非常麻烦。

安全性

​ Java适合于网络/分布式环境,为了达到这个目标,在安全性方面投入了很大的精力,使Java可以很容易构建防病毒,防篡改的系统。

面向对象

​ 面向对象是一种程序设计技术,非常适合大型软件的设计和开发。由于C++为了照顾大量C语言使用者而兼容了C,使得自身仅仅成为了带类的C语言,多少影响了其面向对象的彻底性!Java则是完全的面向对象语言。

简单性

​ Java就是C++语法的简化版,我们也可以将Java称之为“C+±”。跟我念“C加加减”,指的就是将C++的一些内容去掉;比如:头文件,指针运算,结构,联合,操作符重载,虚基类等等。同时,由于语法基于C语言,因此学习起来完全不费力。

高性能

​ Java最初发展阶段,总是被人诟病“性能低”;客观上,高级语言运行效率总是低于低级语言的,这个无法避免。Java语言本身发展中通过虚拟机的优化提升了几十倍运行效率。比如,通过JIT(JUST IN TIME)即时编译技术提高运行效率。 将一些“热点”字节码编译成本地机器码,并将结果缓存起来,在需要的时候重新调用。这样的话,使Java程序的执行效率大大提高,某些代码甚至接待C++的效率。

​ 因此,Java低性能的短腿,已经被完全解决了。业界发展上,我们也看到很多C++应用转到Java开发,很多C++程序员转型为Java程序员。

分布式

​ Java是为Internet的分布式环境设计的,因为它能够处理TCP/IP协议。事实上,通过URL访问一个网络资源和访问本地文件是一样简单的。Java还支持远程方法调用(RMI,Remote Method Invocation),使程序能够通过网络调用方法。

多线程

​ 多线程的使用可以带来更好的交互响应和实时行为。 Java多线程的简单性是Java成为主流服务器端开发语言的主要原因之一。

健壮性

​ Java是一种健壮的语言,吸收了C/C++ 语言的优点,但去掉了其影响程序健壮性的部分(如:指针、内存的申请与释放等)。Java程序不可能造成计算机崩溃。即使Java程序也可能有错误。如果出现某种出乎意料之事,程序也不会崩溃,而是把该异常抛出,再通过异常处理机制加以处理。

Java应用程序的运行机制

计算机高级语言的类型主要有编译型解释型两种,而Java 语言是两种类型的结合。

​ Java首先利用文本编辑器编写 Java源程序,源文件的后缀名为.java;再利用编译器(javac)将源程序编译成字节码文件,字节码文件的后缀名为.class; 最后利用虚拟机(解释器,java)解释执行。
在这里插入图片描述

JVM、JRE和JDK

JVM(Java Virtual Machine)就是一个虚拟的用于执行bytecode字节码的”虚拟计算机”。他也定义了指令集、寄存器集、结构栈、垃圾收集堆、内存区域。JVM负责将Java字节码解释运行,边解释边运行,这样,速度就会受到一定的影响。

​ 不同的操作系统有不同的虚拟机。Java 虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,随处运行”。 Java虚拟机是实现跨平台的核心机制。如图1-6所示。
在这里插入图片描述

​ Java Runtime Environment (JRE) 包含:Java虚拟机、库函数、运行Java应用程序所必须的文件。

​ Java Development Kit (JDK)包含:包含JRE,以及增加编译器和调试器等用于程序开发的文件。

​ JDK、JRE和JVM的关系如图1-7所示。
在这里插入图片描述
Java运行时环境(JRE)。它包括Java虚拟机(JVM)、Java核心类库和支持文件。

Java开发工具包(JDK)是完整的Java软件开发包,包含了JRE编译器其他的工具(比如:JavaDoc,Java调试器)

老鸟建议:

​ **·**如果只是要运行Java程序,只需要JRE就可以。JRE通常非常小,其中包含了JVM。

​ **·**如果要开发Java程序,就需要安装JDK。

JDK下载和安装

地址:

www.oracle.com/technetwork/java/javase/downloads/index.html

JDK的安装目录C:\Program Files\Java\jdk1.8.0_131,可以看到如下的结构:

其中:

  • bin目录是存储一些可执行的二进制文件;
  • lib存储相关jar包;
  • src.zip是JDK相关JAVA类的源代码。
    在这里插入图片描述

环境变量Path的配置

环境变量是在操作系统中一个具有特定名字的对象, 它包含了一个或者多个应用程序所将使用到的信息。

Path是一个常见的环境变量,它告诉操作系统,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下寻找此程序外,还应到哪些目录下寻找。

具体看另一份文档。

开发java程序的一点小总结:

1.Java对大小写敏感,如果出现了大小写拼写错误,程序无法运行。

2.关键字public被称作访问修饰符(access modifier),用于控制程序的其它部分对这段代码的访问级别。

3.关键字class 的意思是类。Java是面向对象的语言,所有代码必须位于类里面。

4.一个源文件中至多只能声明一个public的类,其它类的个数不限,如果源文件中包含一个public 类,源文件名必须和其中定义的public的类名相同,且以“.java”为扩展名。

5.一个源文件可以包含多个类class。

6.正确编译后的源文件,会得到相应的字节码文件,编译器为每个类生成独立的字节码文件,且将字节码文件自动命名为类的名字且以“.class”为扩展名。

7.main方法是Java应用程序的入口方法,它有固定的书写格式:

8.public static void main(String[] args) {…}

9.在Java中,用花括号划分程序的各个部分,任何方法的代码都必须以“{”开始,以“}”结束, 由于编译器忽略空格,所以花括号风格不受限制。

10.Java中每个语句必须以分号结束,回车不是语句的结束标志,所以一个语句可以跨多行。

最常用DOS命令

1.cd 目录路径 进入一个目录
2.cd … 进入父目录
3.dir 查看本目录下的文件和子目录列表
4.cls 清楚屏幕命令
5.上下键 查找敲过的命令
6.Tab键 自动补齐命令

数据类型和运算符

注释

注释不会出现在字节码文件中,即Java编译器编译时会跳过注释语句。 在Java中根据注释的功能不同,主要分为单行注释、多行注释和文档注释。

  • 单行注释: 使用“//”开头,“//”后面的单行内容均为注释。
  • 多行注释: 以“/”开头以“/”结尾,在“/”和“/”之间的内容为注释,我们也可以使用多行注释作为行内注释。但是在使用时要注意,多行注释不能嵌套使用。
  • 文档注释: 以“/**”开头以“*/”结尾,注释中包含一些说明性的文字及一些JavaDoc标签(后期写项目时,可以生成项目的API)

每个方法和类最好都加个注释。(好习惯)

多行注释可以用来做行内注释。
在这里插入图片描述

标识符

标识符是用来给变量、类、方法以及包进行命名的,如Welcome、main、System、age、name、gender等。

标识符需要遵守一定的规则:

- 标识符必须以字母、下划线_、美元符号$开头。  
- 标识符其它部分可以是字母、下划线“_”、美元符“$”和数字的任意组合。
- Java 标识符大小写敏感,且长度无限制。
- 标识符不可以是Java的关键字。

标识符的使用规范

  • 表示类名的标识符:每个单词的首字母大写,如Man, GoodMan
  • 表示方法和变量的标识符:第一个单词小写,从第二个单词开始首字母大写,我们称之为“驼峰原则”,如eat(), eatFood()
  • 【注意】:Java不采用通常语言使用的ASCII字符集,而是采用Unicode这样标准的国际字符集。因此,这里字母的含义不仅仅是英文,还包括汉字等等。但是不建议大家使用汉字来定义标识符!
    在这里插入图片描述

其实也就是分为了三类:类名,常量,其他所有。
另外数据库的字段多为用下划线连接,这样反向工程生成的属性名才有驼峰。

Java中的关键字/保留字

Java关键字是Java语言保留供内部使用的,如class用于定义类。 关键字也可以称为保留字,它们的意思是一样的,我们不能使用关键字作为变量名或方法名。

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

变量

变量的本质

变量本质上就是代表一个”可操作的存储空间”,空间位置是确定的,但是里面放置什么值不确定。我们可通过变量名来访问“对应的存储空间”,从而操纵这个“存储空间”存储的值。

​ Java是一种强类型语言,每个变量都必须声明其数据类型。变量的数据类型决定了变量占据存储空间的大小。 比如,int a=3; 表示a变量的空间大小为4个字节。

​ 变量作为程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。变量在使用前必须对其声明, 只有在变量声明以后,才能为其分配相应长度的存储空间。

变量的声明

格式为:

`type  varName [=value][,varName[=value]...]; ``//[]中的内容为可选项,即可有可无``数据类型  变量名  [=初始值] [,变量名  [=初始值]…];`

注意事项

  • 每个变量都有类型,类型可以是基本类型,也可以是引用类型。
  • 变量名必须是合法的标识符
  • 变量声明是一条完整的语句,因此每一个声明都必须以分号结束

不提倡"一行声明多个变量"风格,逐一声明每一个变量可以提高程序可读性。

变量的分类

从整体上可将变量划分为局部变量、成员变量(也称为实例变量)和静态变量。

类型 声明位置 从属于 生命周期
局部变量 方法或语句块内部 方法/语句块 从声明位置开始,直到方法或语句块执行完毕,局部变量消失
成员变量(实例变量) 类内部,方法外部 对象 对象创建,成员变量也跟着创建。对象消失,成员变量也跟着消失;
静态变量(类变量) 类内部,static修饰 类被加载,静态变量就有效;类被卸载,静态变量消失。

局部变量(local variable)

方法或语句块内部定义的变量。生命周期是从声明位置开始到到方法或语句块执行完毕为止。

局部变量在使用前必须先声明、初始化(赋初值)再使用

【示例】局部变量

public void test() {
      int i;   int j = i+5 ; // 编译出错,变量i还未被初始化 } 
public void test() {
      int i;   i=10;   int j = i+5 ; // 编译正确}
//易错点:
public class LocalValue {
   
    public static void main(String[] args) {
   
        int a = 10;
        int b;
        int c;
        if (a>50){
   
            b=9;
        }
        //还没写到这里的时候不会出错,写到下面一行的时候就会提示出错了
        //因为 if(...){}其实不一定会为b赋值,所以编译也会检测出来,并报下面的错误
        c=b+a; //Variable 'b' might not have been initialized
    }
}

成员变量(也叫实例变量 member variable)

方法外部、类的内部定义的变量。从属于对象,生命周期伴随对象始终

如果不自行初始化,它会自动初始化成该类型的默认初始值。

数据类型 实始值
int 0
double 0.0
char ‘\u0000’ (空格,\u是Unicode码的意思)
boolean false

【示例2-8】实例变量的声明

public class Test {
      
	int i;
}

静态变量(类变量 static variable)

​ 使用static定义。 从属于类,生命周期伴随类始终,从类加载到卸载。 (注:讲完内存分析后我们再深入!先放一放这个概念!)

如果不自行初始化,与成员变量相同会自动初始化成该类型的默认初始值,如上表所示。

生命周期:静态变量>成员变量>局部变量

课堂练习1:变量的声明并赋值

public class LocalVariableTest {
     
	public static void main(String[ ] args) {
        
	boolean flag = true;  // 声明boolean型变量并赋值
	char c1, c2;   // 声明char型变量
	c1 = '\u0041';   // 为char型变量赋值
	c2 = 'B';   // 为char型变量赋值
	int x;   // 声明int型变量
	x = 9;  //为int型变量赋值  
	int y = x;  // 声明并初始化int型变量
	float f = 3.15f;   // 声明float型变量并赋值
	double d = 3.1415926;  //声明double型变量并赋值        
	}
}

课堂代码:

/**
  * 测试变量
  */public class TestVariable {
   
      int a;//成员变量, 从属于对象; 成员变量会自动被初始化
      static  int  size;//静态变量,从属于类
      public static void main(String[] args) {
   
          {
   int age; //局部变量,从属于语句块;
           age = 18;
          }
          int salary = 3000; //局部变量,从属于方法
          int gao = 13;       
          System.out.println(gao);
          int i;//    
          int j = i + 5; // 编译出错,变量i还未被初始化
      }
  }

在这里插入图片描述

常量

常量通常指的是一个固定的值,例如:1、2、3、’a’、’b’、true、false、”helloWorld”等。

在Java语言中,主要是利用关键字final来定义一个常量。 常量一旦被初始化后不能再更改其值。

常量名为大写字母和下划线组成。

常量的声明及使用

//声明格式为:
final  type  varName = value;
public class TestConstants {
   
    public static void main(String[] args) {
   
        final double PI = 3.14;
        // PI = 3.15; //编译错误,不能再被赋值! 
        double r = 4;
        double area = PI * r * r;
        double circle = 2 * PI * r;
        System.out.println("area = " + area);
        System.out.println("circle = " + circle);
    }
}

一般将1、2、3、’a’、’b’、true、false、”helloWorld”等称为字面常量

而使用final修饰的PI等称为符号常量

基本数据类型

Java是一种强类型语言,每个变量都必须声明其数据类型。

Java的数据类型可分为两大类:基本数据类型(primitive data type)和引用数据类型(reference data type)。

引用数据类型是用来引用对象,为4个字节(32位)

布尔型大小为1位,与c语言不同,不可以使用0或者非0的整数来代替true和flase.

String是引用数据类型中的类

整型变量/常量

整型数据类型

类型 占用存储空间 表数范围
byte 1字节 -27 ~ 27-1(-128~127)
short 2字节 -215 ~ 215-1(-32768~32767)
int 4字节 -231 ~ 231-1 (-2147483648~2147483647)约21亿
long 8字节 -263 ~ 263-1
//int型的数据可以直接给byte和short类型的变量赋值
byte a1 = 2, a2 = 4, a3;
short s =16;
//但是如下的语句会报错,因为byte型和short型在计算时会自动转换为int型,结果也是int型。
a3 = a1+a2;  要改为:a3 = (byte)(a1+a2);
s = a1+a2;	 要改为:s = (short)(a1+a2); 
s = s+a2;    要改为:s = (short)(s+a2); 
//但是使用类似 += ,-=的符号,byte型和short型在计算时就不会自动转换为int型
a1 += 1;
s += 1;

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值