Day02JavaSE基础(前言+基础语法)

Bliss ·
更新时间:2024-11-10
· 849 次阅读

JavaSE 基础 Java 前言 Java 特性

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 标识符

关键字(不可用做变量名)
Java关键字

标识符

标识符要求:

所有的标识符都应该以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开心、幸福!


作者:Targetu



基础语法 javase

需要 登录 后方可回复, 如果你还没有账号请 注册新账号