Java基础
2021-03-11 18:31
标签:比较 months instance int 除了 下划线 换行 money 分析 平时我们编写代码,在代码量比较少的时候,我们还可以看懂自己写的,但是当项目结构的一旦复杂起来,我们就需要用到注释了。 注释并不会被执行,是给我们写代码的人看的 书写注释是一个非常好的习惯 平时写代码一定要注意规范 单行注释:可以注释一行文字 多行注释:可以注释多行文字 文档注释 每个人都有名字,每件事物都有名字,程序也不例外 Java所有的组成部分都需要名字。类名、变量名、方法名都被称之为标识符 所有的标识都应该是以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、或者下划线(_)或数字的任何字符组合 不能使用关键字作为变量名或方法名 标识符是大小写敏感的 合法标识符举例:age、$teacher、_value、Hello、__1_value 非法标识符举例:123adc、-salary、#abc 可以使用中文命名,但是一般不建以这样去使用,也不建议使用拼音,很Low 强类型语言:Java、C、C++ ? 要求变量的使用要严格符合规定,所有的变量必须先定义后才能使用 ? 优点:安全性高 ? 缺点:速度慢 弱类型语言:JavaScript、VBScript、PHP ? 优点:简单、速度快 ? 缺点:容易出错 基本类型(primitive Type) byte、short、int、long、float、double、char、boolean 引用类型(Reference Type) 类,接口,数组 String是一个类,也属于引用数据类型 位(bit):是计算机 内部数据 存储的最小单元,1001100是一个八位二进制数 字节(byte):是计算机中 数据处理 的基本单元,习惯上用大写 B 来表示 1B(byte,字节) = 8bit(位) 字符:是指计算机中使用的字母、数字、字符符号 1bit表示1位 1Byte表示一个字节 1B = 8b 1024B = 1kb 1024KB = 1M 1024M = 1G 1024G = 1TB 1024TB = 1PB ? 银行业务怎么表示钱呢? BigDecimal 数学工具类 float 的特点:有限 离散 舍入误差 大约数 接近但不等于 结论 :最好完全避免使用浮点数进行比较 ? 所有的字符本质还是数字 ? Unicode编码:2字节 长度:0~65536; ? Unicode表 a = 97; A = 65 ? Excel表格 最长是2的16次方 = 65536 ? 转义字符 ? 由于Java是强类型语言,所以在进行有些运算的时候,需要用到类型转换 ? 运算中,不同类型的数据先转化为同一类型,然后再进行运算 强制类型转换也叫“向下类型转型”,它是高级转为低级。 例如int num = 123; byte b = (byte)num; //强制类型转换为byte ? 必须满足转换前的数据类型的位数要低于转换后的数据类型 自动类型转换也叫“向上类型转换”,它是低级转为高级。 例如 char a = ‘a‘; int num = a; 这时就是向上类型转型,由char类型转为int类型 num = 97; 【注意】 JDK7新特性,数字之间可以使用下划线分割,方便区分 ? 操作比较大的数的时候,注意溢出问题 解决方案 【注意】 注意事项: 变量是有作用范围(Scope)的,也即作用域。一旦超出变量的作用域,就无法再使用这个变量。在程序中,变量一定会被定义在某一对大括号中,该大括号所包含的代码区便是这个变量的作用域。 类变量 在类体内定义的变量称为类变量,它的作用域是整个类,也就是说在这个类中都可以访问到定义的这个类变量 实例变量 实例变量:从属于对象;如果不初始化,就变成了这个类型的默认值 所有的数值类型,基本上都是 0 或者 0.0 布尔值的默认值:false 除了基本类型,其余的默认值都是null 局部变量 在一个方法或方法内代码块中定义的变量称为局部变量,局部变量在方法或代码块被执行时创建,在方法或代码块结束时被销毁。局部变量在进行取值前必须被初始化,否则会编译错误 Java存在块级作用域,在程序中任意大括号包装的代码中定义的变量,它的生命仅仅存在于程序运行该代码块时 常量(Constant):初始化(initialize)后不能再改变值!不会变动的值。 所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。 常量名一般使用全大写字符 在开发中合理使用常量可以提高代码的可读性 ? Java语言支持如下运算符: 不同数据类型混合运算 ? ++在前,先自增再赋值;++在后,先赋值再自增 ? 拓展:Math,数学工具类 面试题:如何运算 2 * 8 最快 面试题 单目乘除为关系,逻辑三目后赋值 单目运算符:一次作用一个变量的运算符,又叫一元运算符 一般使用括号进行优先级分别 为了更好地组织类,Java提供了包机制,用于区别类的命名空间 包的本质就是文件夹 一般利用公司域名倒置作为包名: www.baidu.com 包名为 com.baidu.com 包的语法格式为:package 包名 为了能够使用某一个包的成员,我们需要在Java程序中明确的导入该包,使用“improt”语句 导入一个包里的所有类 注意:package必须为程序的第一行;不要导入和当前类名一样的类 JavaDoc命令是用来生成自己的API文档的 参数信息: 使用cmd生成javaDoc文档: 使用IDEA生成JavaDoc文档: Tools 》Generate JavaDoc 》选择需要生成的模块,输出路径,语言,点击确定即可 学习地址:https://www.bilibili.com/video/BV12J41137hu Java基础 标签:比较 months instance int 除了 下划线 换行 money 分析 原文地址:https://www.cnblogs.com/paidaxing0623/p/14123681.htmlJava基础
注释
Java中的注释
// 这是单行注释
/*
这是多行注释
这是多行注释
*/
/**
* 这是文档注释
*/
标识符
关键字
标识符注意点
public static void main(String[] args) {
String 英雄联盟 = "最强王者";
System.out.println(英雄联盟);
}
数据类型
Java的数据类型分类
//八大基本数据类型
//整数
int num1 = 100000; //最常用
byte num2 = 127; // -127 - 128
short num3 = 128;
long num4 = 1000000L; // Long类型要在数字后面加L
//小数:浮点数
float num5 = 70.2f; // Float类型要在数字后面加F
double num6 = 3.1415926535897932238462643;
// 字符类型
char name = ‘中‘; //字符,一个字
// 字符串,String不是关键字,是一个类
//String name2 = "姓名";
//布尔值:是非
boolean flag = true;
boolean flag2 = false;
字节
数据类型扩展及面试题讲解
整数拓展
//进制 二进制用"0b"表示 十进制 八进制"0" 十六进制"0x"
int i = 2;
int i2 = 010; // 八进制的10
int i3 = 0x10; // 十六进制的10 0~9 A~F
System.out.println(i); // 10
System.out.println(i2); // 8
System.out.println(i3); // 16
浮点数拓展
float f = 0.1f;
double d = 1.0 / 10;
System.out.println(f); // 0.1
System.out.println(d); // 0.1
System.out.println(f == d); //false
float d1 = 232312352133f;
float d2 = d1 + 1;
System.out.println(d1 == d2); //true
字符拓展
> 通过强制类型转换,可以将char字符转换为Unicode编码格式
char c1 = ‘a‘;
char c2 = ‘中‘;
System.out.println(c1);
System.out.println((int) c1); // 强制转换 97
System.out.println(c2);
System.out.println((int) c2); // 强制转换 20013
// Unicode编码一般采用 U0000 UFFFF表示
char c3 = ‘\u0061‘;
System.out.println(c3); // a
// \t 制表符
// \n 换行符
// ……
System.out.println("Hello\tWorld");
System.out.println("Hello\nWorld");
String拓展
String sa = new String("hello,world");
String sb = new String("hello,world");
System.out.println(sa == sb); // false
String sc = "hello,world";
String sd = "hello,world";
System.out.println(sc == sd); // true
// 对象 从内存分析
布尔值拓展
boolean flag = true;
if (flag == true){} // 新手
if (flag){} // 老手
//Less is More! 代码要精简易读
类型转换
强制类型转换
自动类型转换
隐含强制类型转换
// 示例
System.out.println((int) 12.3); // 12
System.out.println((int) -45.89F); // -45
char c = ‘a‘;
int d = c + 1;
System.out.println(d); // 98
System.out.println((char) d); // b
int money = 10_0000_0000; // 1000000000
常见问题
int money = 10_0000_0000;
int year = 20;
int total = money * year; // 理论上应该是20亿,结果是-1474836480,因为计算的时候内存
long total2 = money * year; // money和year都是int,结果默认是int,在转换为long之前就出错了
long total3 = ((long)money) * year; // 先将一个数转化为long,结果就是long,解决了溢出问题
System.out.println(total3);
> 注意,在定义long时,后面需要加 L 或者 l ,建议使用L,防止 l 看成 1;
变量
变量的概念
> 变量是什么:变量就是可以变化的量!
>
> Java是一种强类型语言,每个变量都必须声明其类型
>
> Java变量是程序中最基本的存储单元,其要素包括变量名、变量类型和作用域。
type varName = [=value][{,varName[=value]}];
// 数据类型 变量名 = 值; 可以用逗号隔开来声明多个相同数据类型的变量。
// 基本类型
int a = 1;
int b = 2, c = 3; // 不建议,程序可读性问题
char x = ‘X‘;
double pai = 3.14;
// 引用类型
String name = "hello";
变量的作用域
public class Demo04 {
// 类变量 static
static double salary = 2500;
public static void main(String[] args) {
// 类变量 static
System.out.println(salary);
}
}
public class Demo08 {
// 实例变量:从属于对象;如果不初始化,就变成了这个类型的默认值
// 所有的数值类型,基本上都是 0 或者 0.0
// 布尔值默认值:false
// 除了基本类型,其余的默认值都是null
String name;
int age;
public static void main(String[] args) {
// 变量类型 变量名 = new 变量类型();
Demo08 demo08 = new Demo08();
System.out.println(demo08.age); // 0
System.out.println(demo08.name); // null
}
}
public class Demo04 {
public static void main(String[] args) {
// 局部变量;在方法内部定义的变量,就是局部变量
// 必须声明和初始化值
int i = 10;
System.out.println(i);
}
}
变量的命名规范
常量
final 常量名 = 值;
final double PI = 3.14;
// 修饰符不存在先后顺序
final static double PI = 3.14;
public class Demo09 {
// 修饰符不存在先后顺序
static final double PI = 3.14;
public static void main(String[] args) {
System.out.println(PI);
}
}
运算符
算数运算符
// 两数及多数操作也叫做 :二元运算符
int a = 10;
int b = 20;
int c = 25;
int d = 30;
System.out.println(a + b); // 两数相加 结果为:30
System.out.println(a - b); // 两数相减 结果为:-10
System.out.println(a * b); // 两数相乘 结果为:200
System.out.println(a / b); // b取整a 结果为:0
System.out.println(a % b); // b取余(模运算)a 结果为:10
System.out.println(a / (double)b); // a除以b 结果为: 0.5
long a = 20522285412L;
int b = 12123;
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); //int
// 不同运算符进行运算时,结果自动提升为最大的数据类型
// short + byte = int
关系运算符
// 关系运算符返回的结果:正确、错误 使用布尔值表示
// 之后会大量和if结合使用
int a = 10;
int b = 20;
System.out.println(a > b); // false
System.out.println(a
自增自减运算符
// ++ 自增;-- 自减 一元运算符
int a = 3;
int b = a++; // 执行完这行代码后,先给b赋值,再自增
// a++ 相当于 a = a + 1;
System.out.println(a); // 4
int c = ++a; // 执行完这行代码前,先自增,再给b赋值
System.out.println(a); // 5
System.out.println(b); // 3
System.out.println(c); // 5
// 幂运算 2^3 = 2 * 2 * 2 = 8
// 很多运算,我们会使用一些工具类来操作
double pow = Math.pow(2, 3);
System.out.println(pow); // 8
逻辑运算符
// 与(and) 或(or) 非(取反)
boolean a = true;
boolean b = false;
System.out.println("a && b:" + (a && b)); // 逻辑与运算:两个变量都为true,结果才为true
System.out.println("a || b:" + (a || b)); // 逻辑或运算:两个变量有一个为true,结果就为true
System.out.println("!(a && b):" + (!(a && b))); // 如果是true,结果就为false,反之亦然
//短路运算
int c = 5;
boolean d = (c
位运算符
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 非运算符 如果为1就变为0,如果为0就变为1
// >右移 / 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
拓展赋值运算符
int a = 10;
int b = 20;
a += b; // a = a + b
a -= b; // a = a - b
// 字符串连接符 + 加法两侧只要出现了String类型,其他类型都变为String再进行拼接
System.out.println(a + b);
System.out.println("" + a + b);
System.out.println("" + a + b); // 1020 先转为String再拼接
System.out.println(a + b + ""); // 30 先计算再转为String拼接
三元运算符
// x ? y : z
//如果x为true,结果为y,否则结果为z
int score = 80;
String type = score
运算优先级
单目:单目运算符+ –(正负数) ,++ –,!(逻辑非),~(按位取反)
乘除:算数运算符:* / % + - (* / %优先级肯定是大于+-的)
为:位运算符:~(按位取反)>(右移),^(也可以位运算,二进制异或)
关系:关系运算符:> =
逻辑:逻辑运算符(除!)&& || & | ^
三目:条件运算符A > B ? X : Y
后:无意义,仅仅为了凑字数
赋值:= += -= *= /= %= |= &= ^=包机制
package com.jh.operstor;
import java.util.Date;
public class Demo09 {
public static void main(String[] args) {
Date date = new Date();
}
}
import com.jh.base.*;
JavaDoc
javadoc -encoding utf-8 -charset utf-8 文件名.java
# -encoding utf-8 -charset utf-8 防止出现中文乱码