Java笔记基础
仅仅学习,不涉及任何商用
1.注释
- 单行注释:以"//"开头
- 多行注释:以"/"开头,以"/"结尾
- 文档注释:以"/**"开头,"*/"结尾。注释中包含一些说明性的文字及一些JavaDoc标签。
public class Hello {
public static void main(String[] args) {
// 单行注释
// 输出一个Hello World!!!
System.out.println("Hello World!!!");
/* 多行
* 注释
*
* */
//javaDoc:文档注释 /** */
}
}
2.标识符
-
用来给变量、类、方法以及包进行命名的
-
四大规则:
- 以大小写字母,下划线,$,数字组成;
- 不能以数字开头
- 大小写敏感;但长度无限制
- 不可以是Java关键字
-
使用规范:表示类名的标识符:每个单词的首字母大写,如Man,GoodMan等
表示方法和变量的标识符:第一个单词小写,从第二个单词开始首字符大写,我们称为“驼峰原则”,如eat(); eatFood();
-
注意:Java不采用ASCII字符集;而是采用Unicode字符集
3.关键字
abstract | assert | boolean | break | byte | case |
---|---|---|---|---|---|
catch | char | class | const | continue | default |
do | double | else | extends | final | finally |
float | for | goto | if | implements | import |
instanceof | int | interface | long | native | new |
null | package | private | protected | public | return |
short | static | strictfp | super | switch | synchronized |
this | throws | throw | transient | try | void |
volatile | while |
注意:另外,true ,false and null都是Java中定义的特殊字符,虽然他们不属于关键字,但也不能被用作类名、方法名和变量名等。goto和const是两个保留字。
4.强类型语言
-
要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用
-
public class Hello { public static void main(String[] args) { String a="Hello World!!"; System.out.println(a); } }
5.Java的数据类型分为两种:
5.1基本类型和引用类型
-
public class Hello { public static void main(String[] args) { // 八大基础数据类型 // 整数 int num1 = 10; byte num2 = 20; short num3 = 30; long num4 = 30L; //Long 类型要在数组后面加个L // 小数 float num5 = 50.1F; //float 类型要在数组后面加个F double num6=3.1416926; // 字符 char name = 'a'; // 字符串 String a="Hello World!!";//String 不是关键字,是类 System.out.println(a); // 布尔值 boolean flag1 = true; boolean flag2 = false; } }
5.2 扩展
-
整数扩展:
进制:二进制0b 十进制 八进制0 十六进制0x
public class Hello { public static void main(String[] args) { int i = 10; int i2 = 010; int i3 = 0x10; System.out.println(i); System.out.println(i2); System.out.println(i3); } }
-
浮点数扩展:
float 类型,尾数可精确到7位有效数字
double 类型,默认,常用
上述两种类型精度有限,离散,含有误差 ,浮点型不精确,最好不使用浮点数进行比较。(同时也不适合精度要求非常高的商业计算,例如银行业务,需要用BigDecimal表示和比较)
-
字符扩展(强制转换):
public class Hello { public static void main(String[] args) { char c = 'a'; System.out.println(c); System.out.println((int) c); } }
所有的字符本质还是数字
编码 Unicode 表: 2个字节
-
转义字符
\t 制表符 \n 换行
-
对象 从内存分析
-
布尔值扩展
// 布尔类型不能用0或非0的整数来替代true和false if(flag==true){} if(flag){} // Less is More! 代码要精简已读
6.类型转换
-
由于java是强类型语言,所以要进行有些运算时,需要用到类型转换。
低——————————————————————————————>高
byte,short,char ——> int ——> long ——> float ——> double
-
public class Hello { public static void main(String[] args) { int i = 128; byte b = (byte)i; //内存溢出 System.out.println(i); System.out.println(b); } }
-
强制类型转换 高 ---> 低 (类型)变量名
-
自动转换 低 ----> 高
-
/* 1.不能对布尔值转换 2.不能把对象类型转换为不相干的类型 3.转换的时候存在内存溢出,或者精度问题!!! */
-
//当操作数比较大时,注意溢出问题 //JDK7新特性,数字之间可以用下划线分割 int money = 10_0000_0000; //10亿,下划线不会被打印出来 System.out.println(money); //1000000000 int years = 20; int total = money*years; //数据大,溢出 System.out.println(total); //-1474836480 long total2 = money*years; //默认是int,转换前就有溢出问题 System.out.println(total2); //-1474836480 long total3 = money*(long)years; //先把一个数转Long System.out.println(total3); //20000000000
-
public class Hello { public static void main(String[] args) { int i = 10_0000_0000; int b = 20; long total = i*((long)b); System.out.println(total); } }
7.常量、变量
-> 常量
-
在Java中,用关键字 final 来定义一个常量。
-
常量一旦初始化后不能再改变的值,不会变动的值。
-
声明格式:
final type varName = value;
- 一般将1,2,3,'a','b',true,false,"helloworld"等称为字符常量;而使用 final 修饰谁说的PI等称为符号常量。
- 命名规则:全部以大写字母书写;用下划线将各个单词隔开。
-
//常量一般用大写字符 final 常量名=值; final double PI=3.14; //修饰符 不存在先后顺序,static可以写final后面 static final doube PI=3.14; //类变量,该类下的全局范围
-
public class Hello { static final double PI = 3.14; public static void main(String[] args) { System.out.println(PI); } }
-> 变量
-
本质:代表一个“可操作的存储空间”,空间的位置是确定的,但在里面放的位置不确定。
-
变量的申明:
- Java是一种强类型语言,每个变量都必须申明其数据类型。
- 变量的数据类型决定了变量占据存储空间的大小。
-
变量使用之前必须先赋初始值
-
Java变量是程序中最基本的存储单元,要素包括变量名,变量类型和作用域
//数据类型 变量名 = 值;
type varName [=value][{,varName[=value]}];
//可以使用逗号隔开同多个类型的变量,但不建议在一行定义多个变量
1.变量的分类和作用域
类型 | 声明位置 | 从属于 | 生命周期(作用域) |
---|---|---|---|
局部变量 | 方法或语句块内部 | 方法/语句块 | 从申明位置开始,直到方法或语句块执行完毕,局部变量消失 |
成员变量(实例变量) | 类内部、方法外部 | 对象 | 对象创建,成员变量也跟着创建;对象消失,成员变量也跟着消失; |
静态变量(类变量) | 类内部,static修饰 | 类 | 类被加载,静态变量就有效;类被卸载,静态变量消失。 |
-
public class Variable{ static int allClicks = 0; //类变量 String str = "hello world"; //实例变量 public void method(){ int i=0; //局部变量 } }
-
public class Hello { // 类变量 static static double salary = 2_500; // 属性:变量 // 实例变量:从属于对象: String name; int age; //可以不给赋值,如果不自行初始化,会默认赋值这个类型的默认值 //布尔值:默认值:false // 除了基本类型,其余默认值为 null // main 方法 public static void main(String[] args) { // 局部变量:必须声明和初始化值 int i = 100; System.out.println(i); // 变量类型 变量名字 = new Hello(); Hello hello = new Hello(); System.out.println(hello.age); // 类变量 static System.out.println(salary); } // 其他方法 public void add(){ } }
2.变量的命名规范
- 所有变量、方法、类名:见名知意
- 类成员变量:首字母小写+驼峰原则:lastName
- 局部变量:首字母小写+驼峰原则
- 常量:大写字母和下划线:MAX_VALUE
- 类名:首字母大写+驼峰原则:Man,GoodMan
- 方法名:首字母小写+驼峰原则:run(),fastRun()
8.运算符
一、算术运算符
类型 | 运算符 | 说明 |
---|---|---|
基本运算符 | +、-、*、/ | 加、减、乘、除 |
取余运算符 | % | 取余 |
递增和递减 | ++、- - | 递增、递减 |
-
基本运算符
int a=10; int b=20; System.out.println(a/b); //0 System.out.println((double)a/b); //0.5 long c=12300000000; System.out.println(a+b); //int System.out.println(a+c); //long 自动转换式子中容量大的数据类型
注意:一般分母都不能为0,为0时会发生程序错误;但对于基本运算符,只要将分子定义为double型,分母为0时是正确的,得到的值为无穷大。
-
取余运算符
-
若取余运算的两个操作数都是整数类型。则取余运算的第二个操作数不能为0 ,否则程序出现错误
-
若取余运算的两个操作数有一个或两个为浮点数,则允许第二个操作数是0或是0.0;只是取余运算得到的结果为NaN(NaN是Java中的特殊数字,表示非数字类型)
-
public class Java04 { /* * 取余运算 */ public static void main(String[] args) { double A = 99.0; int B =0; double C = A%B; System.out.println("99.0%0="+C); //NaN } }
-
-
递增和递减
-
// ++自增 --自减 单目运算符 int a = 3; int b = a++; //b=a,a=a+1 先赋值 即b=3 a=4 int c = ++a; //a=a+1,c=a 先自增 即a=5 c=5 System.out.println(a); //5 System.out.println(b); //3 System.out.println(c); //5
-
二、关系运算符和逻辑运算符
- 关系运算符
类型 | 说明 |
---|---|
== | 等于 |
!= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于或等于 |
<= | 小于或等于 |
-
逻辑运算符
-
&& 逻辑与运算:两个变量都为真,结果为true
-
|| 逻辑或运算:两个变量有一个为真,结果为true
-
! 逻辑非(取反),真变为假,假变为真
-
^ 异或运算符,相同为0,不同为1
-
// 与(and) 或(or) 非(取反) boolean a = true; boolean b = false; System.out.println(a&&b); // false System.out.println(a||b); // true System.out.println(!(a&&b)); // true int c=5; boolean d = (c<5)&&(c++<5); //第一个值为false,后面就不进行判定了 System.out.println(d); //false System.out.println(c); //5 c++未执行
-
3.位逻辑运算符(Bitwise Operator)
-
在Java程序设计中,使用位逻辑运算符来操作二进制数据。如果用在其他进制的数据中,需要先将它们转换成二进制数据。位逻辑运算符可以直接操作整数类型的位,这些整数类型包括long、int、short、char和byte。
-
/* A = 0011 1100 B = 0000 1101 A&B 0000 1101 按位与 A|B 0011 1101 按位或 A^B 0011 0001 异或 ~B 1111 0010 非 面试题:2*8 怎么算最快? 2<<3 <<左移 *2 效率极高!! >>右移 /2 */ System.out.println(2<<3); // 16
-
条件运算符(三目运算符)
-
int a = 10; int b = 20; a+=b; // a = a+b a-=b; // a = a-b System.out.println(a); //10 //字符串连接符 + ,转化为String类型,然后拼接 注意!! System.out.println(""+a+b); //1020 System.out.println(a+b+""); //30 先进行运算,再转为String拼接 System.out.println(a+b+"str"); //30str
-
// x ? y : z //如果x为真,则结果为y,否则为z //if(x) y; else z; int score = 80; String type = score<60?"及格":"不及格"; System.out.println(type); //及格
-
三、运算符的优先级
9.Java基础06——包机制
-
为了更好地组织类,Java提供了包机制,由于区分类名的命名空间
-
包的语法格式:
package pkg1[.pkg2[.pkg3...]];
-
一般利用公司域名倒置作为包名;com.kuangstudy.www
-
为了能够使用一个包的成员,需要在Java程序中导入该包
-
import package1[.package2...].(className|*); //通配符* 导入包下所有的类
-
参考:阿里巴巴Java开发手册
10.字符串
字符串(String)是由0或多个字符组成的有限序列,是Java编程语言中表示文本的数据类型。通常一字符串的整体作为操作对象。
10.1.字符串的初始化
// 在Java程序中,使用关键字new来创建String实例
String a = new String(); //创建了一个名为String的类,并把它赋值给变量,但它此时是一个空的字符串
a="I am a person from Chongqing";
String a=new String("I am a person from Chongqing");
10.2. String 类
/*
1.索引:通过索引函数charAT()可以返回字符串中指定索引的位置;
索引数字从0开始
public char charAt(int index);
*/
public static void main(String[] args) {
String s="IAmChinese";
System.out.println(s.charAt(5));
}
/*
2.追加字符串函数 concat()的功能是在字符串的末尾添加字符串
public String concat(String s)
*/
public static void main(String[] args) {
String s="IAmChinese";
String d="hello";
System.out.println(s.concat(d));
}
/*
3.比较字符串函数 equalsIgnoreCase()
判断两个字符串是否完全相同,相同返回TRUE,否则返回一个FALSE
public Boolean equalsIgnoreCase(String s)
*/
public static void main(String[] args) {
String s="IAmChinese";
String d="hello";
System.out.println(s.equalsIgnoreCase(d));
}
/*
4.取字符串长度
public int length()
*/
public static void main(String[] args) {
String s="IAmChinese";
System.out.println(s.length());
}
/*
5.替换字符串:replace()函数
替换是两个动作:第一个是查找,另一个是替换
public String replace(char old,char new)
*/
public static void main(String[] args) {
String s="I want I need to go";
String y=s.replace("go","be going");
System.out.println(y);
String x=s.replace('I','Y');
System.out.println(x);
}
/*
6.字符串的截取函数 substring()
public String substring(int begin)
public String substring(int begin,int end)
*/
public static void main(String[] args) {
String s="I am Chinese";
System.out.println(s.substring(2));
}
/*
7.字符串大小写转换
大写字母转换成小写字母
public String toLowerCase()
小写字母转换成大写字母
public String toUpperCase()
*/
public static void main(String[] args) {
String s="I WANT I NEED TO GO";
System.out.println(s.toLowerCase());
System.out.println(s.toLowerCase().toUpperCase());
}
/*
8.消除字符串中的空格字符
trim()可以去除数据两端的空格,在判断数据是否为空且不能全是空格时可以使用。
trim() 方法不会改变原始字符串。
trim() 方法不适用于 null, undefined, Number 类型。
*/
public static void main(String[] args) {
String username="ManQinXio";
String password="123 45678";
if(username.trim().length()==0||password.trim().length()==0){
System.out.println("Hello!");
}else {
System.out.println("No Rule!!!");
}
}
10.3. StringBuffer 类
[^StringBuffer类是Java中另一个重要的操作字符串的类。当需要对字符串进行大量的修改时,使用StringBuffer类是最佳的选择。如果想转成 String 类型,可以调用 StringBuffer 的 toString() 方法。]:
-
概述:
-
Java.lang.StringBuffer 线程安全的可变字符序列。在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。可将字符串缓冲区安全地用于多个线程。
-
StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。
-
-
public class Java06 { /* * 1.追加字符: * public synchronized StringBuffer append(boolean b) * 2.插入字符 * public synchronized StringBuffer insert(int offset,String s) * 3.颠倒字符 * public synchronized StringBuffer reverse() */ public static void main(String[] args) { StringBuffer s=new StringBuffer("好久不见!"); s.append("我的好朋友。"); System.out.println(s); StringBuffer b = new StringBuffer("在左,天才在右"); System.out.println(b.insert(0,"疯子")); System.out.println(b.reverse()); } }
11.JavaDoc生成文档
-
javadoc命令是用来生成自己API文档的
-
参数信息
- @author 作者名
- @version 版本号
- @since 指明最早用的jdk版本
- @param 参数名
- @return 返回值情况
- @throws 异常抛出情况
-
通过命令行生成JavaDoc文档
- 打开某个类所在文件夹下的cmd命令行
- 输入:javadoc -encoding UTF-8 -charset UTF-8 Doc(类名).java
- 会自动生成该类有关的API文档,查看文件夹发现多了一些文件
- 打开 index.html(首页)查看文档注释
-
通过IDEA生成JavaDoc文档