Java学习笔记一

1.技术基础

1.1编程语言

机器语言: 0 1 在硬件直接执行
汇编语言:助记符
高级语言: (Java运行比 C/C++慢)
1)面向过程的高级语言:程序设计的基本单位为函数,如: C/C++语言。
2)面向对象的高级语言:程序设计的基本单位为类,如: Java、C#。
在这里插入图片描述

1.2Java 的特点

平台无关性、简单性、面向对象、健壮性、多线程、自动内存管理。
平台无关性:指 Java语言平台无关,而 Java的虚拟机却不是,需要下载对应平台 JVM虚拟机的。
自动内存管理: 对临时存储的数据自动进行回收, 释放内存。 如:引用类型的变量没有指向时,被回收;程序执行完后,局部变量被回收。

**注意:**面试题谈谈java跟你所知道的其它的语言相比,有什么优点
Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言。Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
Java是功能完善的通用程序设计语言,可以用来开发可靠的、要求严格的应用程序。
java是纯面向对象开发,功能强大,分支众多,没有java不能做的软件。C/S也好B/S也好。从功能上讲,没有语言可以和java相比。

C是面向过程编程的,这样往往会导致所谓的单一程序,既所有的功能只能包含在几个(通常是一个)代码模块中。当然,C语言也有自身的不足,比如:C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数族下标越界不作检查等。从应用的角度,C语言比其他高级语言较难掌握。

1.3Java 开发环境

Java Developement Kit——Java开发工具包,简称 JDK,是由 Sun 公司提供的一个免费的 Java开发工具,编程人员和最终用户可以利用这个工具来编译、运行 Java程序。目前版本有 JDK1.0、JDK1.1、JDK1.2、JDK1.3、JDK1.4、JDK1.5(J2SE5.0)、JDK1.6( J2SE6.0)、JDK1.7(J2SE7.0)。
JDK结构: JDK
|-- 开发工具( Tools)命令: java、javac、jar、 rmic …
|–JRE(Java基本运行环境)
|-- 系统 API 库,系统类库
| 系统带来的标准程序库,标准 API
|–JVM java 虚拟机
java 语言的执行环境
注意:JDK、JRE、JVM三者
JDK(Java SE Development Kit),Java标准开发包,它提供了编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行时环境,以及常用的Java类库等。
JDK的安装目录如下:
在这里插入图片描述
JRE( Java Runtime Environment) 、Java运行环境,用于解释执行Java的字节码文件。普通用户而只需要安装 JRE(Java Runtime Environment)来运行 Java 程序。而程序开发者必须安装JDK来编译、调试程序。
JRE的安装目录:里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。
在这里插入图片描述
 JVM(Java Virtual Mechinal),Java虚拟机,是JRE的一部分。它是整个java实现跨平台的最核心的部分,负责解释执行字节码文件,是可运行java字节码文件的虚拟计算机。所有平台的上的JVM向编译器提供相同的接口,而编译器只需要面向虚拟机,生成虚拟机能识别的代码,然后由虚拟机来解释执行。
 当使用Java编译器编译Java程序时,生成的是与平台无关的字节码,这些字节码只面向JVM。不同平台的JVM都是不同的,但它们都提供了相同的接口。JVM是Java程序跨平台的关键部分,只要为不同平台实现了相应的虚拟机,编译后的Java字节码就可以在该平台上运行。
 
JDK: Java development kitjava:开发工具包;用于开发,JRE 用于运行java程序 ;如果只是运行Java程序,可以只安装JRE,无序安装JDK;包含JRE,JDK 和 JRE 中都包含 JVM
JRE: Java runtime environment:java运行环境
JVM: Java virtual machine:java虚拟机;是 java 编程语言的核心并且具有平台独立性。
在这里插入图片描述

1.4Java 开发环境配置

安装完 JDK之后,不能立刻使用,需要设置环境变量:
JAVA_HOME
例如:我把jdk安装在了D:\Java\jdk7。配置如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
PATH
系统会在path配置的值中,寻找可执行文件。
需要把jdk\bin添加到path中。
在这里插入图片描述
注意事项:
Windows 根目录是反斜线:
Linux 根目录是斜线: /

1.5windows常用的DOS命令

