java初学(在cmd中执行java程序)

第一章:J2SE概述

一、Java的基本功能特点<开源、免费、跨平台、纯面向对象>

1.大部分软件都是用java语言开发。
2.java高度健壮且非常安全。(健壮:Java语言运行过程中产生的垃圾是自动回收的
3.只编写一次代码,并在几乎每个计算机平台上运行它。
4.它是纯面向对象的应用程序开发而设计的,更符合人的思维特性。
5.java没有继承指针、运算符重载等功能,特别的java语言底层是c++实现的而不是C语言。(简单性)
6.Java是具有自动内存管理功能的多线程语言。
7.java程序只需编译一次可以在windows操作系统上运行,不做任何修改就可以在其他操作系统上运行。(可移植性、跨平台

  • 因为不同操作系统内核不同,操作系统执行指令方式也不一样,所以Java程序不能直接和操作系统挂钩,他们让Java程序运行在Java虚拟机(JVM)当中,Java虚拟机再和底层的操作系统挂钩。

二、复习常用DOS命令

1.cls:清屏
2.exit:推出当前DOS命令窗口
3.dir:列出当前目录下所有的子文件/子目录
4.cd(change directory):目录的路径(相对路径和绝对路径)
5.cd…:回到上级目录
6.cd\:直接回到根目录
7.c:回车 d:回车:切换盘符

三、关于windows操作系统的文件扩展名的设置

编写java程序,要新建以.java为结尾的文件,保证其扩展名。(打开计算机–>组织–>文件夹和搜索选项–>查看–>隐藏已知文件类型的扩展名)

四、Java的加载与执行原理

在这里插入图片描述

1.编译阶段

  • 新建扩展名为.java的文件符合Java语法规则则生成正常的字节码文件。(xxx.class,不是纯粹的二进制,无法再操作作系统中直接运行
  • 使用JDK自带的javac.exe命令进行编译.java文件。(javac是一个java的编译工具/命令)
    javac在DOS窗口使用
    javac使用规则:javac java源文件的路径
    注意:直接代开DOS命令窗口输入javac 源文件路径然后回车,出现以下:‘javac’不是内部或者外部命令,也不是可运行的程序或批处理文件,出现以上问题是因为:windows操作系统无法找到javac命令文件
  • 解决方法
    windows操作系统如何搜索硬盘上某个命令的
    1.首先会从当前目录下搜索
    2.当前目录搜索不到的话,会从环境变量path指定的路径当中搜索某个命令
    3.如果都搜索不到则报以上错误
    方法:配置环境变量path
    path环境变量和java语言没有关系,path环境变量是属于windows操作系统的知识点,path环境变量是专门给windows操作系统指路的。
    javac若想随意使用,需将javac所在目录配置到环境变量path当中:
    path=xxxx;c:\Program Files\java\jdk8\bin
    在这里插入图片描述
  • java源文件可以编译生成多个.class文件(最终要执行的文件),.class文件生成之后删除java源文件并不会影响java程序的执行, .class文件是运行在java虚拟机上的所以.class文件也可以直接在不同操作系统上运行
    在这里插入图片描述

2.运行阶段(可在其他操作系统跨平台)

  • java.exe命令主要负责运行阶段
    java.exe在DOS窗口使用
    使用规则:java 类名例如:硬盘有一个A.class,那么用法就为:java A
  • 运行过程:
    1.打开DOS命令窗口
    2.输入:java A(首先需要讲DOS窗口中的目录切换到A.class文件所在目录
    3.java.exe命令会启动java虚拟机(JVM),JVM会启动类加载器ClassLoader。
    4.ClassLoader会去硬盘上搜索A.class文件,找到该文件并将字节码文件装载到JVM中。
    同样注意和在DOS窗口中输入javac一样,class loader会在当前路径下加载字节码文件,这是需要配置环境变量classpath,classpath环境变量属于java语言中的环境变量,不属于windows操作系统【path环境变量属于操作系统】
    新建一个属于Java的环境变量classpath
    在这里插入图片描述
    此时就可以
    在这里插入图片描述
    所以如果想要随意使用,可以在java环境变量classpath里面增加路径
    5.JVM讲A.class字节码文件解释成二进制数据。
    6.操作系统执行二进制和底层硬件平台进行交互。

五、注释<出现在java的源程序中,对java源代码的解释说明>

1.注释不会被编译到.class字节码文件当中。
2.可读性会增强。
3.用法

  • 单行注释(//)
  • 多行注释(/* …*/)
  • javadoc注释(/** … */)注意:此注释会被javadoc.exe提取出来形成文件,及文件相当于使用java程序的说明书。

六、 解释java文件

1.Helloword文件

//public表示公开的
//class表示定义一个类
//HelloWorld表示一个类名
public class HelloWorld{表示定义一个公开的类,起名HelloWorld,==类体中不允许直接编写java语句【除声明变量之外】
	public static void main(String[] args){//表示定义一个公开的静态的主方法,程序执行的入口,固定编写方式,args可以随意写不是固定
	/* 
		public表示公开的
		static表示静态的
		void表示空
		main表示方法名是main
	*/
		//方法体;(java语句以";"终止,分号为半角分号)
		//方法体;
		//方法体;
		//方法体;
		System.out.println("Hello World!");//向控制台输出一段消息,字符串用半角双引号""
	}
}

2.public class和class的区别:

  • 一个java源文件当中可以定义多个class
  • 一个java源文件当中public的class不是必须的(及可以不写public class,写class)
  • 一个class会定义生成生成一个xxx.class字节码文件
  • 一个java源文件当中定义公开的类的话,public的class只能有一个,并且该类名称必须和java源文件名称一致
  • 每一个class当中都可以编写main方法,都可以设定程序的入口,想执行哪一个x.class的main方法,就输入java x
  • 注意:当在命令窗口中执行java Hello,那么要求Hello.class当中必须有主方法,若没有主方法会出现运行错误,及找不到在类Hello中找不到主方法。

第二章: java语言基础

一、标识符

1.什么是标识符?

  • 在java源程序当中凡是程序员有权利自己命名的单词都是标识符
  • 标识符在EditPlus编辑器中以黑色字体高亮显示

2.标识符可以表示什么元素?

  • 类名
  • 方法名
  • 变量名
  • 接口名
  • 常量名

3.标识符的命名规则【不按照规则编译器会报错】

  • 一个合法的标识符只能由数字、字母、下划线、美元符号组成,不能含有其他符号 。合法:_123test 不合法:123test、public、hello world、class
  • 不能以数字开头
  • 严格区分大小写
  • 关键字不能做标识符
    关键字:public,void,if,for,while,do,default,byte,short,int,long,float,double,boolean,char,private,protected,swich,true,false,throw,throws,try,catch…详细关键字链接
  • 理论上无长度限制

4.标识符的命名规范【只是一种规范,不属于语法,不遵守规范编译器不会报错】

  • 见名知意,最好不要老是用abcABC
  • 遵守驼峰命名方式,SystemService、UserService
  • 类名、接口名:首字母大写,后面每个单词首字母大写
  • 变量名、方法名:首字母小写,后面每个单词首字母大写
  • 常量名:全都大写

二、关键字

==详细关键字链接

三、字面值

1.什么是字面值?(在C语言中称为常量

  • 10、100
  • 3.14
  • “abc”
  • ‘a’
  • true、false
  • 字面值就是数据
  • 字面值是java源程序的组成部分你之一,保罗标识符和关键字都是Java源程序的组成部分
  • 数据在显示世界当中是分门别类的,所以数据在计算机编程语言当中也是有类别的:【数据类型】

2.数据类型

  • 10、100 属于整数型字面值
  • 3.14 属于浮点型字面值
  • true,false 属于布尔型字面值
  • “abc”、“中国” 属于字符串型字面值
  • ‘a’,‘人’ 属于字符型字面值
  • 注意:
    1.java语言当中所有字符串类型字面值必须使用半角双引号括起来
    2.java语言当中所有字符型字面值必须使用半角单引号括起来

四、变量

1.什么是变量?

  • 变量本质上说是内存中的一块空间,这块空间有数据类型、名字、字面值。
  • 变量包括三部分:数据类型、名称、字面值【数据】
  • 变量是内存中存储数据的最基本的单元

2.数据类型的作用

  • 不同的数据有不同的类型,不同的数据类型底层会分配不同大小的空间
  • 数据类型是知道程序在运行阶段应该分配多大的内存空间。
  • 所以变量中存储的具体的数据必须和变量的数据类型一直(C语言、python都是如此)

3.声明/定义变量的语法格式

数据类型 变量名;
例如:
int age;
int length;

4.变量声明后的赋值

  • 变量名 = 字面值; (和C语言一样“=“是赋值运算)
  • 声明和赋值可以在一起完成
  • 可重新赋值

5.通常访问一个变量的访问方式

  • 第一种:读取变量中保存的具体数据 get/获取
  • 第二种:修改变量中保存的具体数据 set/设置

6.作用域

  • 变量的作用域描述的是变量的有效范围,只能在有效范围内访问。
  • 在同一个作用域中变量不可重名,在不同的作用域中可以重名,如打印在不同作用域中的重名变量,该打印结果遵循就近原则
public class Hi
{
	//成员变量
    static int i=100;
    public static void main(String[] args)
    {
        int k=10;
        //在for循环内定义的变量,只能在for循环内使用,循环结束该变量所占用的空间释放
        for(int a=0;a<20;a++)
        {
        	...;
        }
        //在for循环外定义的变量,'b'是方法作用域中的变量
        int b;
        for(b=0;b<20;b++)
        {
        	...;
        }
        //局部变量
        System.out.println(k);
        //无法访问,'a'是for循环作用域内的变量
        System.out.println(a);
        //可以访问,'b'是方法作用域内的变量
        System.out.println(b);
    }
    public static void doSome(String[] args)
    {
    	//报错,在此方法中'k'没有被定义
        System.out.println(k);
        //全局变量,可以在多个方法中被使用
        System.out.println(i);
    }
}

7.变量的分类

  • 根据变量的位置分类
    1.在方法体当中声明的变量叫做局部变量
    2.在方法体外(类体之内)声明的变量叫做成员变量
public class Hi
{
	//成员变量
    static int i=100;
    public static void main(String[] args)
    {
    	//局部变量
        int k=10;
        System.out.println(k);
    }
    public static void doSome(String[] args)
    {
        ...;
    }
}

五.1、数据类型

1.数据类型的作用

  • 程序当中有很多数据,每一个数据都有相关类型,不同的数据类型的数据占用空间大小不同。
  • 数据类型的作用是知道JVM在运行程序的时候给该数据分配多大的内存空间。

2.java数据类型的分类

  • 基本数据类型
  • 引用数据类型

3.基本数据类型

  • 基本数据类型包括四大类八小种:
    第一类:整数型 byte,short,long
    第二类:浮点型 double,float
    第三类:布尔型 boolean
    第四类:字符型 char

4.引用数据类型

  • 第一类:字符串

5.八种数据类型占用空间大小(单位:字节)

  • byte 1
  • short 2
  • int 4
  • long 8
  • float 4
  • double 8
  • boolean 1
  • char 2

6.二进制

  • 计算机在任何情况下都只能识别二进制。10110010…
    现代的计算机底层采用交流电的方式,接通断开两种状态,计算机只识别’1’,‘0’
  • 什么是二进制
    数据的表示形式 :
    0 1 10 11 100 101 110 111 1000 1001…
    0 1 2 3 4 5 6 7 8 9…

7.字节(byte)

  • 1 byte = 8 bit 【1个字节 = 8个比特位】1个比特位表示一个二进制位:1/0
  • 1 KB = 1024 Byte
  • 1 MB = 1024 KB
  • 1 GB = 1024 MB
  • 1 TB = 1024 GB

8.JAVA数字类型

  • 数字有正负之分,数字的二进制当中有一个二进制位被称为“符号位”,并且这个“符号位”在所有二进制的最左边,'0’表示正数,'1’表示负数。
  • byte类型最大值:01111111 127
  • byte类型最小值:-128
  • byte类型可以表示256个不同的数字【256个不同的二进制】

9.ASCII码

  • 一本人为制定的计算机字典,每一个字符对应一个二进制码
  • 随着计算机的发展,出现新的编码方式,国际化标准组织ISO制定(支持西欧语言,向上兼容ASCII码,任然不支持中文:ISO-8859-1,又被称为Latin-1
  • 随着计算机向亚洲发展,计算机开始支持中文、人文、韩文等,其中支持中文的编码方式:GB2312 < GBK < GB18030
  • 支持繁体中文:五大码 < big5 >
  • Unicode编码统一了全球所有文字:UTF-8(** 实际开发中一般使用 **)、UTF-9
  • Java语言源代码采用的是unicode编码方式,所以‘标识符’可以用中文

10.八种基本数据类型取值范围

  • byte [-128,127]
  • short [-32768,32767]
  • int [-2147483648,2147483847]
  • long
  • float
  • double
  • boolean [true,false]
  • char [0,65535]
  • 注意:short和char所表示的种类总数是一样的(所占字节数相同),只不过char可以表示更大的正整数,因为char没有负数

11.八种基本数据类型的默认值

  • 成员变量没有手动赋值系统会默认赋值,局部变量不会
  • byte,short,int,long 0
  • float,double 0.0
  • boolean false(0)
  • char \u000

五.2、数据类型详解

1.原码、反码、补码

  • 1100110011
  • 1011001100 除符号位,按位取反
  • 1011001101 除符号位,按位取反再加1
  • 正数的原反补是一样的

2.char类型(略)

3.转义字符

  • 转义字符:反斜杠 ’ \ ’
    转义字符出现在特殊字符之前,会将特殊字符转换成普通字符。
  • 反斜杠在java语言当中具有转义功能
  • 在java语言中System.out.printlnSystem.out.print区别:println表示输出之后换行,print表示输出但是不换行,也可以用换行符’\n’
  • 换行符:‘\n’
  • 制表符:‘\t’ 相当于一个按键Tab
  • 要求在控制台上输出“反斜杠字符”:
    char k = ‘\’;
    System.out.println(k);

    解释:第一个反斜杠具有转移功能,将后面的反斜杠转义为普通的反斜杠字符。
    结论:在java当中两个反斜杠代表一个普通的反斜杠字符。
  • 在控制台输出一个普通的“单引号字符”:
    char k = ‘’';
    System.out.println(k);
  • 反斜杠u:‘\u’
    \u后面的一串数字是某个文字的unicode编码
    如何获得某个文字的unicode编码:在命令行输入native2ascii,回车,然后输入文字之后获得unicode编码(JDK中自带的native2ascii.exe命令)

4.整形字符

1.java语言当中的“整数型字面值”被默认当作int类型来处理,要让这个“整数型字面值”被当作long类型来处理的话,需要在“整数型字面值”后面添加l/L建议使用大写L

public class Hi
{

    public static void main(String[] args)
    {
        long k = 2147483648;
        System.out.println(k);//不能正常打印,因为右边的数会默认为int类型,而214783648已超出了int类型的取值范围
        long k = 2147483648L;//在右边赋值值后面加L
		System.out.println(k);//能正常打印
    }
}

2.java语言当中的整数型字面值有三种表示方法
第一种方式:十进制【一种缺省默认的方式】
第二种方式:八进制【在编写八进制整数型字面值的时候需要以0开始】
第三种方式:十六进制【在编写十六进制哦整数型字面值时候需要以0x开始】

3.java中可以小容量直接转换成大容量,但是大容量转换成小容量,需要进行强制类型转换,而且强制类型转换编译通过后,运行阶段可能损失精度,谨慎使用强制类型转换。

  • 强转一
public class Hi
{

    public static void main(String[] args)
    {
		long i = 100L;
        int k = i;//需要强制类型转换
		int k = (int)i;
        System.out.println(k);
    }
}

强转原理:
原始数据:00000000 00000000 00000000 00000000 00000000 00000000 00000000 01100100
强制转换后的数据:00000000 00000000 00000000 0110100
将左边的二进制砍掉【所有的数据强转的时候都是这样完成的】

  • 强转二
public class Hi
{

    public static void main(String[] args)
    {
		long i = 2147483648L;
		int k = (int)i;
        System.out.println(k);//损失精度严重,结果为负【-2147483648】
    }
}

原始数据:00000000 00000000 00000000 00000000 10000000 00000000 00000000 00000000
强制转换后的数据:10000000 00000000 00000000 00000000
10000000 00000000 00000000 00000000目前存储在计算机内部,计算机储存数据都是采用补码的形式存储,将以上的补码转换到原码就是最终的结果

  • 强转三
public class Hi
{

    public static void main(String[] args)
    {
		byte k = 50;//可以
		byte k = 127;//可以
		byte k = 128;//不可以
		byte k = byte(128);
        System.out.println(k);//损失精度严重,结果为负【-128】
    }
}

原始数据:00000000 00000000 00000000 10000000
强制转换后的数据:10000000

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值