跟狂神学Java
关于Typora使用方法
#+空格+内容 一级标题
##+空格+内容 二级标题(以此类推)
+内容+ 加粗
内容 斜体
内容 斜体加粗
内容 删除线
引用
—分割线
***分割线
![名字](路径) 图片
[名字](地址) 超链接
1.+空格 有序列表
-+空格 无序列表
···(tab键上的点)Java(表示代码)
windows快捷键
shift + win 图标(右键)可以打开powershell
常用的Dos命令
#查看当前目录下所有文件 dir #切换目录 cd (change directory) 返回上级 cd.. #清理屏幕 cls (clean screen) #退出终端 exit #查看电脑ip ipconfig #打开应用 cals 计算器 mspaint 画图 notepad 记事本 #ping命令 ping www.baidu.com #文件操作 md 目录名 创建 rd 目录名 删除 cd> 文件名 创建文件 del 文件名 删除文件 #cmd+空格+当前路径 进入当前路径下的命令窗口
Java入门
三高:高可用、高性能、高并发
jdk:Java开发者工具(包含jre)
jre:Java运行时环境
jvm:Java虚拟机
正在上传…重新上传取消正在上传…重新上传取消
卸载JDK
-
删除Java的安装目录
-
删除环境变量里面的JAVA_HOME
-
删除path下关于Java的目录
-
Java-version 查看是否卸载
安装JDK
-
百度搜索JDK8,找到下载地址
-
同意协议并下载电脑对应版本
-
双击安装JDK
-
配置环境变量
-
我的电脑–>右键–>属性
-
环境变量–>系统变量–>JAVA_HOME(路径是刚刚安装JDK的路径)
-
配置path变量:打开path,添加%JAVA_HOME%\bin(%000%表示引用000的路径)再添加%JAVA_HOME%\jre\bin(此目录对应jre的真实目录)
-
-
测试JDK是否安装成功
-
打开cmd
-
输入Java -version
-
-
关于Java的基本知识
-
bin里面放的是Java的可执行文件
-
include 引入的c语言的头文件
-
jre可以运行一个Java文件
-
lib放的Java的库文件(一般用不到)
-
//单行注释
-
/* */多行注释
-
文档注释/** */
-
java 是一种强类型语言,所有变量要先定义后才能使用
-
字节
-
位(bit):是计算机内部最小的存储单位,11001100是一个八位二进制数
-
(Byte)是计算机中数据处理的基本单位,1字节=8位
-
电脑中的32位和64位区别:32位只能装32位的cpu,最大内存为4GB;64位既可以装32位也可以装64位,64位支持128内存
-
转换关系1B(Byte)=8b(bit),1024B=1KB,1024KB=1M,1024M=1G
-
-
最好完全避免使用浮点数进行比较
-
一般利用公司域名倒置作为包名
-
引用别的包需要导入包import 包名.类名 例:import Java.nice *;(此处的星号表示引用该包的所有类)
基本数据类型
-
整数类型
int 四个字节 -21亿—-21亿 最常用
byte 一个字节 -128—–127
long 八个字节 后面要加L(例:long a=30L)
short 两个字节
-
浮点型
float 四个字节 后面要加f(例:float a=50.1F)
double 八个字节
-
boolean类型:占一位其值只有true和false两个
-
字符类型:char占两个字节
数据类型转换
由低到高(容量由低到高可以转换),小数的优先级大于整数。
低=======================》高
byte,short,char->int->long->float->double
由高到低需要强制类型转换,由低到高自动类型转换
JDK7新特性:可以用下划线分割数字
public class demo2 { public static void main(String[] args) { int a =10_0000_0000; System.out.println(a); } }
正在上传…重新上传取消正在上传…重新上传取消
*注意
-
不能对布尔类型进行转换
-
不能把对象类型转换成不相干的类型
-
在把高容量转换成低容量的时候,强制转换
-
转换的时候可能存在内存溢出,或者精度问题
引用数据类型
-
类
-
接口
-
数组
变量和常量
type varNme = value //数据类型 变量名 = 值
注意
-
每个变量都有类型,类型可以是基本类型,也可以是引用类型
-
变量名必须是合法标识符
-
变量声明是一条完整的语句,因此每一个声明都必须以分号结束
public class Demo3 { //属性:变量 //类变量:static //实例变量,从属于对象;如果不自行初始化,这个类型默认值为 0 0.0 //布尔值:默认是false //除了基本类型,其余默认值都是null int age; String name; //main方法 public static void main(String[] args) { //局部变量:必须声明数据类型和初始化值 int a = 10; System.out.println(a); //变量类型 变量名字 = new Demo3() Demo3 demo3 = new Demo3(); System.out.println(demo3.age); System.out.println(demo3.name); } }
变量的命名规范
-
类成员变量:首字母小写和驼峰原则:monthSalary
-
局部变量:首字母小写和驼峰原则
-
常量:大写字母和下划线:MAX_VALUE
-
类名:首字母大写和驼峰原则:Man,GoodMan
-
方法名:首字母小写和驼峰原则:run(),runRun()
运算符
-
算术运算符:+,-,*,/,%,++,–
-
赋值运算符:=
-
关系运算符:>,<.>=,<=,==,!=instanceof
-
逻辑运算符:&&,||,!
-
位运算符:&,|,^,~,>>,<<,>>>
-
条件运算符: ?:
-
扩展赋值运算符:+=,-=,*=,/=
逻辑运算符
int a = 3; int b = a++;//b=3,a++表示a先将值赋给b然后自增 int c = ++a;//c=5,++a表示a先自增再将值赋给c
a&&b:逻辑与运算:两个变量都为真,结果才为true,若第一个变量为假,则会发生短路,不再执行后面代码
a||b:逻辑或运算:两个变量有一个为真,结果才为true
!(a&&b):如果是真,则变为假,如果是假则变为真
//短路运算 int c = 5; boolean d = (c<4)&&(c++<4); System.out.println(d); System.out.println(c);//d为false,c为5
位运算符
/* A = 0011 1100 B = 0000 1101 ---------------- A&B=0000 1100 全1为1,其余为0 A|B=0011 1101 全0为0,其余为1 A^B=0011 0001 相同为0,不同为1 ~B =1111 0010 与B相反 */
三元运算符
X ? Y :Z,如果X为真(X==true),那么结果为Y,否则结果为Z
Hello,world
-
在一个文件夹中新建一个Java文件
-
后缀名为 .java
-
比如文件名为Hello.java
-
-
编写代码
public class Hello{ public static void main(String[] args){ System.out.print("Hello,World!"); } }
-
编译Javac java文件,会生成一个class文件
-
运行class文件
正在上传…重新上传取消正在上传…重新上传取消
注意事项
文件名和类名必须保持一致
IDEA知识
public class Hello { /**psvm快捷键 **/ public static void main(String[] args) { /** 输出快捷键sout**/ System.out.println("Hello world!"); } }
-
Ctrl + D:复制当前行到下一行
-
反编译 java —-class(字节码文件)——反编译(java)
打开IDEA找到项目结构然后找到文件缓存路径,打开后把里面的class文件放入java文件夹下回IDEA点开即可。
正在上传…重新上传取消正在上传…重新上传取消
Scanner对象
-
next():
-
一定要读取到有效字符后才可以结束输入
-
对输入有效字符之前遇到的空白,next()方法会自动将其去掉。
-
只有输入有效字符后才将其后面输入的空表作为分隔符或结束符
-
next()不能得到带有空格的字符串
-
nextLine():
-
以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符
-
可以获得空白
switch选择结构
case具有穿透性,后要加break结束执行;
JDK7新特性,表达式结果可以是字符串!
字符的本质也是数字(详情请看IDEA知识)
while循环和do while 循环
-
只要表达式为true,循环就会一直执行下去。
-
需要一个表达式失效的方式来结束循环
-
对于while来言,如果不满足条件,则不能进入循环。do while不满足条件也执行一次,do while 至少执行一次
-
while是先判断后执行,do while 是先执行后判断
for(初始化;布尔表达式;更新)
方法的定义
Java的方法类似于其它语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法包含以下语法:
方法包含一个方法头和一个方法体。下面是一个方法的所有部分:
-
修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
-
返回值类型∶方法可能会返回值。returnValueType是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType是关键字void。
-
方法名:是方法的实际名称。方法名和参数表共同构成方法签名。
-
参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何
-
参数
-
形式参数:在方法被调用时用于接收外界输入的数据。 修饰符返回值类型方法名(参数类型参数名){
-
实参:调用方法时实际传给方法的数据。
-
java里都是值传递
-
-
方法体:方法体包含具体的语句,定义该方法的功能。
-
可变参数
在方法声明中,在指定参数类型后加一个省略号
一个方法只能指定一个可变参数,它必须是方法的最后一个参数,任何普通的参数必须在它之前声明
修饰符 返回值类型 方法名(参数类型 参数名){ 参数体 return返回值; }
方法的重载
重载就是在一个类中,有相同的函数名称,但形参不同的函数。
方法的重载的规则:
-
方法名称必须相同。
-
参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)。
-
方法的返回类型可以相同也可以不相同。
-
仅仅返回类型不同不足以成为方法的重载。
实现理论:
方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错。
数组
int[] nums;//数组的定义 nums=new int[10];//数组的创建
-
其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。其元素必须是相同类型,不允许出现混合类型。
-
数组中的元素可以是任何数据类型,包括基本类型和引用类型。
-
数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。
ArraylndexOutOfBoundsException:数组下标越界异常! 小结: 数组是相同数据类型(数据类型可以为任意类型)的有序集合数组也是对象。数组元素相当于对象的成员变量 数组长度的确定的,不可变的。如果越界报:ArraylndexOutofBounds
Arrays类
-
数组的工具类java.util.Arrays
-
由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作
-
Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而“不用”使用对象来调用(注:不是不能而是不用)
-
具有以下常用功能
1. 对数组赋值:通过fill方法 1. 对数组排序:通过sort方法(升序排序) 1. 比较数组:通过equals方法比较数组中元素值是否相等 1. 查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作
二维数组可以视作一维数组里面的每个值都变成了一个一维数组
//一维数组初始化 int[] array1={1,2,3,4,5,6}; //二维数组初始化 int[][] array2={{1,2,3},{1,2},{1,2,4,5}};
面向对象
对于描述复杂的事物,为了从宏观上把握、从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是具体到微观操作,仍然需要面向过程的思路去处理。
-
面向对象的三大特性:封装、继承、多态
-
面向对象的本质就是:以类的方式组织代码,以对象的方式组织(封装)数据
构造器:和类名相同,没有返回值
作用:new本质在于调用构造方法,初始化对象的值
注意:定义有参构造之后,如果想使用无参构造,显示的定义一个无参的构造
快捷键:Alt+Insert
封装
该露的露,该藏的藏
-
程序设计追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用
-
封装(数据的隐藏)
通常应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这成为信息隐藏
-
属性私有,get/set
继承
super注意点:
-
super调用父类的构造方法,必须在构造方法的第一个
-
super必须只能出现在子类的方法或者构造方法中
-
super和this不能同时调用构造方法
Vs this:
代表的对象不同:
this:本身调用这个对象
super:代表父类对象的应用
前提
this:没有继承也可以使用
super:只能在继承条件才可以使用
构造方法
this();本类的构造
super():父类的构造
重写:需要有继承关系,子类重写父类的方法!
-
方法名必须相同
-
参数列表必须相同
-
修饰符:范围可以扩大但不能缩小:public>Protected>Default>private
-
抛出的异常:范围可以被缩小,但不能扩大:ClassNotFoundException——>Exception(大)
重写,子类的方法和父类必要一致;方法体不同(内容不同)!
为什么要重写:
-
父类的功能子类不一定需要或者不一定满足Alt + Insert :override;
Ctrl+h 继承树,在Java中所有类都直接或间接继承Object,Java中只有单继承,没有多继承,即一个儿子只能有一个父亲,一个父亲可以有多个儿子
多态
-
即同一方法可以根据发送对象的不同而采用多种不同的行为方式(让程序更灵活)
-
一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多(父类,有关系的类)
-
多态存在的条件
-
有继承关系
-
子类重写父类方法
-
父类引用指向子类对象
instanceof(类型转换)引用类型,判断一个对象是什么类型