1.dos命令
dir 查看当前目录的文件
cls 清屏
cd \ 回到根路径
ipconfig 查看ip地址
ipconfig /all 查看更详细的网络信息
这个详细信息中包括网卡 的物理地址,例如:70-8B-CD-A7-BA-25
这个物理地址具有全球唯一性,物理地址通常叫做MAC地址
怎么查看两台计算机是否可以通信?
ping命令
语法格式:
ping IP地址
ping 域名
ping www.baidu.com
ping 61.135.168.121 (百度的IP地址)
ping 61.135.168.121 -t 一直ping 目的:查看网络是否稳定
执行域名和ip都可以访问百度,域名底层会被解析成ip地址
2.常用快捷键
home 光标回到行首
end 光标回到文件末尾
ctrl +home 光标回到文件开头
ctrl +end 光标回到文件末尾
ctrl + Y 重做(与ctrl+X 撤销相反)
ctrl + shift + 左键 选择一个单词
ctrl + shift + 右键 选择右边一个单词
3.Java语言的特性
- 简单性
在Java语言中真正操作内存的是:JVM(java虚拟机)
所有的java程序都是运行在java虚拟机当中的
而java虚拟机执行郭晨高中再去操作内存
对于C或者C++来说程序员可以通过指针操作内存
C或者C++更灵活,可以直接程序操作内存,但是要求程序猿技术精湛
C语言或者C++更有驾驭感
飞机航行:
如果是C语言表示程序员是飞机驾驶员
如果是java语言表示程序员是飞机上的乘客
java语言底层是C++,所以JVM是用C++语言写好的一个虚拟的电脑。
JVM在哪里里?告诉大家。安装JDK之后,JVM就代表安装好了
内存是什么?
对于计算机来说,最主要的几个部件是什么?
- CPU:
中央处理器,相当于人类的大奥,负责发送并执行命令
是整个计算机的指挥官
cpu 是负责计算的,负责运算的
10 + 20 = 30
cpu负责将30这个计算结果计算出来
但是在计算过程中有三个数据需要临时找个空间存储一下,
这三个数据分别是: 10 20 30 - 内存:
程序运行过程中的临时数据存储空间
断电之后或者关机之后内存中的数据就消失了 - 硬盘:
持久化设备,硬盘上的数据不会应为断电而消失 - 主板:
相当于人类的躯干,是一个载体
cpu,内存条,硬盘等主要的部件都是放在主板上的
主板上有很多线,将以上的部件链接起来
- java是堪称完全面向对象的
采用面向对象的方式可以让复杂问题简单化 - 健壮性
主要是因为java中有一种机制
自动回收机制(GCj机制)
Java语言是健壮的,相对于C语言来说,C语言没有java健壮
Java不容易导致内存的泄漏
C++或者C语言使用不当时很容易导致内存泄漏
JVM负责调度机制,程序员不需要干涉
以上讲解中描述了这几个术语:
JVM(C++语言写的一个虚拟计算机)、GC(垃圾回收机制) - java完全/完美支持多线程并发
- 可移植性/跨平台
java语言一次编写,到处运行(平台改变了,程序不需要改变)
jVM怎么来的?在安装JDK的时候自带JVM
所以JDK也有不同版本,window版的JDK,有Linux版本的JDK
JVM这种机制实现跨平台,那么这种机制优点和缺点分别是什么?
优点::一次编写到处运行,可跨平台
缺点:麻烦,对于运行java程序来说必须现有一个JVM
就像你想在网页上看视频,你必须安装一个flash是一样的
4.JDK,JRE,JVM三折之间的关系?
- JDK:java开发工具箱
- JRE:java运行环境
- JVM:java虚拟机
JDK包括JRE和JVM
JVM不能独立安装
JRE和JDK可以独立安装
有单独的JDK安装包,JRE安装包,没有单独的JVM安装包
安装JDK:JRE自动安装了,同时JRE内部的JVM也就自动安装了
安装JRE:JVM也就自动安装了
问题:假设你在软件公司开发了一个新的软件,现在要去客户那边给客户把项目部署一下,把项目跑起来,你需要安装JDK吗?
只需要安装JRE就可以了
JRE体积小,安装非常便捷
术语总结:
JavaSE:标准版 JavaEE:企业版 JavaME:微型版
安装JDK后:JDK,JRE,JVM
5.对java加载与执行的理解
java程序从编写到最终运行中间经历的过程?
编译阶段:普通文本到字节码的过程
运行阶段
注意:java程序员直接编写的java代码是无法被JVM识别执行的,java程序员编写的代码这种普通文本必须经过一个编译,将这个普通文本转变成字节码,JVM能够是被字节码
编译阶段和运行阶段可以在不同的操作系统上完成吗?
在window上编译
编译之后生成“字节码”
把“字节码”完全放到linux上运行
完全可以, 因为java是跨平台的
可以做到一次编写,到处运行
java源代码一旦编译之后,源代码可以删除吗?只留下字节码可以执行吗?
完全可以执行,因为源代码不参与程序的执行过程
参与程序执行过程的是字节码,
但是最好不要删除源代码,因为有可能执行结果不是你需要的。
当执行结果不是你需要的时候,你可以重新打开源码进行修改,
然后重新编译 生成新的字节码,再重新执行,这样会有新的执行结果
放源码的文件扩展名必须是:XXX.java
并且需要注意的是:编译生成的字节码文件扩展名是:XXX.class
没有为什么,死记硬背吧!!!!
另外需要注意的是:
1个java源文件可以编译生成多个class文件最终运行的是class文件
问题:字节码文件是二进制文件吗?
字节码文件不是二进制文件
如果是二进制文件的话,就不需要JVM了
因为操作系统可以直接执行二进制
6.java从开发到运行经历了什么?
注意:在以上的过程中,需要使用两个非常重要的命令?
- javac命令,负责编译
- java命令,负责运行
7.编写Helloworld
编译java源文件
javac 路径\Helloworld.java(执行完会生成Helloworld.class类文件)
运行java程序需要哪些步骤?
第一步:先使用cd命令切换到Helloworld.class所在的目录
第二步:java Helloworld(java后面跟类名 不能写Helloworld.class)
8.”java HelloWorld“ 的执行过程以及原理?
第一步:会先启动JVM
第二步:JVM启动之后,JVM会启动类加载器classloader
类加载器的作用:加载类的,本质上类加载器负责去硬盘上找“类”对应的字节码文件,
假设是”java HelloWorld“,那么类加载器会去硬盘上搜索:HelloWorld.class文件
假设是“java Test”,那么类加载器会去硬盘上搜索:Test.class文件
第三步:
类加载器如果在硬盘上找不到对应的字节码文件,会报错
类加载器如果在硬盘上找到对应的字节码文件,类加载器会将该字节码文件装载到JVM文件中,
JVM启动“解释器”将字节码解释成”1010100000“这种的二进制码,操作系统执行二进制码和硬件
交互
(默认情况下类加载器从当前目录加载)
问题????????
能不能给类加载器指定一个路径,让类加载器去指定的路径下加载文件?
classpath可以满足
需要在环境变量中创建一个name=classpath,地址写上需要加载的文件地址
配置完成后,只能在该目录下进行类文件加载
classpath环境变量的作用是什么?
是给类加载器指路的
没有配置环境变量classpath的时候,默认从当前路径下加载
如果配置了环境变量classpath的时候,只能从指定的路径加载
目前讲了三个概念:path java_home classpath,这三个环境变量只需要配置path
9.关于第一个java程序代码 的解释说明
// 单行注释
/*
多行注释
/
/*
*java注释:这里的注释信息可以自动被javadoc.exe命令解析提取并生成到帮助文档中
*/
10.main方法,是程序入口(sun公司java 语言规定的)
JVM在执行程序的时候,会主动找这样一个方法。没有这个规规格的方法,程序无法执行
main方法也可以叫做主方法
注意:方法必须写在“类体”中,不能放到“类体”外面
任何程序都要有一个入口,没有入口进不来,无法执行
public class Test{
public static void main(String[] args){
//args可以改名字,对于主方法而言,只有这个位置可以改,其他位置不能动
System.out.println("Test");//分号必须加,代表一行语句的 结束
}
}
类体中放方法,而不是直接的Java语句
main方法中可以什么都不写
public的类可以没有,但是如果有,public的类名必须和源文件名保持一致,同时只能有一个public
11.标识符
只能由数字字母,下划线美元符号组成,不能含有其他符号
不能以数字开头
不能使用关键字做标识符
虽然java中的标识符严格区分大小写
理论上没有长度限制
凡是程序员自己命名的单词都是标识符
标识符可以标记:类名,方法名,变量名,接口名,常量名…
main是一个方法的名称,属于标识符
但是这个标识符不能修改,因为这个main是sun固定死的
文件命名123.java可以吗?
可以,完全可以,在window操作系统中123.java是文件名
只不过在123.java文件中无法定义public类
关键字:
在sun公司开发java语言的时候,提前定义好了一些具有特殊含义的单词,这些单词全部小写
12.变量
注意:在java中所有数据都被称为字面量
字面量可以分为很多种:
整数型,浮点型,布尔型,字符型,字符串型
public class VarTest{
public static void main(String[] args){
//以下三个10,占用3块不同的内存空间
System.out.println(10);
System.out.println(10);
System.out.println(10);
int i = 10;
//以下的3次访问都是访问的同一块内存空间
System.out.println(i);
System.out.println(i);
System.out.println(i);
}
}
变量三要素?
数据类型 变量名 值(值是数据,就是字面量)
java中变量必须先声明,再赋值才能访问(必须手动赋值)
可以在一行声明多个变量,但是只会给最后一个赋值
int a,b,c =100 // c =100 a,b只赋值不声明
成员变量和局部变量(成员变量也就是其他语言的全局变量)
13.数据类型
- 基本数据类型:
1.整数型:byte1,short2,int4,long8
2.浮点型float4,double8
3.布尔型:boolean1
4.字符型:char2(java中规定字符型字面量必须使用单引号括起来 属于文字)
引用数据类型:
字符串String属于引用数据类型
String字符串不属于基本数据类型范畴
java中除了基本数据类型外,剩下的都是引用数据类型
引用数据类型后期面向对象的时候才会接触
有几个取值范围需要记住
(1字节)byte类型取值范围:[-128-127],总共可以标识256个不同的数字 [-27~27-1]
(2字节)short:[-32768,32767] 可以表示65536个不同的数字 [-215~215-1]
(4字节)int:[-2147483648-2147483647] 可以表示65536个不同的数字 [-231~231-1]
(2字节)char:[0-65535] 可以表示65536个不同的数字 [0~2^16-1]
short和char实际上容量相同,不过char可以表示更大的数字
因为char表示的是文字,文字没有正负之分,所以char可以表示更大的数字
char可以存储1个汉字吗?
可以的,汉字占用一个字节,java中的char类型占用2个字节,正好
错误写法:
char a = “x” //错误:String无法转换成char
cahr a1 =‘xx’ //单引号只能放一个字符 - 转义字符
\t 表示制表符 tab(经测试\t属于1个字符)
\n 表示换行
\ 表示
\u unicode编码是16进制的 - 自动类型转换
在java中,整数型字面量/数据,默认被当做int类型处理
如果希望该整数型字面量被当做long来处理,需要在字面量后面添加L/l
// 是否存在类型转换?
// 不存在 在整型字面量后面加L,表示的是long类型字面量 ,
//c是long类型,long类型赋值给long类型 不存在类型转换
long c = 300L;
// 是否存在类型转换?
// 200字面量默认被当做int类型处理
//b变量是long类型,int 4字节,long 8字节
// 小容量可以转换成大容量,这种操作被称为:自动类型转换
long b = 200; - 强制类型转换
小容量转大容量,自动类型转换
大容量转小容量,强制类型转换
强制类型谨慎使用,会造成精度损失 byte = byte(300 ) => 44
long = 2147483647 //不报错
long = 2147483648//报错 值超出int的范围 - 补码反码
计算机在底层存储数据的时候,一律存储的是二进制的补码形式
计算机采用补码形式存储数据的原因是:补码形式效率最高
正数的原码补码反码都一样
负数的反码等于原码取反(除符号位,其他位取反)
补码 等于 反码+1 - byte,short,char做混合运算
做混合运算时候,先各自转成int类型在做运算
char c1 ='a';
byte b = 1;
// 错误:从int转换到short可能会有损失
short = c1 +b;
//错误:不兼容的类型,从int转到shaort可能会有损失
short = (short)(c1) +b;
多种数据类型做混合运算的时候,最终的结果类型是“最大容量”对应的类型
char c1 ='a';
byte b = 100;
int i = 30
long x = 100
system.out.println(c1 + b + i + x)//报错 原因计算结果是long类型
- 浮点型数据
long 8个字节
float 4个字节
那个容量大?
注意:任意一个浮点型都比整数型空间大
float容量 > long 容量
java中规定,任何一个浮点类型的数据默认被当做double处理
如果想让这个浮点型字面量被当做float类型来处理,那么
请在字面量的后面添加F/f
1.0 那么1.0默认当成double类型处理
1.0F 这才是float类型。(1.0f)
错误:double转成float,可能有精度损失
float f = 3.14
怎么修改上面代码呢?
第一种:
float f = 3.14f;
float f = 3.14F;
第二种:强制类型转换,可能有精度损失,谨慎使用
float f = (float)3.14;
14.运算符
逻辑与& 和 逻辑非 | 要求两边为boolean类型的值
短路与&& 和短路非 || 要求两边为boolean类型的值
区别:逻辑与两边都执行,短路与是左边为false,右边不执行
从效率上来说,短路与&& 比逻辑与& 效率高一些
赋值运算符
byte x =100;
x = x +1;// 会报错 因为x+1 是int类型
x += 1;//不会报错 ,得到的结果类型还是byte(扩展运算符)
使用扩展运算符,永远不会改变运算结果类型
+运算符 ,什么时候求和,什么时候进行字符串拼接呢?
当 +运算符两边都是数字类型的时候,求和
当+运算符两边任意一边是“字符串类型”,那么这个+会进行字符串拼接操作,
拼接后的字符串还是字符串
15.Java中i++的结果解释
16.作业检测
怎么接收用户键盘输入?
java. util.Scanner s = new java.util.Scanner(System.in);
//接收参数
int i = s.nextInt();
//接收字符串
String str = s.next();
(备注一下,习题记得练习)17.JVM内存结构
方法只有在调用的时候才会在栈中分配空间,并且调用时就是压栈。
方法执行结束之后,该方法所需要的空间就会释放,此时发生弹栈操作.
方法区存什么?存代码
栈中存储什么? 方法运行过程中所需要的内存,以及局部变量
18.数据结构就是存储数据的容器,而不同的容器存在不同的结构。数据结构和java语言实际上没关系,数据结构是一门独立的学科
常见的数据结构:数组,链表,图,二叉树,栈,队列
和数据结构通常在一起出现的是:算法
算法:排序算法,查找算法。。。
栈帧永远指向栈顶的元素
19.方法封装小作业
编写一个方法,输出大于某个正整数n的最小质数
比如:这个正整数n是2
也就是输出:大于2的最小质数,结果就是3
比如:这个正整数n是9
也就是要输出:大于9的最小质数,结果就是11
大于11最小的质数是:13
思路:
首先,系统一定会先给你一个正整数n,然后你基于这个n往后++,
每加1得到的新数n判断一下是否为质数 (p194)
20.方法重载的机制?
同一个类中,方法名相同,参数个数、参数类型、参数顺序不同,则发生重载
优点:代码整齐美观,功能相似的可以让方法名相同,更易于以后的代码编写
java语言中,怎么进行方法区分的呢?
首先在java编译器中会通过方法名进行区分,
方法名相同的情况下,根据方法的参数类型进行区分
什么时候使用方法重载?
如果两个功能是相似的,可以考虑将他们方法名一致
不在同一个类中不能叫方法重载
class Hello{public static void m1()}和class Hello1{public static void m1()}
方法的重载和方法的返回值类型无关和修饰列表无关
public static void m1()和public static int m1()不构成重载
void m2()和public static void m2()不构成重载
21.println是方法名,是sun公司的java团队写的,println方法是重载了
有兴趣的可以看看源码