Java
学习之前
markdown
-
标题
一级标题使用#(后接空格)
二级标题使用##(同上理)
n级标题使用n个#(typora似乎最多只支持六级标题)
-
字体方面
字体加粗使用** **(空格中间填文字)
字体变为斜体使用* *(同上)
***字体加粗并变斜体**字体左右两边用三次
画横线 例如:
我永远喜欢加藤惠实际上是文字“我永远喜欢加藤惠”左右两侧加~~
-
引用
例如
The journey is the reward
实际上是> The journey is the reward
即大于号+空格 再加要引用的句子
-
分割号
使用—即可 即减号*3
-
列表
-
一种是有序列表 直接打1.,Typora就会出现有序列表 再之后只要按回车就可以出现之后的列表了
-
令一种是无序列表,则是在行头打- 即减号+空格 就会出现无序列表
-
-
图片
例如下图我老婆
实际上是!+[]再加上()其中()中间加入图片的链接
链接分为两种:
一种为本地图片,版本高的Typora可以直接在()里添加图片
但是似乎我的 0.9.78 版本就不行,只能从格式里找到图片,再添加本地图片
如果要添加到CSDN上可以按图片 然后找到自己要的图片点击就好了
第二种是网络图片
可以在网络上找到一张图片,右键点击,找到检查元素,
很容易找到一个网址
然后![] ( )输入网址即可
例如
-
快捷键
这里介绍几个常用但是不一定知道的
复制粘贴就不讲了
Ctrl+z撤销键,之前我是在PR上认识到的,以为只是在PR上使用,后面发现哪里都可以
Ctrl+s保存键,建议每五分钟按一次,没事也多按按,没有坏处
Windows+r打开命令行
Windows=e打开我的电脑
Ctrl+Alt+del(即数字9键下面的·)
-
CMD的一些使用
首先是打开方法
第一种是点开开始 ,找到Windows系统 点击命令提示符即可
第二种是上面的Windows+r可以打开控制台 然后输入cmd就可以了(注意有管理员身份运行
可以取得最高权限,虽然我暂时也不知道有什么用)(比较常用)
然后是CMD的使用方法了
基本的Dos命令
-
盘符切换 直接在某盘按其他盘的名称 再加冒号即可
-
查看当前目录下的全部文件 在>后面加dir即可
-
切换目录 如果目录是在不同盘下 则输入输入 cd /d x:
这里的x是盘的符号
如果是在同一盘下 则直接输入cd x:即可
-
返回上一目录栏:cd…
-
清理屏幕 输入:cls (clear screem)
-
退出终端:exit
-
查看电脑ip:输入ipcomfig
-
打开计算器:calc
-
打开笔记本:notepad
-
ping命令:ping+网址(可用来查看网址的ip)
-
创建文件夹:md(make decument)
-
删除文件夹:rd(remove decument)
-
创建文件:cd>名称+后缀
-
删除文件:del 文件名(要加后缀)
开始学习
Java的版本
-
JavaSE 最基础的版本,主要用来开发桌面程序与控制台程序…
-
JavaME 嵌入式开发,主要用于开发手机,小家电…
-
JavaEE E企业级开发,web端,服务器开发…
JDK JRE JVM
JDK:Java Develoment Kit (Java开发工具)
JRE:Java Runtime Environment(Java运行环境)
JVM:Jave virtual Machine(Java虚拟机)
JDK安装
HalloWorld
-
建立一个文件夹
-
新建一个java文件(即改文件名后缀)
- 后缀为java
- 如果找不到后缀,需要自行打开
- 文件名为Hello.java
-
public class Hello{ public static void main(String[] args){ System.out.print("Hello,World!"); } }
特别注意!!!!一定要先保存,再进行下一步
-
编译javac java文件,会生成一个class文件
-
运行class文件,Java class文件 运行方式如下[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VKeYuw03-1604835904007)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20201105093006464.png)]
-
遇到的问题
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iuoWueob-1604835904008)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20201105223250509.png)]
若是World后面有!会出现这样的错误。这是因为你用了中文!!!**千万不要用中文!!**即打出了中文的!不是英文状态下的!,看起来没什么区别,但是实际上在计算机里是不一样的代码,而中文的代码有可能会出现上面的问题。
- 单词大小写也要注意,Java是大小写敏感的
- 尽量使用英文
- 文件名和类名必须保持一致,然后首字母要大写
Java运行机制
先介绍两种机制
- 编译型:是指把所有的代码全部编译完成后再进行下一步操作,主要用于开发系统
- 解释型:边编码边运行,用于网页开发等
IDEA
IDE:集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。所有具备这一特性的软件或者软件套(组)都可以叫集成开发环境。
IDEA下载:
- 打开官网
- 找到IntelliJIDEA
- 安装社区版(学生可以自己注册教育邮箱白嫖IDEA旗舰版)
进入IDEA后,调试习惯,我自学的时候是全部忽略按next
进入这个界面后,按Next,再按Next,出现下面界面
此处为你创建文件的地方,建议放在自己好找的地方,一般不放C盘
那么下面我们以Hello World!为例编写一次代码吧
创建完毕后,找到左上方的[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AqBTNyg1-1604835904008)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20201106075126164.png)]
在src处右键找到New,点击Java class,就可以创建一个集成开发环境了
然后我们开始写代码
# 输入psvm(这是main方法的快捷键)
再输入sout(又出现了system.out.println)
最后只要在()内打"Hello World!"即可
注意点
- 记住psvm与sout
Java基础语法
注释 标识符 关键字
书写注释在大型代码里非常非常重要!
在日常要养成良好的书写习惯
-
单行注释使用//,其作用是注释一行
-
多行注释使用/* 文字*/,其作用是注释多行
-
文档注释使用/** */,其作用暂时不清楚
关键字[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yFcHImxu-1604835904009)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20201106085032068.png)]
注意事项
- 关键字不能被随意用来作为标识符,尽量不用
- 标识符开头首字符只能用大小写字母,$,_,不能使用其他符号
- 标识符开头后面的字符可以用用字母,$,_,数字表示
- 标识符一般不使用中文或者拼音
- 标识符是大小写敏感型!
例如
正确用法
String sum=10
String $decument=Hello,World!
错误用法
String #sum=10
String *sum=10
数据类型
- 强类型语言:要求变量严格符号规定,所有变量都必须先定义后使用,例如JAVA
- 弱类型语言:符号规定并没有那么严格,例如JAVAME
JAVA数据类型分为一下两个类
- 基本类型
- 引用类型
如下图所示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IUsvssWW-1604835904009)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20201106215200205.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q6JtAkmB-1604835904010)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20201106215246658.png)]
public class Demo1 {
public static void main(String[] args) {
//八大基本数据类型
//整数
int sum=10;
byte num=10;
short sum1=30;
long num4=30L; //long类型要在数字后面加个L
//小数:浮点数
float sum5=20.1F; //float类型要在数字后面加一个F
double sum6=3.1415926;
//字符
char name='A';
char name1='叶';
//字符串,String不是关键字,类
//布尔值只要是非 true false
boolean flag= true;
}
}
以上为部分基本类型知识点
什么是字节
- 位(bit):指计算机内最小的储存单位,是一个八位二进制数
- 字节(byte):是计算机中数据处理的基本单位,习惯用B表示
- 1B=8bit
- 字符:指计算机中使用的字母 数字 字和符号等
如何创建一个新的project
-
找到File>new>project[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-znxlQNky-1604835904010)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20201107142653106.png)]
-
找到最下面的Empty project,点击Next
-
更改你想要的project name
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D5X5LkGx-1604835904011)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20201107142939096.png)]
(若出现上面的标志,则自己选择,如果按this window,就会把你当前的项目挤掉,如果按new window,则会出现一个新的项目框)
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Da0kpsZJ-1604835904011)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20201107143136554.png)]
最后把项目更改成我这个格式,注意SDK不能是红色的,要改成自己的1.8,然后版本改成8即可
数据类型扩展
转义字符类型如下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ad7FJyjw-1604835904012)(C:\Users\lenovo\Desktop\QQ图片20201107170425.jpg)]
public class Demo2 {
public static void main(String[] args) {
//整数扩展; 进制 二进制0b 十进制 八进制0 十六进制0x
int i = 10;
int i2 = 010;//八进制0
int i3 = 0x10;//十六进制0x 0~9 A~F 16
System.out.println(i);
System.out.println(i2);
System.out.println(i3);
System.out.println("=========================");
//浮点数扩展 银行业务表示钱如何做?
//BigDecimal 使用数学工具类
//float 有限 离散 接近但不等于
//最好不要使用浮点数进行比较
//如果要就只使用浮点数进行比较
//如果要比较的话,一般用bigdecimal
float f = 0.1f; //0.1
double d = 1.0 / 10;//0.1
System.out.println(f == d);//false
float d1 = 12143213465676465421f;
float d2 = d1 + 1;
System.out.println(d1 == d2);//ture
System.out.println("=========================");
char c1 = 'b';
char c2 = '时';
System.out.println(c1);
System.out.println((int) c1);//强制转换
System.out.println(c2);
System.out.println((int) c2);
//所有的字符本质还是数字
System.out.println("=========================");
char c3 = '\u0065';
System.out.println(c3);
//转义字符
//\t 制表符
//...
String sa = new String("hello world");
String sb = new String("hello world");
System.out.println(sa == sb);
String sc = "hello world";
String sd = "hello world";
System.out.println(sc == sd);
//对象 从内存分析
//布尔值扩展
boolean flag = true;
if (flag == true) { };//新手
if (flag) { };//老手
//Less is more
}
}
类型转换
- Java是强类型语言
- 低到高
byte,short,char<int<long<float<double
- 运算中,不同类型要先转换为同一类型再进行计算
可能出现的类型转换问题以及部分提醒点
public class Demo3 {
public static void main(String[] args) {
int i = 129;
byte b = (byte)i;//内容溢出
System.out.println(i);
System.out.println(b);
//强制转换是由高到低(类型)变量名 高到低!!
//自动类型转换是由低到高 不需要任何的其他代码 直接由低到高!!
/*
注意点:
1. 不能对布尔值转换(即ture与false不能转换为数字)
2. 不能把对象类型转换为不相干的类型
3. 在高容量转换为低容量的时候,强制转换
4. 转换的时候可能会出现内存溢出(即出现乱码),或者精度问题(例如小数点会被抛弃)
*/
System.out.println("=====================");
System.out.println((int)23.7);//23
System.out.println((int)-47.24f);//-47
System.out.println("=====================");
char c = 's';
int d = c +2;
System.out.println(d);
System.out.println((char)d);
System.out.println("=====================");
//操作比较大的数的时候,注意溢出
int money = 10_0000_0000;
int years = 20;
int total = money*years;//-1474836480 计算时已经溢出
System.out.println(total);//先把一个数转换为long
long total2 = money*years;//-1474836480 计算时之前已经出问题,即先算money*years再变化成long类型
long total3 = money*(long)years;//先把一个数转换为long,这样就直接进行long类型的运算
System.out.println(total2);
System.out.println(total3);
//注意L与l,容易把l看出1,一般用L代替l 即l类型
long total4=10L;
System.out.println(total4);
}
变量
- Java是一种强类型语言,每个变量必须声明其类型
- Java变量是程序中最基本的存储单位,其要素包括变量名,变量类型,作用域
- 变量名:name run salary…
- 变量类型:long double int…
- 作用域:
注意:
- 每个变量都要由类型,类型可以是基本类型叶可以是引用类型
- 变量名必须是合法的标识符
- 变量声明是一条完整的语句,因此每一个声明必须以分号结束;
变量的作用域
类变量
实例变量:在类的里面(Demo4)在方法的外面(main) 是从属于对象
局部变量:在方法里面即在main{}里起作用 在{}外不起作用
public class Demo4 {
//main方法 但方法不止一种 例如 add
//实例变量在类的里面(Demo4)在方法的外面(main) 是从属于对象
//实例变量比较高级,定义就可以使用
/*实例变量不自行初始化,那么变量会变成默认值
例如int的默认值就是0
double的默认值就是0.0(因为带有小数)
布尔值是false 非基本类型 其他的默认值都是null
*/
String name = "salary";
int age;
static double salary = 100000;
static final double PI = 3.14;
public static void main(String[] args) {
//局部变量在{}内使用,在{}外使用没有意义 且局部变量必须声明和初始化值
//不建议用int a=1 b=2 c=3;这样的方法写,尽量写成三行
int a = 1;
int b = 1;
int c = 1;
String name="愜宁";
char x = 'x';
double pi = 3.14;
//变量类型 变量名字 =new demo08()
Demo4 demo4 = new Demo4();
System.out.println(demo4.age);
System.out.println(demo4.name);
System.out.println(salary);
System.out.println("=======================");
//常量用final定义 常量名=值
//final double PI = 3.14
//常量名一般使用大写字符!!以及修饰符没有先后顺序
System.out.println(PI);
}
}
变量命名规范
- 常量名一般使用大写字符!!
- 以及修饰符没有先后顺序
- 所有的方法,方法名,类名,要见名知意
- 类成员变量:首字母小写,驼峰原则(即第二个单词开始首字母大写例如someBoy)
- 局部变量:首字母小写,驼峰原则
- 常量:大写,不同单词中间要用下划线分割
- 类名:首字母大写和驼峰原则,即Dome
- 方法名:首字母小写和驼峰原则:main() run()
- 重点是让代码便于阅读
运算符
Java语言支持如下运算符
- 算术运算符:+ ,- ,* ,/ ,% ,++, –
++ --:b=a++是指b=a然后再有a+1 c=++a是指a+1再有c=a
- 赋值运算符:=
- 关系运算符:>,<,>=,<=,==,!=(!就是否的意思!=就是不等于)
- 逻辑运算符:&&,||,!(与 或 非)
- 位运算符:& ,|,^ ,~ ,>> ,<<,>>>
- 条件运算符:?:
- 扩展赋值运算符:+=,-=,*=,/=
Java的scanner
定义
package scanner.base;
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
//等待数据的接收,书写方法:new S +Alt+Enter
Scanner scanner = new Scanner(System.in);
//数据的存储
String str = scanner.nextLine();
System.out.println("输出的内容为:"+str);
//结束该接收
scanner.close();
}
}
注意
-
scanner.后面有两种输入
一种是next,一种是nextLine。
区别如下
next不换行,nextLine会换行
题目
输入多个数字,求其总和和平均数,通过输入非数字来结束输入并输出执行结果
package scanner.base;
import java.util.Scanner;
public class Dome03 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double sum=0;
int m =0;
while (scanner.hasNextDouble()){
//通过循环来判断是否还有输入,并在里面进行求和和统计
double x = scanner.nextDouble();
m++;
sum=sum+x;
}
System.out.println("平均数为:"+(sum/m));
System.out.println("个数的和为"+sum );
scanner.close();
}
}
if语句
与c语言一样
注意
swtch结构结束时要加入break
while循环
定义与c语言是一样的,用法也没有什么区别
for循环
注意:可以写成100.for 表达的含义是
for(i=0;i<=100;i++)
增强for循环
int[] numbers = {1,2,3,4,5}
for(int x:numbers){
sout (x)
}
定义为for(int x: 数组名){}
含义为:将数组里的数以int类型一个一个的排列出来
break&continue
相同点:都是对某次循环进行判断,符合条件则停止此次循环
不同点:break是停止这一整个的循环
continue是停止此次循环,并且马上到循环开头,不会继续下去
方法
方法的定义
//写方法
public static int add(int a,int b){
return a+b;
}
注意:
- public和static是一定要写的 然后就类似于c语言中的函数的写法
- 这里的第一个int指return返回的值的类型
与c的区别:
- 写了static就可以直接引用不用再在开头写函数名称
方法的重载
方法的名字可以相同,但参数列表必须不同
参数列表:指参数的类型,或者数目
例如
public static int max(double num1,double num2){...}
public static int max(int num1,int num2){...}
可变参数
定义:在指定参数类型后加一个省略号(…)
例如
public static void printMax(double...numbers){}
public static void printMax(double a,double...numbers){}
//不合法
public static void printMax(double...numbers,double a){}
**注意:**一个方法只能指定一个可变参数,必须是方法的最后一个参数。任何普通的参数必须是可变参数前声明
递归
举例
如何求阶乘?
public static int f(int a)
{
if(a==1)
{
return a=1;
}
else{
return a=a*f(a-1);
}
}
定义
递归头:什么时候结束(例如上式的f(1))
递归体:如何递归?(a=a*f(a-1))
优点:简化思考
缺点:过多的f(x)会导致占用的内存太多,最后会崩坏
数组
定义
int[] nums; //声明一个数组
nums = new int[10]; //创建一个数组
//给数组元素赋值
for(i=0;i<10;i++)
{Scanner scanner = new Scanner(System.in);
int[i]= scanner.nextInt();
scanner.close();
}
//或者写成
int[] num2 = new int[10];
获取数组长度
c = nums.length
初始化方式
-
静态初始化
//创建+赋值 int[] = {1,2,3,4};
-
动态初始化
int[] b = new int[10]; b[0] = 10;
数组边界
数组下标越界异常
ArraylndexOutOfBoundsException
Tip
- 数组也是对象,数组元素相当于对象的成员变量
数组的使用
public static int[] reverse(int[] b) {
int[] result = new int[b.length];
for (int i = 0 ,j=result.length-1; i < b.length; i++,j--) {
result[j] = b[i];
}
return result;
}
Arrays类讲解
Arrays是一种类方法,我们可以到jdk的帮助文档里查找我们想要的方法
一些比较简单有用的方法
//大学数组元素
Arrays.toString();
//数组进行升序
Arrays.sort();
//数组的填充
Arrays.fill(a,val:x)
//x的含义为填充的数据 a是指填充的数组
对象
什么是面向对象?
本质:以类的方式组织代码,以对象的组织(封装)数据
三大特性
- 封装 理解:
- 继承 理解:
- 多态 理解:
回顾方法及加深
定义:
- 修饰符
- 返回类型
- break&return
- 方法名:驼峰原则以及见名知意
- 参数列表:(参数类型,参数名)
调用:
-
静态方法:在public 后面加了static 调用方式:类名+方法名
用途:在其他代码中引用某个方法 ,通过类名.方法名直接引用就可以了
-
非静态方法 调用方式 new一个新的类 再进行静态方法的调用
用途:在其他代码中引用某个方法,通过实例化这个类来实现
对象类型 对象名 = 对象值
区别:静态方法是和类一起加载的
非静态方法是类实例化之后才存在的
-
形参&实参
**注意点:**形参和实参的值类型一定要相同
-
值传递与引用传递
之后要重点理解
PS:好像很久没更新了,其实是有在学的,只是不常玩博客园,然后今天突然想到就更新了一波,欢迎大家和我交流
最近看到的一张好图///A///