win+R – cmd
cmd 进入DOS窗口 #快捷方式,浏览目录,直接输入CMD跳转
默认是在c盘下,可以切换盘符。
e: 进入e盘
dir 列出当前目录下的目录和文件
mkdir 新建文件夹
rmdir 删除文件夹
cd java 进入java目录
cd … 退到上层目录
cd / 退到根目录
exit : 退出dos命令行
cls : (clear screen)清屏

1.6Linux 命令与相关知识

1)Linux 无盘符,只有一个根目录( root )
2)终端 == 控制台 == 命令行窗口
3)pwd:打印当前工作目录,显示当前工作目录的位置
4)ls:列表显示目录内容,默认显示当前目录内容
5)cd:改变当前工作目录; cd 后不加参数 =返回 home 文件夹; cd ~:返回 home;
cd /:切换到根目录; cd … :返回上一层目录(相对的) ;
6)mkdir :创建文件夹(目录)注意:目录 == 文件夹
7)rm :删除文件; rm xx xx:可删多个文件;
rm –rf xx:-为减号, r 表递归, f 表强制
8)cat xx:显示文本文件内容
9)启动 Java开发工具: cd/opt/eclipse ./eclipse . 表当前目录下
10)绝对路径: /home (以 / 开始为绝对路径,相对于根目录)
相对路径: home (相对于当前工作目录)
11)home(用户主目录,用户的家) :/home/username 如: /home/soft01
12)主目录( home):有最大访问权限:什么都能干,增删改查、建目录等
其他地方:一般只能查看,不能增删改查、创建目录等

1.7 Eclipse/Myeclipse 程序结构

Project 项目文件
|-- src 源文件
| |-- Package 包
| |-- .java 源文件
|–bin
|-- Package 包
|-- .class 字节码程序
注意事项:
Myeclipse5.5 消耗少, Myeclipse6.5 最稳定

2.Eclipse

2.1 下载与安装

1、 官网下载并安装
2、 下载完整的打包文件(java ee企业版),直接解压就可以用

2.2工作空间workspace

用来保存所有的开发文件和代码等,也可以切换工作空间

2.3HelloWorld案例

2.3.1创建demo1工程

在这里插入图片描述
![(https://img-blog.csdnimg.cn/20210113203546376.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MDI2ODUwMQ==,size_16,color_FFFFFF,t_70)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3.2创建包

包名全部小写
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3.3创建HelloWorld类

类名要符合驼峰命名法。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3.4 创建方法

public static void main(String [] args){
	System.out.println("Hello World");
}

在这里插入图片描述

2.3.5运行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3.6说明

//单行注释
/* 多行注释 */   
/* 
 * 用来定义一个包 
 * package 加粗变红的效果,叫做关键字。专门用来定义包 
 * cn.scdn.hello  包名  --  全小写 + 公司的域名倒着写 
 * ;   是Java语句的结束符,相当于。
 */
package cn.tedu.hello;

/*
 * 用来定义一个类 
 * public  是关键字,专门用来修饰类的访问权限。公共的
 * class   是关键字,专门用来定义一个类
 * HelloWorld 类名 -- 驼峰命名法
 * {   java代码   }
 */
public class HelloWorld {
    /*
     *  定义一个主函数/主方法/main方法
     * public  是关键字,专门用来修饰main方法的访问权限。公共的
     * static  是关键字,修饰main方法是静态方法
     * void    空/无,main方法返回值是空
     * main    方法名
     * ()  是方法的标志
     * String[] args 方法的参数
     * {  Java代码/方法体   }
     */
    public static void main(String[] args) {
       /*
        *  用来向控制台输出指定的数据
        * System  要发出系统指令
        * out     发出一个输出的动作
        * println 打印后换行
        * ()  是方法的标志
        * "hello java"  方法的参数 -- 要输出的数据
        * ;  Java语句的结束符
        */
       System.out.println("hello java");
    }
}

2.3.7 运行与工作原理

在这里插入图片描述
1、 编译:通过javac命令将java的源文件也就是.java文件编译成.class文件。
2、 执行:
先启动java虚拟机,不同的操作系统有不同的jvm,因此java跨平台。
再通过JVM加载HelloWorld.class字节码文件。并加载main方法执行程序。

3.Java 语言基础

3.1基础语言要素

1)标识符:包括类名、方法、字段、变量、包名起的名字
A.必须以字母或下划线或 $ 符号开始,其余字符可以是字母、数字、 $ 符号和下划线。
B.只能包含两个特殊字符,即下划线 _ 和美元符号 $ 。不允许有任何其他特殊字符。
C.标识符不能包含空格。
D.区分大小写。
2)关键字:一共有53个关键字。其中有两个保留字:const和goto。关键字不能被用作标识符!!
只有系统才能用的标识符
注意事项:
true、false、null 不是关键字!是字面量。
main 不是关键字!但是是一个特殊单词,可以被 JVM 识别,主函数是固定格式,作为程序的入口。
3)注释:单行注释: // 多行注释: /* , / 文档注释: /* , */
注意事项:开发中类前、属性前、方法前,必须有文档注视。

