Java建立在C++的基础上,但剥离了C/C++中比较复杂的东西,故有以下特性:
语法像C 没有指针 没有内存管理(可自行释放,不过速度较慢) 真正的可移植性,编写一次,到处运行(借助于JVM虚拟机)Write once, run anywhere. 面向对象 类型安全 高质量的类库 高性能、分布式、动态性(反射机制)、多线程、健壮性Bill Gates说:这是迄今为止设计最好的语言!
Java三大版本:JavaSE、JavaME、JavaEE
Java的JDK、JRE、JVM JDK: Java Development Kit 开发必须,内包含JRE JRE:Java Runtime Environment 运行时环境 JVM: Java Virtual Machine 在任何系统上模拟了CPU,Java的跨平台的核心就是由于JVM Java 的安装配置安装jdk1.8–>配置环境变量–>配置path变量–>检查是否成功
java -version
若打印成功,则安装成功。
Java程序运行机制编译型语言
类似于将整本中文书翻译成外文的,常用与操作系统的开发
解释型语言
类似于请一个翻译一句一句翻译,常用于网页
运行机制:源程序(.java文件)–> Java编译器 --> 字节码(.class文件)–> 类装载器 --> 字节码校验器 --> 解释器 --> 操作系统平台
编译软件选择 IDEA
Java基础语法 1 注释单行注释
//面向世界的第一声呐喊!
public class HelloWorld {
public static void main(String[] args) {
// 输出一个Hello,World!
System.out.println("Hello World");
}
}
多行注释
public class HelloWorld {
public static void main(String[] args) {
/*
我是多行注释,可以注释一段文字
输出一个Hello,World!
*/
System.out.println("Hello World");
}
}
文档注释
public class HelloWorld {
/**
* @Description HelloWorld
* @Author Jever Demut
*/
public static void main(String[] args) {
System.out.println("Hello World");
}
}
2 标识符
关键字(不可用做变量名)
标识符
标识符要求:
所有的标识符都应该以A-Z、a-z、$或_开始
首字符之后可为字母、$ 或 _ 数字的任意组合
不能使用关键字作为变量名或方法名
大小写敏感
3 数据类型强类型语言 – Java
所有变量都必须先定义后才能使用(比较安全,但是较慢)
弱类型语言
比较随意,但是安全性不敢保证
Java数据类型分为基本类型和引用类型
基本类型(primitive type) 数值类型 整数类型:byte、short、int、long(‘L’加以区分); 补充:1B = 8 bit 浮点类型:float('F’加以区分)、double; 字符类型:char(‘a’) boolean类型:true、false; 引用类型(reference type)数据类型扩展(!!!)
public class Demo01 {
public static void main(String[] args) {
//整数拓展: 进制 二进制0b 十进制 八进制0 十六进制0x
int x1 = 10;
int x2 = 010;
int x3 = 0x10;
System.out.println(x1);//10
System.out.println(x2);//8
System.out.println(x3);//16
System.out.println("======================================");
//浮点数扩展
//银行业务如何表示? money
// !!! 使用BigDecimal 数学工具类
//float、double均是有问题的
/*
float 是有限的、离散的 包含舍入误差,接近但是不等于
*/
//最好不使用浮点数进行比较
float f = 0.1f; //0.1
double d = 1.0/10; //0.1
System.out.println(f==d); //false
float d1 = 213243546576654f;
float d2 = d1 + 1;
System.out.println(d1 == d2); //true
System.out.println("=====================================");
//字符扩展 所有字符本质是数字; Unicode 0-65536 (U0000-UFFFF)
char c1 = 'a';
char c2 = '中';
System.out.println(c1); //a
System.out.println((int)c1); //97 because:强制转换
System.out.println(c2); //中
System.out.println((int)c2); //20013
char c3 = '\u0061'; //Unicode 编码
System.out.println(c3); //a
System.out.println("=====================================");
//转义字符
//\t 制表符
//\n 换行符
System.out.println("Hello\tWorld");
System.out.println("Hello\nWorld");
System.out.println("=====================================");
String sa = new String("hello world");
String sb = new String("hello world");
System.out.println(sa == sb); //false new创建的对象不进入字符串池,故false
String sc = "hello world";
String sd = "hello world";
System.out.println(sc == sd); //true sc进入字符串池,sd创建时在池子查找并匹配到sc的位置,故true
//布尔值扩展
boolean flag = true;
if(flag){ //等价于if(flag==true)
System.out.println("Less is More!");
}
}
}
4 类型转换
所有变量的运算均是先转换为同一种类型,再运算,故有时需要类型转换。
顺序:
byte,char,short --> int --> long --> float --> double
强制类型转换(高 --> 低)
需要避免内存溢出
//此处展示强制转换且内存溢出案例
public class Demo02 {
public static void main(String[] args) {
int i = 128;
double d = (byte)i;
System.out.println(i); //128
System.out.println(d); //-128.0
}
}
自动转换(低 --> 高)
不需要括号
//此处展示自动转换案例
public class Demo02 {
public static void main(String[] args) {
int i = 128;
double d = i;
System.out.println(i); //128
System.out.println(d); //128.0
}
}
转换注意:
不能对布尔值进行转换 不能把对象类型转换为不相干的类型 在把高容量转换为低容量是,强制转换 转换时可能存在内存溢出或者精度问题!补充案例:
public class Demo02 {
public static void main(String[] args) {
//JDK7新特性,数字之间可以用下划线分割
int money = 10_0000_0000;
int years = 20;
int total = money*years;
long total2 = money*years;
long total3 = money*(long)years; //先把一个数准换为long,结果也就为long
System.out.println(total); //-1474836480
System.out.println(total2); //-1474836480 因为是在计算后才转换,故仍然为之前的数
System.out.println(total3); //20000000000 输出正常
}
}
5 变量与常量
每个变量必须声明其类型
type varName = Value;
变量作用域
类变量:随类生,随类消亡 实例变量:从属于对象;通过类才能使用,若为初始化,则会自行使用默认值; 局部变量:尽在{}中生存变量案例:
public class Demo03 {
//类 = 属性(变量) + 方法
//类变量 static 随类生,随类消亡
static double salary = 18000;
//实例变量: 从属于对象;通过类才能使用,若为初始化,则会自行使用默认值:1)布尔值:默认false; 2)除了基本类型,其余默认值均为null
String name;
int age;
//main 方法
public static void main(String[] args) {
//局部变量:必须声明和初始化值
int i = 10;
System.out.println(i);
//实例变量 varName = new Demo03();
Demo03 demo03 = new Demo03();
System.out.println(demo03.name); //null
System.out.println(demo03.age); //0
//类变量 static 从属于类
System.out.println(salary); //18000.0
}
}
常量
使用static final创建:
public class Demo04 {
//final代表常量,static意味类变量,随类生,随类消亡。
//修饰符,不存在先后顺序
static final double PI = 3.14;
public static void main(String[] args) {
System.out.println(PI);
}
}
变量命名规范
所有变量、方法、类名:见名知意 类名:首字母大写和驼峰原则:Male, GoodMale 类成员变量:首字母小写和驼峰原则:monthSalary、lastName、firstName 局部变量:首字母小写和驼峰原则 常量:大写字母和下划线:MAX_VALUE 方法名:首字母小写和驼峰原则:runRun() 6 运算符(内含多道面试题,易错多回顾)算数运算符: + - * / % ++ –
package operator;
// 关于计算中的类型转化问题
public class Demo01 {
public static void main(String[] args) {
long a = 123245768324566787L;
int b = 234;
short c = 10;
byte d = 8;
System.out.println(a+b+c+d); //long 有long则最终为long
System.out.println(b+c+d); //int 无long则全为int
System.out.println(c+d); //int
System.out.println(c%d); // 2 取余运算
}
}
package operator;
//关于++ -- 的使用,另扩充幂运算方法
public class Demo03 {
public static void main(String[] args) {
//++ -- 自增 自减 一元运算符
int a = 3;
int b1 = a++; // b1 = a --> a = a+1
int b2 = ++a; // a = a+1 --> b2 = a
int c1 = a--; // c1 = a --> a = a-1
int c2 = --a; // a = a-1 --> c2 = a
System.out.println(a);
System.out.println(b1);
System.out.println(b2);
System.out.println(c1);
System.out.println(c2);
// 幂运算 2^10 使用数学工具类操作
double pow = Math.pow(2, 10);
System.out.println(pow);
}
}
注: 切记a++与++a的计算过程
赋值运算符:=
关系运算符:> = <= == != instanceof(类型判断)
package operator;
//关系运算符的一些判断语句,返回true 或 false
public class Demo02 {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println(a>b); //false
System.out.println(a<b); //true
System.out.println(a==b); //false
System.out.println(a!=b); //true
}
}
逻辑运算符:&& || !(非)
package operator;
//逻辑运算符
public class Demo04 {
public static void main(String[] args) {
// and or not
boolean a = true;
boolean b = false;
System.out.println("a && b: "+(b&&a)); //false 短路运算,前若为假,则后面语句不判断
System.out.println("a || b: "+(a||b)); // true
System.out.println("!(a && b): "+!(a&&b)); //true
}
}
注:再次强调&&为短路运算。
位运算符:& | ^ ~ >> <<
package operator;
//位运算符, 内含面试题
public class Demo05 {
public static void main(String[] args) {
/*
A = 0011 1100
B = 0000 1101
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001 上下对应位数字不相同时才为1: 0^1 = 1 or 1^0 = 1
~B = 1111 0010
//面试题
2*8 = 16 如何计算最快?
<>
//直接用位运算,效率极高,因为是和底层打交道
0000 0000 0
0000 0010 2
0000 0100 4
0000 1000 8
0010 0000 16
*/
System.out.println(2<<3); //16
}
}
注:位运算不经常接触,但是效率极高。
条件运算符: ? :
package operator;
public class Demo06 {
public static void main(String[] args) {
int a = 10;
int b = 20;
//字符串连接符 + ,String
System.out.println("" +a+b); //1020
System.out.println(a+b+""); //30
//三元运算符
// x?y:z
//if x is true, get y, else get z;
int score = 80;
String type = score < 60?"不及格":"及格";
System.out.println(type);
}
}
注:强调字符串连接时+号的使用(一道面试题)以及?:的实质意义
扩展运算符:+= -= *= /=
写在最后过去有人曾对我说:一个人爱上小溪,是因为没有见过大海。而如今我终于可以说:我已见过银河,但我仍只爱你这一颗星。——七堇年
希望我的Dotti开心、幸福!