JAVA简介
Java是一门伟大的面向对象程序设计语言,Java 诞生于1995年5月目前属于 Oracle 公司, Java 是一种高级语言,你可能听过的其他高级语言还有 Python C C++ 等 有 高级语言 自然也有 低级语言 ,一般计算机世界里把 低级语言 叫做机器语言或者汇编语言,实际上计算机只能运行低级语言,所以高级语言编写的程序必须先被翻译成低级语言才能运行
java也称c+±-
java应用
java学习路线
低级语言就是接近硬件的语言
1. 高级语言和低级语言
常见的低级语言有:机器码、汇编语言
高级语言常见如:c,c++,java,python,PHP,c#,Ruby,go,kotlin,swift。
机器码:计算机能够直接识别的二级制编码,无论语言多高级都要转成二级制文件来让计算机识别运行。
汇编:用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址,在不同的设备中有着不同的指令集
高级语言:为省去编程时候的不必要的操作细节,节省代码量,可读性强,维护性强,更贴近人性化
高级语言与低级语言的区别:高级语言大部分不能直接更硬件打交道,这使得相对来的程序运行速度降低,总之一句话来说那种语言更接近人性化的语言就更高级。
jdk :JAVA Development kit 开发环境
jre : JAVA Runtime Environment 运行环境
jvm:java虚拟机用来屏蔽底层系统的差别
Java环境配置
卸载jdk
删除Java的安装目录
删除Javahome
删除path路径下关于Java的目录
安装jdk
找到下载地址
环境变量添加JAVA_HOME
jdk安装位置
添加path路径
%JAVA_HOME%\bin //bin目录存放了一些Java的可执行文件
%JAVA_HOME%\jre\bin
cmd输入java -version
出现java版本号则安装成功
java语言的执行
Java编译的过程并不生成机器语言而是生成字节码,通过jvm支持了字节码的解释运行,源代码不能被机器运行
println 是 print new line 的缩写
java大小写敏感
每一行代码结束的地方用;结尾
用记事本写好java代码后命名为HelloWorld.java的文件然后cmd进入文件目录下
输入javac hello.java编译java文件会生成一个class文件
输入java HelloWorld运行class文件
类名与文件名相同
得到控制台输出
java程序运行机制
- 编译型 一次翻译完成
- 解释型 一句一句的翻译实时
java是先编译成字节码后一句句解释
java开发环境安装(ide)
使用IDEA
快捷键:
psvm
sout
IDEA使用及优化
详情百度
Java注释
加在类上就是类的注释,加在方法上就是方法的注释
命令行生成java文档
- 在idea里右键打开文件位置
- 在资源管理器文件路径之前输入cmd 加空格 回车
- 进入命令行后 输入javadoc -encoding UTF-8 Doc.java
- 最后生成完毕之后进入文件夹点击index.html文件
- 可以看到详细的java文档
java变量
每个变量都需要声明其类型
要素包括变量名,作用域,变量类型
- 类变量:static
- 示例变量:方法的外面,类的里面,属于对象,初始值为0,bool值为false
- 局部变量:必须声明和初始化值
常量
- 初始后不会被改变的值,他在程序运行中值不会被改变
- 在类型前面加final
动态类型和静态类型
动态性语言是指在程序运行期间才给变量指定数据的类型,常见于python和Ruby,而静态类型语言则恰好相反,在写程序代码的时候就要指定变量的类型,这种语言有:c,c++,java
Java变量的使用需要先声明
如
string message="stay hungry,stay foolish";
- 也就是说所有的变量要先定义再使用
标识符
标识符以字母下划线或者美元符号开头也可以中文命名
基本数据类型
关键字
字符串 数字 布尔 byte(最大127)
小整数 short
整形 int
大整数 long最后加L
小浮点数 float 最后加F
大浮点数 double
float :有限 离散 舍入误差 大约但不等于
最好不要用浮点数进行比较
string 类 不是关键字
引用数据类型
- 类
- 接口
- 数组
强制类型转化
- 从高到低转化
- 注意溢出和精度问题
- 加减乘除,有long类型结果就是long,有double就是double类型
自动转化
例如:
public class Hello {
public static void main(String[] args) {
int a=100_000_000_0;
int b=20;
int c=a*b;
long d =a*b;
System.out.println(c);
System.out.println(d);
}
}
输出:
-1474836480
-1474836480
方法:long e=(long)a*b;
- java的命名规范
骆驼有个非常明显的特点就是它的驼峰,由于它的这种非常明显的特性,编程语言模仿了这个驼峰特性,具体是啥呢?那就是把每个具体单词的首字母变成大写,这样大写的字母就像驼峰一样 3 比如说:用户名称如果用英文单词来表示的话就是UserName,大家注意看一下,这个大写的 U 和 N 是不是像驼峰一样?这样的例子可以很多,比如说我的文档:MyDocument 密码:Password
方法名遵守的是小驼峰,和驼峰的区别就是第一个单词是小写的
运算符
自增自减
位运算
A=0010 1101
B=1011 1100
A&B=0010 1100
A|B=1011 1101
A^B=1001 0001 //相同为0,不同为1
//左移与右移
System.out.println(2<<3);
//输出16
//原理:左移相当于把数字乘2效率高!!!
字符串连接符
当运算式中出现字符串,+就会把其他转化为字符串拼接
System.out.println(""+2+3); System.out.println(2+3+"");
输出 23 5
Java的包机制
其实就是文件夹
- 一般用公司域名倒置作为包名
- package必须放在最上面
- 导入包 import
- .*通配符导入这个包下所有的类
Java的流程控制
- 用户交互输入Scanner类 ctrl+右键访问
import java.util.Scanner
Scanner s = new Scanner(System.in);
next()与nextLine()方法获取输入的字符串
next()不能得到带有空格的字符串
nextLine可以
用hasNext()与hasNextLine()判断 是否还有输入的东西
还有nextFloat() nextInt()
输入:hello world
输出:hello
改用nextLine方法后得到完整输出
package zone.mashiro.base;
import java.util.Scanner;
/**
* @author yuan
* @version 1.0
* @since 1.8
*/
public class Demo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);//接收键盘输入
System.out.println("使用next方式接收:");
//判断用户有没有输入字符串
if (scanner.hasNext()){
String str = scanner.next();//程序会等待输入完毕
System.out.println("输出的类容为:"+str);
}
//io流的类如果一直不关闭会一直占用资源,用完就关
scanner.close();
}
}
- 顺序结构:从上到下依次运行,按照顺序依次执行
- if单/多选择结构
- switch case break default(可选 )//可以是字符串,通过hashcode比较、
- while循环结构
- do while : 与while的区别在于while先判断后执行,dowhile是先执行后判断,所以dowhile会被至少执行一次
- for ;隔开初始化值,条件判断,迭代
- 100.for 生成
- 增强for循环:
- continue:跳过某次循环
int[] numbers={10,20,30}
fot(int x:number){
System.out.println(x);//遍历数组元素
}
反编译java文件
- 字节码文件----反编译
简单的debug
先打一个断点,点小虫的符号
数学函数
public class MathDemo {
public static void main(String[] args) {
double value = Math.random();
System.out.println(value);
// 把随机的结果*10 得到1-10之间的随机数
int newValue = (int) (value * 10);
System.out.println(newValue);
}
}
产生0-9的随机数
何谓方法
- 方法是解决一类问题的步骤的有序集合
- 方法包含于类或对象中
- 方法在程序中被创建,在其他地方被引用
- 一个方法只做一个功能
方法
虽然 main 方法有特殊的含义它是程序执行的入口,如果要执行代码就必须要有 main 方法main函数可以命令行传参
// 固定的方法格式,main方法用于启动程序
public static void main(String[] args){
}
// public(公共的) static(静态) void(空类型)
public static void 方法名称(方法参数){
代码块
}
方法的参数分为实际参数,和形式参数。
- 形式参数:定义方法时写的参数。
- 实际参数:调用方法时写的具体数值。
值传递与引用方法
在数据做为参数传递的时候,基本数据类型(包括包装类,如Integer)是值传递,引用数据类型是引用传递(地址传递)。
在引用传递的时候如果没有更改地址中变量的内容的话,而是把变量指向一个新的地址,则原来的参数变量依旧指向原来地址中的内容。
针对字符串String会存在特殊的地方,因为其是不可变的,因此,在函数中对String变量赋值也是把新的String对象地址赋值给实参,这样原来变量的内容这不会发生变化。
方法的重载
方法名称相同,参数列表同(个数不同,类型不同,参数排列顺序不同)
方法的返回值类型可以形同可以不同
可变参数
public void test(int... i)
test(...i:1,2,3,4,5,6)
递归方法
package zone.mashiro.base;//计算阶乘
public class Digui {
public static void main(String[] args) {
System.out.println(f(5));
}
public static int f(int n){
if(n==1){
return 1;
}
else return n*f(n-1);
}
}
注意递归的终止条件
数组
- 利用Java声明数组
int[] nums;//java风格int num[];//c++风格nums=new int[10]
arrays.length
- 数组初始化
- 静态初始化
int[] nums={1,3,4,5};
- 动态初始化
int[]b=new int[10]
有默认值
- 数组也是对象,数组的元素相当于对象的成员变量
- 数组的长度不可变
- 数组作为参数和返回值
- 二维数组
Java array类
数组的工具类
Arrays.sort()
稀疏数组
当一个数组中大多数元素为同一值时,可以使用稀疏数组来保存该数组,从而缩小程序的规模
先压缩后还原。