3.2八种基本数据类型

1)四种整数类型 (byte 、short 、int 、long):
byte:8 位,用于表示最小数据单位,如文件中数据, -128~127
short:16 位,很少用, -32768 ~ 32767
int:32 位、最常用, -231-1~231 ( 21 亿)
long:64 位、次常用
注意事项:
int i=5; // 5 叫直接量(或字面量) ,即直接写出的常数。
整数字面量默认都为 int 类型,所以在定义的 long 型数据后面加 L 或 l。
小于 32 位数的变量,都按 int 结果计算。
强转符比数学运算符优先级高。见常量与变量中的例子。
2)两种浮点数类型 (float 、double) :
float :32 位,后缀 F或 f,1 位符号位, 8 位指数, 23 位有效尾数。
double:64 位,最常用,后缀 D 或 d,1 位符号位, 11 位指数, 52 位有效尾数。
注意事项:
二 进 制 浮 点 数 : 1010100010=101010001.02=10101000.102^10(2 次
方)=1010100.0102^11(3 次方 )= . 10101000102^1010(10 次方 )
尾数: . 1010100010 指数: 1010 基数: 2
浮点数字面量默认都为 double 类型,所以在定义的 float 型数据后面加 F
或 f;double 类型可不写后缀,但在小数计算中一定要写 D 或 X.X。
float 的精度没有 long 高,有效位数(尾数)短。
float 的范围大于 long 指数可以很大。
浮点数是不精确的,不能对浮点数进行精确比较。
3)一种字符类型 (char):
char:16 位,是整数类型,用 单引号 括起来的 1 个字符(可以是一个中文字符,使用 Unicode 码代表字符, 0~2^16-1 (65535)。
注意事项:
不能为 0 个字符。
转义字符: \n 换行 \r 回车 \t Tab 字符 " 双引号 表示一个
两字符 char 中间用“ +”连接,内部先把字符转成 int 类型,再进行加法运算, char 本质就是个数!二进制的,显示的时候,经过“处理”显示为字符。
4)一种布尔类型 (boolean) :true 真和 false 假。
在这里插入图片描述

3.3基本类型的字面值

3.3.1整数字面值是int类型

int a = 999999999;//错,右侧是int类型,但是超出范围

3.3.2 byte,short,char三种比int小的整数可以用范围内的值直接赋值

byte b=127;//对
byte b=128;//错,右面已经超过byte范围是int类型的数据

3.3.3浮点数的字面值是double类型

double a=3.14;//对
float a=3.14;//错,右面是double,float是四字节double是八字节存不下

3.3.4字面值后缀l f d

L –long 如:long a = 99999999999;//错,超出范围,解决方案加L
F –float 如:float a = 3.14;//错,右面是double类型,解决方案加F
D –double 如:double a=3;//错,右面是int,解决方案加D或者改成3.0

3.3.5进制前缀

0x - 16进制
0 -8进制
\u -char类型,16进制

3.4基本类型的类型转换

3.4.1 小到大(隐式转换)

Byte a =120;
Int b=a;//直接转

在这里插入图片描述
在这里插入图片描述

3.4.2大到小(显式转换)

需要强制类型转换

int xx = 356;

byte y=(byte) xx;

在这里插入图片描述

注意:小数转成整数,小数直接舍弃

3.5运算规则

3.5.1计算结果的数据类型,与最大类型一致

3/2 得1 ,而不是1.5,结果是int类型
3d/2 得1.5,相当于double/int,结果是double类型

public class Test3{
	public static void main(String[] args) {
		//计算结果的数据类型,与最大类型一致
		System.out.println(5/2);    //2     int/int
		System.out.println(5.0/2.0);  //2.5
		System.out.println(5/2.0);  //2.5     int/double
		System.out.println(5.0/2);  //2.5     double/int
		System.out.println(5/2d);  //2.5
	}
}		

