Java 基础-JDK,JRE,JVM关系:
安装Java环境配置需要注意的细节:JDK + JRE
JRE(Java Runtime Environment Java运行环境):
包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
JDK(Java Development Kit Java开发工具包):
JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了。
其中的开发工具:编译工具(javac.exe) 打包工具(jar.exe)等。简单而言:使用JDK开发完成的java程序,交给JRE去运行。
Java 基础语法:
一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。
- 对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
- 类:类是一个模板,它描述一类对象的行为和状态。
- 方法:方法就是行为,一个类可以有很多方法。逻辑运算、数据修改以及所有动作都是在方法中完成的。
- 实例变量:每个对象都有独特的实例变量,对象的状态由这些实例变量的值决定。
关于Java语言中的标识符
1、什么是标识符?
-在java源程序当中凡是程序员有权利自已命名的单词都是标识符。
-标识符可以标识什么元素呢?
*类名
*方法名
*变量名
*接口名
*常量名
2、标识符的命名规则? [不按照这个规则来,编译器会报错,这是语法]
*只能由"数字、字母、下划线、美元符号$"组成, 不能含有其它符号
*不能数字开头
*严格区分大小写
*关键字不能做标识符
*理论上无长度限制,但是最好不要太长
========
合法和不合法标识符
合法 不合法
_test123 123test
HelloWorld!
HelloWorld@
class1 class
public1 public
Java 命名规范注意
一、Java文件的命名:
1.源代码文件名必须与公共类的名字相同。
2.一个Java文件中只能有一个public类;
3.如果文件中只有一个类,文件名必须与类名一致;
4.如果文件中不止一个类,文件名必须与public类名一致;
5.如果文件中不止一个类,而且没有public类,文件名可与任一类名一致。
二、包的命名: Java包的名字都是由小写单词组成,如com.mubole
三、类的命名:类名首字母大写,后面每个单词首字母大写(骆驼命名法)。不能使用Java保留字作为类名。
*最好见名知意
public class UserService{
public void login(string username,string password){
}}
四、方法的命名: 方法名首字母小写,后面每个单词首字母大写。
五、变量的命名: 首字母小写的,接下来的单词都以大写字母开头。(Camel 标记法)
六、常量的命名 : 常量的名字应该都使用大写字母,并且指出该常量完整含义。如果一个常量名称由多个单词组成,则应该用下划线来分割这些单词。
七、参数的命名: 参数的命名规范和方法的命名规范相同,而且为了避免阅读程序时造成迷惑,请在尽量保证参数名称为一个单词的情况下使参数的命名尽可能明确。
Java第一行代码学习:
通过一个简单的实例来展示 Java 编程,创建文件 Demo01.java(文件名需与类名一致), 代码如下:
public class Demo01{ //创建一个类,Demo01是一个类名
public static void main(String[ ] args) { //创建main(主入口)方法,表示定义一个公开的静态主方法
System.out.println("hello"); //执行具体要执行的操作
}
}
关键字的作用:
public:公共的,谁都能用
class:类关键字,如果有class关键字产生,那么该类型就是对象类型。
Demo01:类名
static:静态,普通方法使用一次,那么方法就会被回收,释放资源,使用静态方法,该方法随着类的产生而产生,可以重复使用,因为使用完成一次后,不会被回收释放。
void:没有返回值类型的关键字。如果方法有该关键字修饰,那么该方法不会返回数据与结果。
main:主函数(方法)入口,名称不能自定义。他就是方法名。
String[]:字符串类型的数组,args:该数组的名称(String[ ] args 是一个main方法的形式参数列表)
System:系统对象。
out:输出方法
println:输出一行方法。
需要注意:
1、类对象,只有大括号,没有小括号。
2、方法,既有大括号,也有小括号。
3、操作,方法里面执行的语句,只有小括号,没有大括号。
关于字面值:
*字面值:
-
10、100
-
3.14
-
“abc”
-
true、 false
★字面值就是数据。
★字面值是java源程序的组成部分之一。包括标识符和关键字它们都是java源程序的组成部分。
★数据在现实世界当中是分门别类的,所以数据在计算机编程语言当中也是有类型的:[数据类型]-10、100 属于整数型
-3.14属于浮点型字面值
-true,false属于布尔型字面值-“abe”、 "中国人”属于字符串型字面值
-‘A’、‘人’,属于字符型字面值
★注意:
java语言当中所有的字符串型字面值必须使用双引号括起来,双引号是半角
java语言当中所有的字符型字面值必须使用单引号括起来,单引号是半角
public class ConstTest01{
public static void main(String[] args){
System.out.println("abc");
System.out.println("最近你过得怎么样");
System.out.println(10);
System.out.println(true);
System.out.println('a');
// System.ou.println('abc');/编译报错,因为单引号中只能存放单个字符,属于字符型字面值
}
}
关于java语言当中的变量:
1、什么是变量?
*变量本质上来说是内存中的一块空间,这块空间"有数据类型”、“有名字”、"有字面值”。
*变量包含三部分:数据类型、名称、字面值[数据]
*变量是内存中存储数据的最基本的单元。
2、数据类型的作用?
*不同的数据有不同的类型,不同的数据类型底层会分配不同大小的空间。
*数据类型是指导程序在运行阶段应该分配多大的内存空间。
3、变量的要求:变量中存储的具体的“数据"必须和变量的“数据类型"一致,当不一致的时候编译报错。
4、声明/定义变量的语法格式:
数据类型变量名:
*数据类型: int
*变量名:
只要是合法的标识符就行。规范中要求:首字母小写,后面每个单词首字母大写。
例如:
int 1;
int age;
int length;
int size;
int num;
其中int是数据类型,i, age, length, size , num都是变量名。
5、变量声明之后怎么赋值?
语法格式:
变量名=字面值;
要求:字面值的数据类型必须和变量的数据类型一致。
= 等号是一个运算符,叫做赋值运算符,赋值运算符先运算等号右边的表达式,表达式
执行结束之后的结果赋值给左边的变量。
6、声明和赋值可以放到一起完成。
int i=10;
7、变量赋值之后,可以重新赋值,变量的值可变化:
int i=10;
System. out .print1n(1) ; //10
i=20;
System . out。print1n(1) ; //20
i = 100;
System. out .println(1) ; //100
8、有了变量的概念之后, 内存空间得到了重复的使用:
inti=10;
system.out. print1n(i) ;
…
System. out. print1n(i) ;
9、通常访问一个变量包括两种访问形式:
*第一种:读取变量中保存的具体数据 get/获取
*第二种:修改变量中保存的具体数据 set/设置
i = 20;//set
System.out.println(i);//get
10、变量 在一行上可以声明多个
int a,b,c;
11、java中的变量必须先声明,再赋值,才能访问。
int i; 程序执行到这里,内存空间并没有开辟出来,变量i并没有初始化。所以没有赋值之前是无法访问。
public class VarTest01
{
pub1ic static void main (String[] args) {
//声明一个int类型的变量,起名i
int i;
//Sys tem.out.println(i);编译报错:变量i并没有初始化
//给i变量赋值,i变量在这里完成初始化,内存开辟
i = 100;
System.out.println(i);
}
}
关于java语言当中的变量:
1、在方法体当中的java代码,是遵守自上而下的顺序依次执行的。逐行执行。
第一行;
第二行;
第三行;
特点:第二行的代码必须完整的结束之后,第三行程序才能执行。
2、在同一个“作用域"当中,变量名不能重名,但是变量可以重新赋值。
public class VarTest02
{
public static void main (String[] args) {
int i = 100; //开辟了一个内存空间 int i=100;
System. out. println(i) ; //100
i = 200; //重新给i赋值了,表示还是这块内存空间,只是内存空间的数据改了
System. out. println(i) ; //200
/* int i = 90; //不能这样,不能在同一个main方法中,声明两块**名字相同**的内存空间,是不允许的
System.out.println(i);*/
}}
关于变量的作用域
1、什么是作用域?
变量的作用域,其实秒速的就是变量的有效范围。
在什么范围内是可以被访问的,只要除了这个范围该变量就无法访问了。
2、变量的作用域只要记住一句话:
出了大括号就不认识了
public class VarTest03{
static int k = 90;
public static void main(String[] arges)
int i = 100;//变量i的作用域是main方法,在整个main方法中是有效的,可见的,可以访问的
System.out.println(i);// 可以
System.out.println(k);//可以
for(int a=0;a<10;a++){ //a变量的作用域是整个for循环,for循环结束之后。a变量的内存就释放了
}
Systmen.out.println(a);//这里无法访问a变量
}
public static void doSome(){
System.out.println(i);//这里无法访问main方法当中的变量i, 这里已经出了i变量的作用域。
System.out.println(k);//可以
}
关于变量的分类
根据变量声明的位置来分类:
*局部变量-在方法体当中声明的变量叫做局部变量
*成员变量-在方法体外【类体之内】声明的变量叫做成员变量
/成员变量没有手动赋值系统会默认赋值【局部变量不会】
在不同的作用域当中,变量名是可以相同的。 在同一个作用域中,变量名不能重名。
public class VarTest04{
int k = 200;//成员变量
public static void main(String[] arges){
int i = 3;//i变量就是局部变量
System.out.println(i);//java遵循“就近原则”
}
int i = 100;//成员变量/声明变量
//Sytem.out.println(i);不行,类体中不能直接编写Java语句【除声明变量之外】
关于Java中的数据类型:
1、数据类型的作用是什么?
程序当中有很多数据,每一个数据都是有相关类型的,不同数据类型的数据占用空间大小不同。
数据类型的作用是指导JVM在运行程序的时候给该数据分配多大的内存空间.
2、java中 的数据类型包括两种:
*基本数据类型
*引用数据类型
3、关于基本数据类型:
*基本数据类型包括四大类八小种:
第一类:整数型
byte, short, int,iong
第二类:浮点型
float ,double
第三类:布尔型
boolean
第四类:字符型
char
4、字符串"abc"不属于基本数据类型,属于"引用数据类型”,字符属于基本数据类型:
*字符串使用双引号"abc"
*字符使用单引号 ‘a’
5、八种基本数据类型各自占用空间大小是多少?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vEZXrmQS-1595207584614)(D:\Typora\image\image-20200718160435857.png)]
6、字节:
1 Byte = 8 bit【一个字节=8个比特位】一个比特位表示一个二进制位:1/0
1 KB = 1024 Byte
1 MB =1024 KB
1GB = 1024 MB
1 TB = 1024 GB
7、整数型当中的byte类型,占用1个字节,所以byte类型的数据占用8个比特位。那么byte类型
的取值范围是什么?
*关于java中的数字类型。数学都是有正负之分的,所以在数字的二进制当中有一个二进制
位被称为“符号位”。并且这个“符号位”在所有二进制位的最左边,0表示正数,1表示负数。
*byte类型最大值: 0111111
【
00000000 00000000 00000000 10000000 (二进制)
减去1结果是:
00000000 00000000 00000000 01111111 (二进制)
】
- byte类型最大值: 2的7次方- 1,结果是: 127
- byte类型最小值: -128 [具体的怎么用二进制表示,这个和原码、反码、补码有关]
- byte类型取值范围:【-128~127】
- byte类型可以表示256个不同的数字【256个不同的二进制】
8、关于八种基本数据类型的默认值
数据类型 默认值
byte , short,int,1ong 0
float , double 0.0
boolean false [在c语言中,true是1, false是0]
char \u0000
八种基本数据类型的默认值是–切向0看齐。
*/
public class DataTypeTest02
{
//这里的static必须加,
static int k = 1000;
//变量还是遵守这个语法:必须先声明,再赋值,才能访问。
//成员变量没有手动赋值系统会默认赋值[局部变量不会]
static int f; //成员变量
public static void main (String[] args) {
/*
int i; //局部变量
System.out.println(i);没有赋值,编译报错
*/
System.out.println(k);
System.out.println(f);//0
}
}
以下Java程序主要讲解的是数据类型之:char类型
public class DataTypeTest01
{
public static void main(String[] args){
//定义一个char类型的变量,起名c,同时赋值字符'a'
char C = 'a';
System. out .print1n(c) ;
//一个中文占用2个字节,char类型 正好是2个字节
//所以java中的char类型变量可以存储-一个中文字符
char x ='国';
System. out . println(x) ;
//编译错误
//ab是字符串不能使用单引号括起来
//char y = 'ab';
//"a"是字符串类型
//k变量是char类型
//类型不兼容,编译错误
//char k = "a";
//声明
char e;
//赋值
e = 'e';
System.out.println(e);
//再次赋值
e='f'
System.out.println(e);
}}
关于Java语言当中的char类型:
转义字符 \
转义字符出现在特殊字符之前,会将特俗字符转换成普通字符。
\n 换行符
\t 制表符
\ ’ 普通的单引号
\ \ 普通的反斜杠
\ " 普通的双引号
关于java语言当中的整数型:
数据类型 占用空间大小 默认值 取值范围
byte 1 0 [-128~127]
short 2 0 [-32768 ~ 32767]
int 4 0 [-2147483648心2147483647]
long 8 0 L
1、java语言当中的"整数型字面值"被默认当做int类型来处理。要让这个"整数型字面值"被当做long类型来处理的话,需要在"整数型字面值"后面添加l/L,建议使用大写的L
2、java语言当中的整数型字面值有三三种表示方式:
第一种方式:十进制[是一种缺省默认的方式]
第二种方式:八进制[在编写八进制整数型字面值的时候需要以0开始]
第三种方式:十六进制[在编写十六进制整数型字面值的时候需要以0x开始]
public class DataTypeTest04
{
public static void main (String [] args) {
inta=10;
int b = 010;//整数型字面值以0开头的,后面那一串数字就是八进制形式
int C = 0x10;//整数型字面值以0x开头的,后面那一串数字就是十六进制形式
System.out.println(a);//10
System.out.println(b);//8
System.out.println(c);//16
System.out.println(a+b+c);//34
//123这个整数型字面值是int类型
//i变量声明的时候也是int类型
//int类型的123赋值给int类型的变量i,不存在类型转换
int i = 123;
System.out.print1n (i) ;
//456整数型字面值被当做int类型,占用4个字节
//x变量在声明的时候是1ong类型,占用8个字节
//int类型的字面值456赋值给long类型的变量x,存在类型转换
//int类型转换成1ong类型
//int类型是小容量
//long类型是大容量
//小容量可以自动转换成大容量,称为自动类型转换机制。
1ong x = 456;
System.out.println(x);
//2147483647字面值是int类型,占用4个字节
//y是long类型,占用8个字节,自动类型转换
long y = 2147483647;
System.out.println(y);
//编译错误:过大的整数: 2147483648
//2147483648被当做int类型4个字节处理,但是这个字面值超出int类型范围
//1ong z = 2147483648:
//解决错误
//2147483648字面值一上来就当做long类型来处理,在字面值后面添加L
//2147483648L是8个字节的1ong类型
//z是1ong类型变量,以下程序不存在类型转换
1ong z =2147483648L;
System.out.print1n(z) ;
}
}
*当一个整数型字面值没有超出byte类型取值范围的话,该字面值可以直接赋值给byte类型的变量。
关于浮点型数据类型:
float 单精度【4个字节】
double 双精度【8个字节】
在Java语言当中,所有的浮点型字面值【3.0】,默认被当作double类型来处理,要想该字面值当作float类型来处理,需要在字面值后面添加f/F
注意:
double和float在计算机内部二进制存储的时候存储的都是近似值。
关于布尔型数据类型:boolean类型只有两个值:true、false。
布尔类型在实际开发中,经常在逻辑运算和条件控制语句当中。
java 的8个基本类型对应的包装类分别是什么?基本数据类型和包装类的区别?
我们知道在Java中,new一个对象会存储在堆里,通过栈中的引用来使用这些对象;但是对于经常用到的一系列类型如int,如果我们用new将其存储在堆里就不是很高效,特别是简单的小的变量。所以就出现了基本类型,对于这些类型不是用new关键字来创建,而是直接将变量的值存储在栈中,因此更加高效。
既然基本类型会将值直接存储到栈中实现高效率,为什么还要有包装类型呢?
我们知道Java是一个面向对象的编程语言,基本类型并不具有对象的性质,为了让基本类型也具有对象的特征,就出现了包装类型(如我们在使用集合类型Collection时就一定要使用包装类型而非基本类型),它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,
丰富了基本类型的操作。
另外,当需要往ArrayList,HashMap中放东西时,像int,double这种基本类型是放不进去的,因为容器都是装Object,这时就需要这些基本类型的包装器类了。
到此我们知道了Java中为什么会同时存在基本类型和包装类型了,那两者有什么区别呢?
1、声明方式不同:
基本类型不使用new关键字,而包装类型需要使用new关键字来在堆中分配存储空间;
2、存储方式及位置不同:
基本类型是直接将变量值存储在栈中,而包装类型是将对象放在堆中,然后通过引用来使用;
3、初始值不同:
基本类型的初始值如int为0,boolean为false,而包装类型的初始值为null;
4、使用方式不同:
基本类型直接赋值直接使用就好,而包装类型在集合如Collection、Map时会使用到。
关于基本数据类型之间的互相转换:转换规则
1、八种基本数据类型当中除布尔类型之外剩下的7种类型之间都可以互相转换
2.小容量向大容量转换,称为自动类型转换,容量从小到大排序:
byte < short < int < 1ong < float < double
char<
注:
任何浮点类型不管占用多少个字节,都比整数型容量大。
char和short可表示的种类数量相同,但是char可以取更大的正整数
3、大容量转换成小容量,叫做强制类型转换,需要加强制类型转换符,程序
才能编译通过,但是在运行阶段可能会损失精度,所以谨慎使用。
4、当整数字面值没有超出byte,short,char的取值范围,可以直接赋值给byte,short,char类型的变量。
5、byte, short, char混合运算的时候,各自先转换成int类型再做运算。
6、多种数据类型混合运算,先转换成容量最大的那种类型再做运算。
运算符
关于Java中的赋值类运算符:
赋值类运算符包括:*基本的赋值运算符 =
*扩展的赋值运算符 += -= *= /= %=
注意以下代码:
byte i = 10;
i += 5;等同于:i=(byte)(i+5);
int b = 5;
b +=5; 等同于:b=(int)(b+5);
long x =10L;
int y = 20;
y +=x; 等同于:y=int(y+x);
结论:扩展类的赋值运算符不改变运算结果类型,假设最初这个变量类型是 int类型,无论怎么进行追加或追减,最终该变量的数据类型还是int类型。
关于java中的“+"运算符:
1、+运算符在java语言当中有两个作用:
*加法运算,求和
*字符串的连接运算
2、当“+"运算符两边的数据都是数字的话,一定 是进行加法运算。
3、当+"运算符两边的数据只要有一一个数据是字符串,–定会进行字符串连接运算。并且,连接运算之后的结果还是一个字符串类型。
数字+数字—>数字[求和]
数字+ “字符串” --> “字符串” [字符串连接]
4、在一个表达式当中可以出现多个"+”,在没有添加小括号的前提之下,遵循自左向右的顺序依次运算
public class OperatorTest
{
public static void main(String[] args){
System.out.println(10+20);//30
System.out.println(10+20+"30");//3030,自左向右的顺序依次运算,第一个是求和,第二加号字符串连接
//要求在控制台上输出"10+20=30"
int a=10;
int b=20;
int c=a+b;
System.out.println(a+"+"+b+"="+c);//输出为:"10+20=30",动态
}
}