一元运算符
Java基础语法
一、注释、标识符、关键字
注释
Java中的注释有三种:
单行注释
多行注释
文档注释
public class Hello_World {
// 两个斜杠就是一个单行注释
// 多行注释会在/* */之间写文字
/* 这
是
一
个
多行注释
*/
// JavaDoc:文档注释,是以/**开头以*/结尾并且每一行开头都有一个*
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
标识符
Java所有组成部分都需要名字。类名、变量名以及方法名都被称为标识符
前文代码中Hello_World是类名,main是方法名
注意:
- 所有的标识符都应该以字母(A-Z或者a-z)、美元符($)、或者下划线(-)开始
- 首字符之后可以是字母(A-Z或者a-z)、美元符($)、下划线(-)或者数字的任何字符组合
- 不能使用关键字作为变量名或者方法名
- 标识符是大小写敏感的
- 一般建议使用英文去命名
二、数据类型
Java是强类型语言,要求变量的使用要严格符合规定,所变量都必须先定义后才能使用
Java的数据类型分为两大类
基本类型:
-
数值类型
整数类型:
byte占一个字节范围
short占两个字节范围
int占四个字节范围
long占八个字节范围
浮点类型:
float占四个字节
double占八个字节
字符类型:
char占两个字节
-
boolean类型
占一位,其值只有ture和false两个
public class Demo01 { public static void main(String[] args) { // 八大基本数据类型 //整数 int num1 = 10;//最常用 byte num2 = 100;//byte最大不能超过127 short num3 = 30; long num4 = 40L;//long类型要在数字后面加一个L //浮点数 float num5 = 50.2F; double num6 = 3.14159263215889456134564; //字符 char name = 'a'; //字符串 String name1 = "魏博伦";//String不是关键字而是一个类 //布尔值 boolean flag = true; boolean flag1 = false; } }
public class Demo02 { public static void main(String[] args) { //整数拓展 进制 二进制0b 十进制 八进制0 十六进制0x int i = 10; int i1 = 0b10;//二进制0b开头 int i2 = 010;//八进制0开头 int i3 = 0x10;//十六进制0x开头 System.out.println(i); System.out.println(i1); System.out.println(i2); System.out.println(i3); System.out.println("================================"); //============================================================== //浮点数拓展 银行业务怎么表示钱--->BigDecimal(类) //float 有限 离散 舍入误差 结果无法精确表示只是一个大约数 接近但不等于 //double //所以最好完全避免使用浮点数进行比较 float f = 0.1f;//0.1 double d = 1.0/10;//0.1 System.out.println(f==d);//判断d和f是否相等 System.out.println(f); System.out.println(d); float f1 = 1212313212121f; float f2 = f1 + 1; System.out.println(f1==f2); System.out.println("================================"); //============================================================== //字符拓展 char c1 = 'a'; char c2 = '中'; System.out.println(c1); System.out.println((int) c1);//强制类型转换 System.out.println(c2); System.out.println((int) c2); //所有的字符本质还是数字 //Unicode表,Unicode编码占了两个字节,0-65536个(现在更多) //从U0000到UFFFF char c = '\u0069'; System.out.println(c); //常见的转义字符 // \t 制表符 // \n 换行符 System.out.println("Hello\tWorld!"); System.out.println("Hello\nWorld!"); System.out.println("================================"); //============================================================== //骚操作 String s1 = new String("Hello World!"); String s2 = new String("Hello World!"); System.out.println(s1 == s2); String s3 = "Hello World!"; String s4 = "Hello World!"; System.out.println(s3 == s4); //从内存分析 System.out.println("================================"); //============================================================== //布尔值拓展 Boolean flag = true; if(flag){ System.out.println("flag = true"); } } }
引用类型:
- 类
- 接口
- 数组
三、类型转换
运算中,不同类型的数据先转化为同一类型,然后再进行运算
public class Demo03 {
public static void main(String[] args) {
int i = 128;
byte b = (byte)i;
//加了括号的转换是强制类型转换(类型)变量名
//强制转换(高-->低)自动转换(低-->高)
System.out.println(i);
System.out.println(b);//byte的最大值是127,128会内存溢出
int a = 128;
double d = i;
System.out.println(a);
System.out.println(d);//自动转换不需要加括号
/*
注意点:
1.不能对布尔值进行转换
2.不能吧对象类型转换成不合逻辑的类型
3.把高容量转换到低容量的时候,强制转换,反之不需要其他操作
4.转换的时候可能会存在内存溢出,或者精度问题!
*/
System.out.println("=========================");
System.out.println((int)23.7);
System.out.println((int)-45.89f);
System.out.println("=========================");
char c = 'a';
int i1 = c+1;
System.out.println(i1);
System.out.println((char)i1);
System.out.println("=========================");
int q = 12346;
char f = (char)q;
System.out.println(f);
System.out.println("=========================");
//操作比较大的数的时候,注意溢出问题
//JDK7新特性,数字之间可以用下划线分割,并且下划线不会打印
int money = 10_0000_0000;
int year = 20;
int total = money * year;
System.out.println(money);
System.out.println(total);//-1474836480,计算时溢出了,int最多到20亿
long total1 = money * year;
System.out.println(total1);
//由于money和year都是int类型,默认相乘之后是int类型,也就是说转换之前就已经存在问题
long total2 = money * ((long)year);//先把一个数转换成long类型
System.out.println(total2);
}
}
四、变量、常量
变量
每个变量都必须声明其类型,Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域
- 类变量
- 实例变量
- 局部变量
注意事项:
- 每个变量都有类型,类型可以是基本类型,也可以是引用类型
- 每个变量必须是合法的标识符
- 变量声明是一条完整的语句,因此每个声明都必须以分号结束
public class Demo04 {
static int salary = 2500;//类变量
String str = "Hello World!";//实例变量:从属于对象,如果不自行初始化,该变量值为这个类型的默认值
String str1;
boolean flag;
public void add(){
int t = 0;//局部变量
}
public static void main(String[] args) {
// int a,b,c;由于程序可读性尽量不在一行声明多个变量
int a = 1;//局部变量
int b = 1;
int c = 1;
//若要使用str
Demo04 demo04 = new Demo04();
System.out.println(demo04.str);
System.out.println(demo04.str1);//实例变量,如果不自行初始化,该变量值为这个类型的默认值
System.out.println(demo04.flag);//bool值默认是false,基本类型是0,其他类型是null
System.out.println(salary);//类变量多一个static,可以直接用
}
}
常量
初始化之后就不会改变的值,所谓常量可以理解为一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。常量名一般用大写字母。
final 常量名 = 值
final double PI = 3.14;
public class Damo05 {
//static和final等是修饰符,不存在先后顺序
static final double PI = 3.14;
final static double PII = 3.15;
public static void main(String[] args) {
System.out.println(PI);
System.out.println(PII);
}
}
命名原则
- 类成员变量:首字母小写和驼峰原则:monthSalary
- 局部变量:首字母小写和驼峰原则
- 常量:大写字母和下划线:MAX_VALUE
- 类名:首字母大写和驼峰原则:Man,GoodMan
- 方法名:首字母小写和驼峰原则
五、运算符
- 算数运算符:+,-,*,/,%,++,--
- 赋值运算符:=
- 关系运算符:>,<,>=,<=,==,!=,instanceof
- 逻辑运算符:&&,||,!
- 位运算符:&,|,^,~,<<,>>,>>>
- 条件运算符:? ,:
- 扩展赋值运算符:+=,-=,*=,/=
二元运算符
package operator;
public class Demo01 {
public static void main(String[] args) {
//二元运算符
//Ctrl+D:复制当前行到下一行
int a = 10;
int b = 20;
int c = 30;
int d = 40;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/((double)b));
}
}
package operator;
public class Demo02 {
public static void main(String[] args) {
long a = 121231234545451L;
int b = 123;
short c = 100;
byte d = 8;
System.out.println(a+b+c+d);//long
System.out.println(b+c+d);//int
System.out.println(c+d);//int
//变量中有long则结果是long类型,有double结果是double类型,其余的结果都是int
}
}
package operator;
public class Demo03 {
public static void main(String[] args) {
//关系运算符返回结果只有:正确、错误(用bool值来表示)
int a = 10;
int b = 20;
int c = 32;
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);
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赋值给b再自增
System.out.println(a);
int c = ++a;//先自增再把a复制给c
System.out.println(a);
System.out.println(b);
System.out.println(c);
//计算Java中没有的数学运算比如幂运算,在Java中没有^运算符
double pow = Math.pow(2,13);
System.out.println(pow);
}
}
逻辑运算符
package operator;
public class Demo05 {
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);
System.out.println(d);
System.out.println(c);
//当执行到c<4的时候就知道是false,此时就不进行后面的判断了,由于与运算二者不同就是false
//可以发现结果中c依然是5并没有自增
}
}
位运算符
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就为1)
A^B 0011 0001(对应位置上相同为0,不同为1)
~B 1111 0010(对应位置上直接取反)
*/
}
}
经典面试题:2*8怎么运算最快
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就为1)
A^B 0011 0001(对应位置上相同为0,不同为1)
~B 1111 0010(对应位置上直接取反)
*/
/*
2*8怎么算最快
<< 左移相当于*2
>> 右移相当于/2
0000 0000 0
0000 0001 1
0000 0010 2
0000 0100 4
0000 1000 8
0001 0000 16
*/
System.out.println(2<<3);
}
}
拓展赋值运算符
package operator;
public class Demo07 {
public static void main(String[] args) {
int a = 70;
int b = 20;
a+=b;//a=a+b
System.out.println(a);
a-=b;//a=a-b
System.out.println(a);
a/=b;//a=a/b
System.out.println(a);
a*=b;//a=a*b
System.out.println(a);
//字符串连接符 +
System.out.println(a+b);
//在+两侧只要是有一方出现string类型,则会把其他都转换成string类型,再进行连接
System.out.println(""+a+b);
System.out.println(a+b+"");
//前者先计算到空字符+a所以a和b都是字符串形式拼接
//后者先计算a+b再和字符串进行拼接
}
}
三元运算符
必须掌握
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);
int score1 = 50;
String type1 = score1<60 ? "不及格" : "及格";
System.out.println(type1);
}
}
六、包机制、JavaDoc
包机制
为了更好地组织类,Java提供了包机制,用于区别类名的命名空间,包的本质就是文件夹。
包语句的语法格式为:
package pkg1[. pkg2[. pkg3...]]
一般利用公司域名倒置作为包名:com.baidu.www
为了能够使用某一个包的成员,我们只需要再Java程序中明确导入该包。使用"import"语句即可完成
import package1[.package2...].(class|*);
package com.allen.operator;
import javax.xml.crypto.Data;//导包要在package com.allen.operator;下面
import com.allen.base.Demo02;//导入自己写的包base的Demo02类
import com.allen.base.*;//导入包中的所有内容
public class Dem09 {
public static void main(String[] args) {
System.out.println(Data);
}
}
JavaDoc
JavaDoc命令是用来生成自己API文档的,是一种技术,将自己的注释信息生成一个帮助文档
参数信息:
- @author :作者名
- @version:版本号
- @since:知名需要最早使用的jdk版本
- @param:参数名
- @return:返回值情况
- @throws:异常抛出情况
package com.allen.operator;
//加在类上的注释
/**
* @author AllenWei
* @version 1.0
* @since 1.8
*/
public class Doc {
String name;
//加在方法上的注释
/**
* @author AllenWei
* @param name
* @return
* @throws Exception
*/
public String test(String name)throws Exception{
return name;
}
}
使用IDEA生成JavaDoc文档