狂神说Java(零基础) 基础部分
1.注释、标识符、关键字
1.1 注释
平时我们编写代码,在代码量比较少时,我们还可以看懂自己写的,但是当项目结构一旦复杂起来,我们就需要用到注释了。注释并不会被执行,是给我们写代码的人看的。书写注释是一个非常好的习惯,平时写代码就一定要注意规范。
Java中的注释有三种:
-
单行注释://后跟文字,只能写单行
//输出一个Hello,World! -
多行注释:/* 中间写文字,可写好几行 */
/*中间写注释,可写几行 我是多行注释 我是多行注释 */ -
文档注释:/** 中间写文字 */
/** * @Description HelloWorld * @Author 狂神说Java */
1.2 标识符、关键字
-
关键字
图片来自于CSDN,点这里跳转出处

-
Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。标识符注意点如下:
-
所有的标识符都应该以字母(A-Z或者a-z),美元符($)、或者下划线(_)开始
-
首字母之后可以是字母(A-Z或者a-z),美元符($)、下划线(_)或数字的任何字符组合
-
不能使用关键字作为变量名或方法名
-
标识符是大小写敏感的,比如Man和man指代不同。
-
合法标识符举例:age、$salary、_value、__1_value
-
非法标识符举例:123abc、-salary、#abc
-
可以使用中文命名,但一般建议使用英文
public static void main(String[] args) { String 王者荣耀 = "最强王者"; System.out.println(王者荣耀); }
-
2.数据类型
2.1 Java数据类型
-
强类型语言。Java是一种强类型语言,要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用。强类型语言特点:安全性高,但速度慢。
-
弱类型语言。例:VB、JavaScript
-
Java的数据类型分为两大类(图片来自CSDN,点这里跳转出处)
- 基本类型(primitive type)
- 引用类型(reference type)