3.5.2 byte,short,char三种比int小的整数,运算时会先自动转换成int

byte a=3;
byte b=4;
byte c=a+b;//错,运行时,byte会先自动转成int再运算,int+int还是int

public class Test3{
	public static void main(String[] args) {
		//byte,short,char三种比int小的整数,运算时会先自动转换成int
		byte a = 1;
		byte b = 2;
		byte c = (byte) (a+b);
		System.out.println(c);
		short d = 2;
		short f = 3;
		short g = (short)(d+f);
		System.out.println(g);
	}
}

3.5.3整数运算溢出

整数运算,类似于一个中标,转到最大时,再转会回到最小。

计算:光速运行一年的长度是多少米
System.out.println(300000000606024365);
System.out.println(300000000l606024365);

public class Test3{
	public static void main(String[] args) {
		//整数运算溢出--超级大的整数整数运算   超出int的最大值    超出在重新运算
			//1.计算:光速运行一年的长度是多少米
			System.out.println(300000000*60*60*24*365);  //现在的结果类型是int类型    但是已经超出了int范围,需要变成long型。
			System.out.println(300000000l*60*60*24*365); 	
	}
}

3.5.4浮点数运算不精确

System.out.println(1-0.8);
System.out.println(4.35*100);

public class Test3{
	public static void main(String[] args) {
		System.out.println(1-0.9);   //0.09999999999999998	
	}
}

3.5.5浮点数的特殊值

Infinity 无穷大 3.14/0
Nan not a number 0/0.0

public class Test3{
	public static void main(String[] args) {
		//Infinity 无穷大      3.14/0
		//Nan  not a number  0/0.0
		System.out.println(3.14/0);
		System.out.println(0/0.0);	
	}
}

3.6常量和变量

变量: 内存中一块存储空间,可保存当前数据。在程序运行过程中,其值是可以改变的量。
1)必须声明并且初始化以后使用(在同一个作用域中不能重复声明变量) !
2)变量必须有明确类型( Java是强类型语言) 。
3)变量有作用域(变量在声明的地方开始,到块{}结束) 。变量作用域越小越好。
4)局部变量在使用前一定要初始化!成员变量在对象被创建后有默认值,可直接用。
5)在方法中定义的局部变量在该方法被加载时创建。
为什么要定义变量:
用来不断的存放同一类型的常量,并可以重复使用;
使用变量注意:
变量的作用范围, 初始化值
定义变量的格式:数据类型 变量名 = 初始化值;
注:格式是固定的,记住格式,以不变应万变。
作用范围:定义开始到定义它的代码块结束;
同一范围内,不允许多个个局部变量命名冲突

**常量:**在程序运行过程中,其值不可以改变的量。
注意事项:字面量、常量和变量的运算机制不同,字面量、常量由编译器计算,变量由运算器处理,目的是为了提高效率。
eg:小于 32 位数的字面量处理
在这里插入图片描述
不管是常量还是变量,必须先定义,才能够使用。即先在内存中开辟存储空间,才能够往里面放入数据。
不管是常量还是变量,其存储空间是有数据类型的差别的,即有些变量的存储空间用于存储整数,有些变量的存储空间用于存储小数。

3.7成员变量和局部变量

局部变量:不是声明在类体括号里面的变量;
局部变量使用前必须初始化值;
局部变量没有默认初始化值;
局部变量的作用域是从定义开始到定义它的代码块结束;

成员变量:在方法体外,类体内声明的变量,又称字段(Field)或全局变量;(其实Java中没有全局变量,由于Java是面向对象语言,所有变量都是类成员)
成员变量的作用域是整个类中;

注意成员变量和局部变量的区别

public class Demo2 {
 public static void main(String[] args) {
     int i;
       System.out.println(i);
   }
}

局部变量调用前没有初始化,所以编译的时候就会报错!

public class Demo2 {
  static int i;
    public static void main(String[] args) {
     System.out.println(i);
   }
}

此时i为全局变量,未初始化会被赋予默认的初始化值!程序正确
**总结:**局部变量是定义在方法中的变量,出了该方法就不能访问该变量了…
成员变量是在类中定义,并且在类的成员方法中都能访问的变量…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值