基础语法
注释
-
单行注释
//
只能注释一行文字
-
多行注释
/*注释*/
可以注释一段文字
- 文档注释
注释并不会执行,是给我们写代码的人看的,书写注释是一个良好的习惯
数据类型
-
强类型语言
要求变量的使用严格符合规范,所有的变量都必须先定义才能使用
-
弱类型语言
-
Java的数据类型分为两大类
-
基本类型(primitive type)
1.数值类型
a.整数类型:byte占1个字节
short占2个字节
int 占4个字节
long 占8个字节
b.浮点类型:float占4个字节
double占8个字节
c.字符类型:char占2个字节
-
boolean类型:占1位其只有 true和false两个
public class Demo02 { public static void main(String[] args) { //八大基本数据类型 //1.整数 int num1 =10; byte num2 = 20; short num3 =30; long num4 = 30L;//Long类型要在数字后面加个L //2.小数;浮点数 float num5 = 50.1F;//Lfloat类型要在数字后面加个F double num6 = 3.14159263333333333333; //字符 char name ='叶';// ''内只能是一个字可以字母或者汉字 //字符串,String不是关键字,类 //String name1 = "中国"; //布尔值 (是非) boolean flag = true; //boolean flag1 = false; } }
数据类型拓展以及面试题讲解
public class Demo03 { public static void main(String[] args) { //整数拓展 二进制0b 十进制 八进制0 十六进制0x(小写x) int i = 10; int i2 =010; //八进制0 int i3 = 0x10; //十六进制0x 0-9 A-F System.out.println(i); System.out.println(i2); System.out.println(i3); System.out.println("==================================================="); //====================================================================================================== //浮点数扩展 //====================================================================================================== //float; //doudle float a = 0.1f; //0.1 double b= 1.0/10; //0.1 System.out.println(a==b); // System.out.println(a==b);执行结果为 false float d1 = 21545421245215f; float d2 = d1+1; System.out.println(d1==d2); //执行结果为true //说以得出结论 浮点:有舍入误差 无法精确计算 (接近但不等于)少用浮点数进行比较 System.out.println("==================================================="); //====================================================================================================== //字符拓展 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);//强制转换(这里把字符串转换成int) System.out.println("==================================================="); //所有的字符,本质还是数字 (比如中=20013 a=97) 都为Unicode表的编码 //比如: char c3 = '\u0061'; System.out.println(c3);//输出为a(\u0061 Unicode表编码为a) //转义字符 // \t 制表符(空格) // \n 换行 // \ 等等 System.out.println("21\tsuga");//输出后为21 suga System.out.println("21\nsuga");//输出为21 换下一行suga System.out.println("==================================================="); // String sa = new String(original:"21suga"); // String sb = new String(original:"21 suga"); System.out.println("==================================================="); //目前上段写不出来 String sa = "hello world"; String sc = "hello world"; System.out.println(sa==sc); //布尔值扩展 boolean falag =true; if (falag==true){}//新手 if (falag){}//老手 //Less is More! 代码要精简易读 } }
-
引用类型
-
类型转换
-
由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换
-
运算中,不同类型的数据先转换为同一类型,然后进行运算。
-
强制类型转换
低————————————————————————高
byta,short,char->int->long->float->doubke
-
自动类型转换
高————————————————————————低
import java.sql.SQLOutput; public class Demo04 { public static void main(String[] args) { int i =129; byte b = (byte)i;//内存溢出输出为-127 //强制转换 (类型)变量 高--低 //自动转换 低--高 double c= i; System.out.println(c); System.out.println(i); System.out.println(b); /* 注意点: 1.他不能对布尔值进行转换 2.不能把对象类型转换成不相干的类型 3.在把高容量转换到低容量的时候(使用强制转换)低到高:反之 4.转换的时候可能存在内存溢出,或者精度问题! */ System.out.println("====================================================="); System.out.println((int)23.7);//输出为23 System.out.println((int)-54.7154545f);//输出为-54 System.out.println("====================================================="); int money = 10_0000_0000; int years = 20; int total = money*years; System.out.println(total);//输出为-1474836480,计算内存溢出 long total2= money*years;//输出为-1474836480,计算内存溢出 (在money*years时就已经溢出了) long total3 = money*((long)years);//输出为20000000000,正确 System.out.println(total2); System.out.println(total3); } }
变量-常量
- 变量
- 变量是什么:就是可以变化的量!
- Java是一种强类型语言,每个变量都必须申明其类型。
- Java变量是程序中最基本的储存单元,其要素包括变量,变量类型和作用域
数据类型–表变量名=值; (可以使用逗号隔开声明多个同类型变量)
-
注意事项
-
每个变量都有类型,类型可以是基本类型,也可以是引用类型
-
变量命必须是合法的标识符。
-
变量声明是一条完整的语句,因此每个声明都必须以分号结束。
public class Demo05 { public static void main(String[] args) { String name= "suga"; char x = 'X'; double p1 =3.14; } }
-
变量的作用域
1.类变量
2.实例变量
3.局部变量
public class Demo08 { //属性:变量 //类变量 static static double salary =2500; //实例变量:从属于对象;如果不自行初始化,他会变成这个类型的默认值 0 0.0 u0000 //布尔值:默认是false //除了基本类型,其余的默认值都是mull; String name; int age; //main 方法 public static void main(String[] args) { //局部变量:必须声明和初始化值 int i = 10; System.out.println(i); //变量类型 变量名字= new Demo08(); Demo08 demo08 =new Demo08(); System.out.println("==============================================="); System.out.println(demo08.age); System.out.println(demo08.name); //类变量 static System.out.println(salary); } //其他方法 public void add(){ } }
-
-
-
常量
-
常量(Constant):初始化(initialize)后不能再改变值!不会动的值。
-
所谓常量可以理解为一种特殊的变量,他的值被设定后,在程序运行过程中不允许被改变。
fianal 常量名=值;
final double PI=3.14;
-
常量名一般一般使用大写字符
public class Demo09 { //修饰符,不存在先后顺序 static final double PI =3.14; final static double P2 =3.14; public static void main(String[] args) { System.out.println(PI); System.out.println(P2); } }
(final代表常量,double代表数据类型,static代表类变量)
-
-
变量的命名规范
-
所有变量,方法,类名:见名知意
-
类成员变量:首字母小写和驼峰原则:monthSalaryc
除了第一个单词以外,后面的单词首字母大写
-
局部变量:首字母小写和驼峰原则
-
常量:大写字母和下划线:MAX_VALUE
-
类名:首写字母大写和驼峰原则;Man, GoodMan
-
方法名:首字母大写和驼峰原则:run(), runRun()
-
运算符
Java 语言支持如下算符:
-
算术运算符:+,-,*,/,%,++,–
-
赋值运算符:=
-
关系运算符:>,<,>=,<=,==。!= instannceof
-
逻辑运算符:&&,||,!
-
位运算符:&,|,^,~,>>,<<,>>>
-
条件运算符?:
-
扩展赋值运算符:+=,-=,*=,/=
public class Demo01 { public static void main(String[] args) { //二元运算符 //Ctrl+D: 复制当前行到下一行 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); } }
public class Demo02 { public static void main(String[] args) { long a = 123_123_123_123_123L; 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);//ine System.out.println((double) c+d); //扩展:单词cast 转换 //如果有long 转换的为long 如果有int转换为int } }
package operator; public class Demo03 { public static void main(String[] args) { //关系运算符返回的结果:正确,错误 (布尔值表示) int a = 10; int b = 20; int c = 21; //取余,模运算 System.out.println(c%a);//计算方式为:c / a 21/10 = 2....1 System.out.println(a>b);//false System.out.println(a<b);//true System.out.println(a==b);//false System.out.println(a!=b);//true } }
-
自增自减运算符,初识Math类
package operator;
public class Demo4 {
public static void main(String[] args) {
int a = 100;
int b = a++;//执行完这行代码,先给b赋值,a再自增 (已知a=3 把a赋值给b a+1)
// a = a + 1;
System.out.println(a);
System.out.println("=================================================");
//a = a + 1;
int c = ++a;//执行完这行代码前,先自增,再给b赋值(已知a=3 a+1 再给b赋值 "目前a=4 因为 int b = a++;“
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println("=================================================");
//幂运算
//举例:2^3=2*2*2
//很多运算,我们会使用一些工具类来操作!
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(若是两个为假结果为false) System.out.println("!(a && b):"+!(a && b));//如果是真,则为假,如果是假,则为真 } } System.out.println("============================================================="); 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(若是两个为假结果为false) System.out.println("!(a && b):"+!(a && b));//如果是真,则为假,如果是假,则为真 //短路运算 int c =5; boolean d = (c<5)&&(c++<4); System.out.println(d); System.out.println(c);//输出为5因为 c++>4 System.out.println("============================================================="); int c1 =5; boolean d1 = (c1<8)&&(c1++<8); System.out.println(d1); System.out.println(c1); } }
-
位运算符
package operator; public class Demo06 { public static void main(String[] args) { /* 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 (取反) 2*8 = 16 2*2*2*2 效率低 效率高 << *2 >> /2 0000 0000 0 0000 0001 1 0000 0010 2 0000 0011 3 0000 0100 4 0000 0101 5 0000 0110 6 0000 0111 7 0000 1000 8 0000 1001 9 0000 1010 10 0000 1011 11 0000 1100 12 0000 1101 13 0000 1110 14 0000 1111 15 0001 0000 16 */ System.out.println(2<<3); } }
-
-
Java中的<< 和 >> 和 >>> 详细分析
注:以下数据类型默认为byte-8位
左移时不管正负,低位补0
正数:**r = 20 << 2**
20的二进制补码:**0001 0100**
向左移动两位后:**0101 0000**
结果:**r = 80**
负数:**r = -20 << 2**
-20 的二进制原码 :**1001 0100**
-20 的二进制反码 ***\*:\**1110 1011**
-20 的二进制补码 :**1110 1100**
左移两位后的补码:**1011 0000**
反码:**1010 1111
**
原码:**1101 0000
**
结果:**r = -80
**
**>>表示右移,如果该数为正,则高位补0,若为负数,则高位补1;**
注:以下数据类型默认为byte-8位
正数:**r = 20 >> 2**
20的二进制补码:**0001 0100**
向右移动两位后:**0000 0101**
结果:**r = 5**
负数:**r = -20 >> 2**
-20 的二进制原码 :**1001 0100**
-20 的二进制反码 **:1110 1011
**
-20 的二进制补码 :**1110 1100**
右移两位后的补码:**1111 1011**
反码:**1111 1010**
原码:**1000 0101**
结果:**r = -5**
**>>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0**
正数: **r = 20 >>> 2**
的结果与 r = 20 >> 2 相同;
负数: **r = -20 >>> 2**
注:以下数据类型默认为int 32位
-20:源码:**10000000 00000000 00000000 00010100**
反码:**11111111 11111111 11111111 11101011**
补码:**11111111 11111111 11111111 11101100**
右移:**00111111 11111111 11111111 11111011**
结果:**r = 1073741819**
-
三元运算符,及小结
package operator; public class Demo07 { public static void main(String[] args) { int a = 10; int b = 20; a+=b; //a =a+b a-=b; //a =a-b System.out.println(a); //字符串连接符 +,string System.out.println(a+b); System.out.println(""+a+b); } }
-
三元运算符
package operator; import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput; //三元运算符 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提供了包机制,用于区别类的命名空间。
-
包语句的语法格式为:
-
package pkg1[. pjg2[. pkg3…]];
//包机制 下段自动加的 package com.suga.operator; public class Demo09 { public static void main(String[] args) { System.out.println(); } }
-
-
一般利用公司域名倒置作为包名;
如:www.baidu.com 倒置:com.baidu.www
-
为了能够是由某一个包的成员,我们需要在java程序中明确导入该包。使用"import"语句可完成此功能
-
导入语法
import package1[.package2…] . (classname|*);
-
package com.suga.operator;
//输入Date 自动导入该包
import java.util.Date;
public class Demo09 {
public static void main(String[] args) {
//输入Date
Date
System.out.println();
}
}
- 导入自己写的其他类
package com.suga.operator;
//导入时名字不要一样
import com.suga.base.HelloWorld;
public class Demo09 {
public static void main(String[] args) {
System.out.println();
}
}
-
扩展
*为通配符,目录下所有类都导入
import com.suga.base.*;
JavaDoc文档
-
javadc命令是用来生成自己的API文档
-
参数信息
-
@author 作者名
-
@version 版本号
-
@since 是指需要最早时间的jdk版本
-
@param 参数名
-
@return 返回值情况
-
@throws 异常抛出情况
-
package com.suga.base; public class Doc { /** * @author Suga * @version 1.0 * @since 1.8 */ String name; /** * @author Suga * @param name * @return * @throws Exception */ public String test(String name) throws Exception { return name; } }
-
javadoc -encoding(编码) UTF-8(编码格式)-charset(字符级) UFT-8 Doc.java
javadoc -encoding UTF-8 -charset UFT-8 Doc.java
-
IDEA生成Java Doc文档
1.首先选择需要生成文档的代码
2.点击Tools,选择Generate JavaDoc…
3.选择要生成的项目
4.选择生成位置
5.输入生成语言-encoding utf-8 -charset utf-8