目录
注释
Java注释有三种
-
单行注释 //
-
多行注释 /* 注释 */
-
文档注释 与JavaDoc相互使用 /**文档注释 */
-
注释不会被执行,是给我们写代码的人看的
-
标识符
关键字
java所有的组成部分都需要名字。类名,变量名以及方法名都被成为标识符
标识符的注意点
-
所有的标识符都应该以字母(A-Z或者a-z),美元符($),或者下划线(_)开始
-
首字母之后可以是字母(A-Z或者a-z),美元符($),下划线(_)或者数字的任何字符组合
-
不能关键字作为变量名或者方法名
-
标识符是大小写敏感的
-
合法标识符举例:age,$salary,_value,__1_value
-
非合法的标识符:123abc,-salary,#abc
-
可以使用中文命名,但是一般不建议这样去使用,也不建议使用拼音,很low
数据类型
强类型语言
-
要求变量的使用要严格符合规定,所有的变量都需要先定义才能使用
弱类型语言
-
要求变量的使用符合规定
java的数据类型分为两大类
基本类型(primitive type)
数值类型(八大数据类型)
-
整数类型
-
byte 占1个字节范围:-128-127
-
short占2个字节范围:-32768-32767
-
int占4个字节范围:-2147483648-2147483637
-
long占8个字节范围:-9223372036854775808-9223372036854775807
byte num1 = 10; shrot num2=20; int num3 = 30;//最常用 long num4 = 30L;//Long类型要在数字后面加个L
-
-
浮点数类型
-
float占4个字节
-
double占8个字节
float num5=50.1F;//faoat类型要在数字后面加个F double num6 =3.1415926;
-
-
字符类型
-
char占2个字节
char num7='A';//赋值时只能给一个英文字母或者一个中文字 //字符串 String num8="你好世界";//String不是关键字,是类
-
-
boolean类型 占1位其值只有false 和true
引用类型(reference type)
-
类
-
接口
-
数组
什么是字节
-
位(bit):是计算机内部数据储存数据最小的单位,11001100是一个八位二进制数。
-
字节(byte):是计算机中数据处理的基本单位,习惯上用大写B来表示
-
1B(byte,字节)=8bit(位);
-
字符:是指计算机中使用字母、数字、字和符号
-
1bit表示1位
-
1Byte表示一个字节,1B=8b
-
1024B=1KB
-
1024KB=1M
-
1024M=1G
-
1024G=1TB
数据类型扩展
public class Demo01 {
public static void main(String[] args) {
//整数扩展 进制 二进制0b 十进制 八进制0 十六进制0x
int a = 10;
int b = 010;
int c = 0b10;
int d = 0x10;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println("==================================================");
//=================================================================================================
//浮点数扩展 银行业务怎么表示?
// 不用浮点数进行表示,用BigDecimal(数学工具类)
// float
//double
float F = 0.1F;
double D = 1.0/10;
System.out.println(F==D);//false
System.out.println(F);
System.out.println(D);
float F1=123456789F;
float F2=F1+1;
System.out.println(F1==F2);//true
//上面的结果为什么不一样
//因为 浮点数表示的字长是有限的也是离散的,浮点数会舍入误差(没办法精确的表示),结果只能是一个大约数,接近但不等于
//最好完全避免浮点数进行比较
System.out.println("==================================================");
//=================================================================================================
//字符拓展
//=================================================================================================
char c1 ='a';
char c2 ='中';
System.out.println(c1);
System.out.println((int)c1);//讲字符串类型转换为int类型: 强制转换
System.out.println(c2);
System.out.println((int)c2);
//所有的字符本质还是数字
//char会涉及到 编码 问题
// 编码里有一个 Unicode编码(可以处理各种语言的文字) 占2个字节 最多可以表示65536个字符 2^16=65536(现在不止这些)
// Unicode 里面有一个表 表里面有定义(eg:97=a 65=A)
//会通过Unicode 的编码 用过转义来表示 U0000----UFFFF1
char c3 ='\u0061';
System.out.println(c3);//a
// 转义字符
// eg \t :制表符 \n :换行 ....
//=================================================================================================
// 布尔值扩展
boolean b1=true;
if (b1==true){System.out.println("123");}
if (b1){System.out.println("123");}//两个相等
//Less is more ! 代码要精简易读
}
}
类型转换
-
由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换
低----------------------------------------------------------->高
byte->short->chat->int->long->float->double 为什么小数比整数高,因为小数的优先级一定大于整数
-
运算中,不同类型的数据先转化成为同一类型,然后进行计算
-
强类型转换
-
自动类型转换
public class Basics05 { public static void main(String[] args) { int i =128; byte b =(byte) i;//内存溢出 //强制转换 : (类型)变量名 高---->低 //自动转换 : 什么都不用写 低---->高 System.out.println(b);//-128 ? 因为内存溢出 /*注意点 1.不能对布尔值进行转换 2.不能把对象类型转换成不相干的类型 3.在把高容量转换到低容量的时候,强制转换 4.转换的时候可能存在内存溢出,或者精度问题 */ System.out.println((int)38.9);//输出结果:38 char c='a'; int i2=c +1; System.out.println(i2);//98 System.out.println("======================================================================================"); //常见的问题 //操作比较大的数的时候,注意溢出问题 //JDK7的新特性,数字之间可以用下划线分割(不会被输出) int money = 10_0000_0000; int years = 20; int total = money*years;//输出结果:-1474836480 ,本来改200_0000_00000;是因为int 最大是20亿。计算的时候溢出了 System.out.println(total); long total2 =money*years;// 输出结果:-1474836480,以为long给的是转换后的类型,而这里转换前就出问题了 System.out.println(total2); long total3 = money*(long)years;//输出结果:200_0000_00000 结果对了 因为先把一个数转换成为了Long System.out.println(total3); // L l(有些地方会把小写的l当成1) } }
变量、常量、作用域
变量
-
变量是什么:就是可以变化的量
-
Java是一种强类型的语言,每个变量都必须声明其类型
-
Java变量是程序中最基本的储存单元,其要素包括 变量类型,变量名和作用域
变量的定义
数据类型 + 变量名 = 值; 可以用逗号隔开来声明多个同类型变量(不建议)
int a =10;
注意事项
-
每个变量都有类型,可以使基本类型,也可以是引用类型 基本类型:八大基本类型数据 引用类型:Eg:String
-
变量名必须是合法的标识符
-
变量声明是一条完整的语句,因此每一个声明都必须以分号结束
变量作用域
-
类变量
-
实例变量
-
局部变量
public class Hello{
static int allAge = 0;//类变量
String str = "hello world";//实例变量
public void method(){
int i = 0;//局部变量
}
}
public class Basics06 {
//属性:变量
//类变量(静态变量) 关键字:static
static double salary = 2500;
//实例变量(动态变量):从属于对象(从属于类); 如果不进行初始化,数值类型的默认值为:0 0.0 u000
// 布尔值:默认是false
//除了基本类型,其余的默认值都是 null
String name;
int age ;
//main方法
public static void main(String[] args) {
//局部变量:声明和初始化值 (只能用在此方法,不能用在其他方法)
int c =10;
//声明 初始化值
System.out.println(c);
//使用实例变量
//变量类型 变量名字 = new Basics06();
Basics06 basics06 =new Basics06();
System.out.println(basics06.age);
//类变量
System.out.println(salary);
}
//其他方法
public void method(){
System.out.println(salary);
}
}
常量
-
常量(Constant):初始化(initialize)后不能再改变值!不会变动的值
-
所谓常量可以理解成一种特殊的变量,他的值被设定后,在程序运行过程中不允许被改变
final 常量名 =值;
eg final PI =3.14;
-
常量名一般使用大写
public class Basics0601 {
// static final 修饰符、关键字 不分先后顺序
static final double PI =3.14;
public static void main(String[] args) {
System.out.println(PI);
}
}
变量的命名规范
-
所有变量、方法、类名:见名知意
-
类成员变量:首字母小写和驼峰原则:monthSalary 除了第一个单词小写以外,后面单词的首字母大写
-
局部变量:首字母小写和驼峰原则
-
常量:大写字母和下划线:MAX_VALUE
-
类名:首字母大写和驼峰原则:Man GoodMan
-
方法名:首字母小写和驼峰原则:run() runGodd()
运算符
Java语言支持如下运算符:
-
算数运算符: +,-,*,/,%,++,--
-
赋值运算符: =
-
关系运算符: >, <, >=, <=, ==, !=, instanceof
-
逻辑运算符:&&, ||, !
-
位运算符:&, |, ^, ~, >>, <<, >>>(了解!!!)
-
条件运算符: ?, :
-
扩展赋值运算符:+=,-=,*=,/=
算数运算符
package poerator;
public class Basics07 {
public static void main(String[] args) {
//二元运算符
int a = 10;
int b = 20;
int c = 21;
System.out.println(a+b);// 30 + 相加
System.out.println(a-b);// -20 - 相减
System.out.println(a*b);// 200 * 相乘
System.out.println(a/b);//0 因为a/b 内存溢出了 所以为0
System.out.println(a/(double)b);//0.5 / 相除
System.out.println(c%a);//1 % 取余,模运算 c%a c/a=2.....1
}
}
package poerator;
public class Basics0702 {
public static void main(String[] args) {
long a = 123456789L;
int b = 123;
short c =10;
byte d = 8;
System.out.println(a+b+c+d);// 123456930 Long类型 两个操作或者多个操作中 有一个数为long 那么结果一定是Long类型
System.out.println(b+c+d);// 141 int类型 两个操作或者多个操作中 没有一个数为long 那么结果都为int类型
System.out.println(c+d);// 18 int类型 无论是不是由int类型
// 同理
// 如果有一个数是double 那么结果一定为double类型
}
}
关系运算符
package poerator;
public class Basics0703 {
public static void main(String[] args) {
// 关系运算符返回结果: 正确 错误 布尔型
// 同常跟if一起使用
int a =10;
int b =20;
System.out.println(a>b);//false a不大于b
System.out.println(a<b);//true a小于b
System.out.println(a==b);//false a不等于b
System.out.println(a!=b);//true a不等于b
int c =21;
}
}
自增 自减
package poerator;
public class Basics08 {
public static void main(String[] args) {
// ++ -- 自增 自减 一元运算符
// a++ a=a+1;
//输出结果不同是因为时机不同
int a =1;
int b = a++;//执行完这行代码:先给b赋值,再自增
//a=a+1;
System.out.println(a);
//a=a+1;
int c = ++a;//执行完这行代码,先自增,再给c赋值
System.out.println(a);
System.out.println(b);
System.out.println(c);
//幂运算 2^3=8
double pow=Math.pow(3,3);//幂运算
System.out.println(pow);
double w =Math.abs(-2);//绝对值
System.out.println(w);
}
}
逻辑运算符
package poerator;
public class Basics09 {
public static void main(String[] args) {
// &&(与) ||(或) !(非)
boolean a = true;
boolean b = false;
System.out.println("a&&b:"+(a&&b));//逻辑与运算:两个变量都为真,结果才为真;
System.out.println("a||b:"+(a||b));//逻辑或运算:两个变量有一个为真,则结果为真;
System.out.println("!(a&&b:)"+!(a&&b));//如果是真,则为假。如果为假,则为真;
//短路运算
int c =5;
boolean d = (c<4)&&(c++<4); // 因为逻辑与运算,只要有一个假就会输出结果:假 而当它得到c<4是假的,就不会去运行c++<4
System.out.println(d);//false // 俗称短路运算
System.out.println(c);
int e = 5;
boolean f = (e>4)||(e--<4); // 因为逻辑或运算,只要有一个真就会输出结果:真 而当它得到c>4是真的,就不会去运行c--<4
System.out.println(e);//true // 俗称短路运算
System.out.println(f);
}
}
位运算符
package poerator;
public class Basics09 {
public static void main(String[] args) {
// &&(与) ||(或) !(非)
boolean a = true;
boolean b = false;
System.out.println("a&&b:"+(a&&b));//逻辑与运算:两个变量都为真,结果才为真;
System.out.println("a||b:"+(a||b));//逻辑或运算:两个变量有一个为真,则结果为真;
System.out.println("!(a&&b:)"+!(a&&b));//如果是真,则为假。如果为假,则为真;
//短路运算
int c =5;
boolean d = (c<4)&&(c++<4); // 因为逻辑与运算,只要有一个假就会输出结果:假 而当它得到c<4是假的,就不会去运行c++<4
System.out.println(d);//false // 俗称短路运算
System.out.println(c);
int e = 5;
boolean f = (e>4)||(e--<4); // 因为逻辑或运算,只要有一个真就会输出结果:真 而当它得到c>4是真的,就不会去运行c--<4
System.out.println(e);//true // 俗称短路运算
System.out.println(f);
}
}
package poerator;
public class Basics0902 {
public static void main(String[] args) {
/* 位运算符 效率极高
& (与) |(或) ^(异或) ~(取反) <<(左移) >>(右移)
A = 0011 1100
B = 0000 1101
-----------------------------------------------------------------------------
A&B = 0000 1100 任何二进制和0进行&运算,结果为0;和1进行&运算,结果是原值
A|B = 0011 1101 任何二进制和0进行|运算,结果是原值;和1进行|运算,结果为1
A^B = 0011 0001 任何相同二进制进行^运算,结果为0;不相同进行^运算,结果为1
~B = 1111 0010
------------------------------------------------------------------------------
<< >> 引出面试题
面试题:2*8怎么运算最快 2*8=16 2*2*2*2=16
<< 数字 *2
>> 数字 /2
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 1000 8
0001 0000 16
*/
System.out.println(2<<3);//左移三位
}
}
扩展赋值运算符
package poerator;
public class Basics10 {
public static void main(String[] args) {
int a = 20;
int b = 10;
int c = a+=b;// a+=b a=a+b
int d = a-=b;// a-=b a=a-b
int e = a*=b;// a*=b a=a*b
int f = a/=b;// a/=b a=a/b
System.out.println(c);
System.out.println(d);
System.out.println(e);
System.out.println(f);
// 字符串连接符 + 当+两侧有String类型 这个+就会变成连接符,并且会把后面的+也变成连接符
System.out.println(""+a+b);
System.out.println(a+b+" "+a+b+":");
}
}
条件运算符(三元运算符)
package poerator;
public class Basics1002 {
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提供了包机制,用于区别类名的命名空间
-
包语句的语法格式为:
package pkg1[.pkg2[.pkg3...]];eg: package com.chang.poerator;
-
一般利用公司域名倒置作为包名; eg:com.baidu.www
-
为了能够使用某一包的成员,我们需要在Java程序中明确导入改包。使用“import”语句可完成此功能
import package1[pkg2...].(classname|*);eg: import java.util.Date;
package com.chang.poerator; import java.util.Date;//导入包 import com.chang.basics.*;//导入包下所有的类 public class Basics1002 { public static void main(String[] args) { Date } }
JavaDoc
-
javadoc命令是用来生成自己的API文档
jdk帮助文档:https://docs.oracle.com/javase/8/docs/api/
-
参数信息
-
@author 作者名
-
@version 版本号
-
@since 指明需要最早使用的JDK版本
-
@param 参数名
-
@return 返回值情况
-
@throws 异常抛出情况
-
-
package com.chang.basics;
/**
* @author chang
* @version 1.0
* @since 1.8
*
*/
public class Doc {
/**
*
* @param name
* @return
* @throws Exception
*/
public String test(String name) throws Exception{
return name;
}
//通过命令行 cmd->javadoc 参数 java文文件
//javadoc -encoding UTF-8 -charset UTF-8 Doc.java
}