//八大基本数据类型
//整数
int num1 = 10; //最常用,int占4个字节范围:-2147483648-2147483647
byte num2 = 20; //byte占1个字节范围:-128~127
short num3 = 30; //short占2个字节范围:-32768~32767
long num4 = 30L;
//Long类型要在数字后面加个L,占8个字节范围:-9223372036854775808~9223372036854775807
//小数:浮点数
float num5 = 50.1F; //float类型要在数字后面加个F
double num6 = 3.1415926;
//字符
char name='请'; //字符是一个字,写'请客'会报错
String namea = '请客'; //字符串,String不是关键词,是类
//布尔值,占1位,只有True和False两个值
boolean flag = true;
boolean flag2 = False;
2.2 什么是字节
-
位(bit):是计算机 内部数据 储存的最小单位,11001100是一个八位二进制数
-
字节(byte):是计算机中 数据处理 的基本单位,习惯上用大写B来表示。1B(byte,字节) = 8bit(位)
-
字符:是指计算机中使用的字母、数字、字和符号
转换关系:
-
1bit表示1位
-
1Byte表示一个字节 1B=8b
-
1024B=1KB
-
1024KB=1M
-
1024M=1G
-
-
电脑的32位和64位的区别是什么?
首先,它们支持的内存不同,32位的操作系统最多支持4G的内存,但是64位系统支持可以支持4G、8G、16G、32G、 64G、128G、256G等。其次,它们支持的处理器不同,64位的操作系统支持64位和32位的处理器,而32位的系统却不能完全支持64位的处理器。另外,它们支持的软件不同,64位系统支持32位和64位软件,32位系统仅支持32位软件。不仅如此,32系统和64位系统处理数据的能力也不一样,理论上64位的系统会比32位快1倍。并且在系统体积方面,64位系统比32位系统大得多。
原文出自:点这里跳转.
3.数据类型扩展
3.1 浮点数拓展
//二进制:0b;八进制:0;十进制;十六进制:0x
int i = 10; //十进制
int i2 = 010; //八进制
int i3 = 0x10; //十六进制,0-9,A-F
/*
i = 10;
i2 = 8;
i3 = 16
*/
思考:银行业务用什么表示?可不可以使用double、float?
float f = 0.1f; //0.1
double d = 1.0/10; //0.1
System.out.println(f==d);
System.out.println(f);
System.out.println(d);
/*
输出结果:
False
0.1
0.1
*/
float d1=23131312312312313f;
float d2 =d1 + 1;
System.out.println(d1==d2);
//输出结果:True
所以,答案是不可以。因为浮点数存在舍入误差,会导致接近但不等于的情况,最好完全避免使用浮点数进行比较。银行业务一般使用 BigDecimal 数学工具类。
3.2 字符扩展
char c1 = 'A';
char c2 = '中';
System.out.println(c1);
System.out.println((int)c1);
system.out.println(c2);
System.out.println((int)c2);
/*
输出结果:
A
65
中
20013
*/
所有字符本质上还是数字。如常用的Unicode编码。每个数字有对应的字符。
char c3='\u0061';
System.out.println(c3);
/*
输出结果:
a
*/
/*转义字符
\t 制表符
\n 换行
……
*/
以下代码的结果要从内存分析:
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);
/*
输出结果:
false
true
*/
3.1 布尔值扩展
boolean flag = true;
/*以下两者等价:
Less is More!
代码要精简易读
*/
if (flag==ture){}
if (flag){}
4.类型转换
- 由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换。小数的优先级一定高于整数。
/*
低 -------------------------------------------------> 高
byte,short,char ---> int --->long --->float ---> double
*/
int i=128;
byte b = (byte)i;
System.out.println(i);
System.out.println(b);
/*
输出结果:
128
-128
*/
存在的问题:内存溢出。因为byte最高到127,而i=128.
-
运算中,不同类型的数据先转化为同一类型,然后进行运算。
-
强制类型转换
- 格式:(类型)变量名
- 高-->低。例如从double转换为int
-
自动类型转换
- 低-->高。例如从int转换为double
-
-
注意点:
-
1.不能对布尔值进行转换;
-
2.不能把对象转换为不相干的类型;
-
3.在把高容量转换到低容量的时候,强制转换;
-
4.转换的时候可能存在内存溢出,或者精度问题
System.out.println((int)23.7); System.out.println((int)-45.89f); /* 输出结果: 23 -45 */char c = 'a'; int d = c+1; System.out.println(d); System.out.println((char)d); /* 输出结果: 98 b *///操作比较大的数的时候,注意溢出问题 //JDK7新特性,数字之间可以用下划线分割 int money = 10_0000_0000; int years = 20; int total = money*years; System.out.println(total); long total2 = money*years; System.out.println(total2); long total3 = money*((long)years); System.out.println(total3); /* 输出结果: -1474836480 -1474836480 20000000000 */
-
思考:为什么用long也不行?
因为money和years都是int,先做了money*years的计算,得到的仍然是int:-1474836480,然后再转换为long,自然还是得到了-1474836480.所以说,转换之前已经存在问题了.
解决办法:先把一个数转换为long
注意:小写的字母l易和数字1混淆,尽量用大写的L
5.变量、常量
5.1 变量
-
变量是什么:就是可以变化的量。Java是一种强类型语言,每个变量都必须声明其类型。Java变量是程序中最基本的存储单元,其要素包括变量名、变量类型和作用域
type varName [=value] [{,varName[=value]}]; //数据类型 变量名 = 值;可以使用逗号隔开来声明多个同类型变量 int a,b,c; int a=1,b=2,c=3; //可以这么写,但不建议 //最好分开来写,注重程序可读性 int a = 1; int b = 2; int c = 3; -
变量作用域:类变量、实例变量、局部变量
public class Variable{ static int allClicks=0; //类变量 String str="hello world"; //实例变量 public void method(){ int i = 0; //局部变量 } }public class Hello { //类变量 static static double salary = 2500; //实例变量:从属于对象;如果不自行初始化,就会输出默认值 //所有的数值类型,默认为0或0.0 //布尔值:默认是false //除了基本类型,其余的默认值都是null String name; int age; //main方法 public static void main(String[] args) { //局部变量:必须声明和初始化值 int i = 10; System.out.println(i); Hello Hello= new Hello(); System.out.println(Hello.age); } //其他方法 public void add(){ } } -
注意事项:
- 每个变量都有类型,类型可以是基本类型,也可以是引用类型。
- 变量名必须是合法的标识符
- 变量声明是一条完整的语句,因此每一个声明都必须以分号结束
-
变量的命名规范:
- 所有变量、方法、类名:见名知意
- 类成员变量:首字母小写和驼峰原则:monthSalary;除了第一个单词以外,后面的单词首字母大写:lastname ----> lastName
- 局部变量:首字母小写和驼峰原则
- 常量:大写字母和下划线:MAX_VALUE
- 类名:首字母大写和驼峰原则:Man,GoodMan
- 方法名:首字母小写和驼峰原则:run(),runRun()
5.2 常量
-
常量(Constant):初始化(initialize)后不能再改变值。即不会变动的值。所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。
final 常量名=值; final double PI=3.14; -
常量名一般使用大写字符
public class Hello { final static double PI = 3.14; //static final double PI = 3.14; //static是修饰符,不存在先后顺序 public static void main(String[] args) { System.out.println(PI); } }
6.运算符
-
Java语言支持如下运算符:
- 算术运算符:+,-,*,/,%(取余,模运算),++,--
- 赋值运算符:= (a=10,念作把10赋值给a)
- 关系运算符:>,<,>=,<=,==(等于),!=instanceof (不等于)
- 逻辑运算符:&&(与),||(或),!(非)
- 位运算符:&,|,^,~,>>,<<,>>>
- 条件运算符: ?:
- 扩展赋值运算符:+=,-=,*=,/=
-
Ctrl+D:复制当前行到下一行
package operator; public class Demo01 { public static void main(String[] args) { //二元运算符 int a = 10; int b = 20; int c = 25; int d = 25; System.out.println(a+b); System.out.println(a-b); System.out.println(a*b); System.out.println(a/(double)b); /* System.out.println(a/b); 会导致输出结果为0,因为a/b的结果为0.5,但a和b均为int,结果也应为int,四舍五入得0 */ } }package operator; public class Demo02 { public static void main(String[] args) { long a = 123123123123123L; int b = 123; short c = 10; byte d = 8; System.out.println(a+b+c+d); //Long System.out.println(b+c+d); //int System.out.println(c+d); //int //因为不同类型混合运算无论是赋值还是运算都是向最高位转 } }package operator; public class Demo03 { public static void main(String[] args) { //关系运算符返回的结果:正确,错误 布尔值 int a = 10; int b = 20; int c = 22; //取余,模运算 System.out.println(c%a); System.out.println(a>b); System.out.println(a<b); System.out.println(a==b); System.out.println(a!=b); } }package operator; public class Demo04 { public static void main(String[] args) { //++ -- 自增,自减 一元运算符 int a = 3; int b = a++; //a++ a = a+1 System.out.println(b); System.out.println(a); /*输出结果: 3 4 */ //说明b = a++是先给b赋值,a再自增 int c = ++a; System.out.println(c); System.out.println(a); //++a a = a+1 /* 输出结果: 5 5 */ //说明b = ++a是a先自增,再给b赋值 //幂运算 2^3 = 2*2*2 = 8,但是Java中用Math来进行幂运算 //很多运算,我们会使用一些工具类来操作 double pow = Math.pow(2,3); System.out.println(pow); } }package operator; //逻辑运算符 public class Demo05 { public static void main(String[] args) { //与(and) 或(or) 非(取反) boolean a = true; boolean b = false; System.out.println("a && b: "+(a&&b)); //逻辑与运算:两个变量都为真,结果才为true System.out.println("a || b: "+(a||b)); //逻辑或运算:两个变量有一个为真,则结果才为true System.out.println("!(a && b): "+!(a&&b)); //如果是真,则变为假,如果是假则变为真 /* 短路运算:假设前面是错的,就不执行后面的了。 如下代码,若执行了后面的,则c++=6,但是输出c时仍为5, */ int c = 5; boolean d = (c<4)&&(c++<4); System.out.println(d); System.out.println(c); } } /* 输出结果: a && b: false a || b: true !(a && b): true false 5 */package operator; public class Demo06 { /* A = 0011 1100 B = 0000 1101 A&B = 0000 1100 上下对应,上下均为1该位才能取1,只要有一个为0或者全部为0就取0 A|B = 0011 1101 上下对应,上下只要有一位为1就取1,否则均为0才能取0 A^B = 0011 0001 上下对应,上下相同取0,上下不相同取1 ~B = 1111 0010 B取反 */ /* 2*8 = 16怎么算最快? << 左移 >> 右移 箭头往哪指,就是往哪移 << 左移过程(左移相当于乘2,则右移相当于除以2): 0000 0000 0 0000 0001 1 0000 0010 2 0000 0100 4 0000 1000 8 0001 0000 16 */ public static void main(String[] args) { System.out.println(2<<3); } } /* 输出结果: 16 */package operator; public class Demo07 { public static void main(String[] args) { int a = 10; int b = 20; /* a+=b; a-=b; 可以这么写,但不建议这样 */ System.out.println(a); System.out.println(a+b); //+:字符串连接符 //当连接时只要前面有一个为字符串类型,就会把其他的都转换为字符串再连接 System.out.println(""+a+b); /*当连接时这个为字符串的类型在后面时: 前面的不受影响不会变为字符串,在字符串后面的会受影响*/ System.out.println(a+b+""); } } /* 输出结果: 10 30 1020 30 */package operator; //三元运算符 public class Demo08 { public static void main(String[] args) { //x ? y : z //如果x==true,则结果为y,否则结果为z //必须掌握 int score = 80; String type = score <60 ? "不及格" : "及格"; System.out.println(type); } } /* 输出结果: 及格 */ -
Java运算符优先级(我就不复制粘贴了):点这里跳转
7.包机制、JavaDoc
7.1 包机制
-
为了更好地组织类,Java提供了包机制,用于区别类名的命名空间
-
包就相当于一个文件夹
-
包语句的语法格式为:
package pkg1[.pkg2[pkg3…]]; -
一般利用公司域名倒置作为包名
-
为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包。使用"import"语句可完成此功能
import package1[.package2…].(classname|*) -
可以去搜一下《阿里巴巴开发手册》
7.2 JavaDoc
-
可以去搜一下JDK帮助文档
-
javadoc命令是用来生成自己API文档的
-
参数信息
- @author 作者名
- @version 版本号
- @since 指明需要最早使用的jdk版本
- @param 参数名
- @return 返回值情况
- @throws 异常抛出情况
-
package com.kuang.base; /** * @author :Kuangshen * @version :1.0 * @since:1.8 */ public class Doc { String name; /** * @author * @param name * @return * @throws Exception */ public String test(String name) throws Exception{ return name; } -
右键Doc文件(就是上述代码保存后的文件),选择Open in Explorer,在文件夹中打开,在该文件夹地址前输入cmd并空格后回车,在cmd中输入:
javadoc -encoding UTF-8 -charset UTF-8 Doc.java

会发现在原文件中多了很多东西:

点击index.html,可以查看生成的东西,当然,现在里面内容基本上是空的。

浙公网安备 33010602011771号