Java 入门知识
基于狂神说Java课程,可自行观看
https://www.bilibili.com/video/BV12J41137hu?p=31
主要是Java数据类型、变量介绍
快捷输入(直接引出函数)
psvm
#main函数
public static void main(String[] args) {
}
sout
#输出语句
System.out.println();
Java 配置
File–>Project Structure–>project
修改Project SDK 和 language
注释
单行注释:
//
多行注释:
/*
*/
文档注释:
JavaDoc
/** */
快捷键
行注释:Ctrl+/
块注释:Ctrl+Shi+/
标识符
关键字
Java 所有的组成部分都需要名字。类名、变量名和方法名都被成为标识符
public class HelloWorld {//HelloWord 类名
public static void main(String[] args) {//main方法名
System.out.println("Hello,World!");//输出一个Hello World
/*
多行注释
*/
String teacher = "zz"//techer变量名
}
}
-
所有的标识符都以A-Z(a-z)、$、_(下划线)开始
-
首字母之后可以用任意字符或数字、符号组合
-
不能使用关键字作为标识符(变量名、方法名)
-
标识符大小写敏感
-
可以使用中文命名但不推荐
数据类型
Java:
强类型定义语言。要求变量的使用严格符合规定,所有变量先定义后才能使用
(速度比若类型定义语言慢,但更安全、规范)
数据类型 变量名 = 值,可用,隔开多个变量定义
字符串(String)用“ ”定义值
基本类型(primitive type)
整数类型:(关键字)
-
byte:(1字节范围)-128~127
-
short:(占2字节范围):-32768~32767(万)
-
int:(占4字节范围):(十亿 10位)-21474836489(最常用)
-
long(占8字节范围):一般要在最后加个L
long num=30L;
浮点类型:
-
float(4字节)最后加f
float f=0.1f
-
double(8字节)
字符类型:
-
char(2字节)一个字符
char name='A'; char name='ab';//错
字符串是String(String不是关键字,是类)
boolean类型(布尔类型):
- 占1位(只有false和true两个值)(1字节有8位)
引用类型(reference type)
类、接口、数组
数据类型拓展
整数拓展
二进制0b
int i=10;//十进制
int i2=010;//八进制0
int i3=0x10;//十六进制0x
输出:
浮点数拓展
//浮点数拓展
//float 有限 离散 舍入误差(接近但不等于),这就会造成很多问题
//double
//最好完全避免使用浮点数进行比较
float f=0.1f;//0.1
double d=1.0/10;
System.out.println(f==d);//false
System.out.println(f);
System.out.println(d);
float d1=2323232323232323f;
float d2=d1+1;//d1已经溢出
System.out.println(d1==d2);//true
字符拓展
//字符拓展
char c1='a';
char c2='中';
System.out.println(c1);
System.out.println((int)c1);//强制转换
System.out.println(c2);
System.out.println((int)c2);
//所有的字符本质还是数字(编码问题 Unicode 表:a=97,A=65 2字节 65536 2^16)
//U0000~UFFFF
char c3='\u0061';// /u是转义的意思
System.out.println(c3);//输出a
转义字符
//转义字符
//\t 制表符
//\n 换行
System.out.println("Hello\tWorld");//Hello World
布尔值使用
boolean flag=true;
if(flag) { //if(flag==true)
}
类型转换
优先级:
低----------------->高
byte,short,char->int->long->float->double
强制类型转换
(类型)变量名
高到低的转换
int i=12;
byte b=(byte)i;//注意内存溢出
System.out.println(i);
System.out.println(b);
自动类型转换
直接转换
低到高的转化
int i=12;
double b=i;
System.out.println(i);
System.out.println(b);
注意:
-
不能对布尔值进行转换
-
不能把对象类型转换为不相干的类型
-
在把高容量转换到低容量的时候,强制转换
-
转换的时候可能存在内存溢出或者精度问题
System.out.println((int)23.7);//23
System.out.println((int)-45.89f);//-45
System.out.println("=================");
char c='a';
int d=c+1;
System.out.println(d);//98//转换成高的int类型
System.out.println((char)d);//b
System.out.println("=================");
//JDK7的新特性,数字之间可以用下划线分割,不改变数值大小
int money=10_0000_0000;
System.out.println(money);//1000000000
int years=20;
int total=money*years;
long total2=money*years;//在这里转换没有用了,计算完默认是个int值,已经溢出再转换成long没有用了
System.out.println(total);//-1474836480
System.out.println(total2);
long total3=money*(long)years;//先把一个数转换为long,就会全转换为long计算
System.out.println(total3);//20000000000,200_0000_0000
变量
type varname [=value];
//数据类型 变量名=值 逗号隔开来声明多个同类型变量
char x='X';
作用域
类变量 static
实例变量
局部变量
public class Demo02 {
//变量作用域
//实例变量,从属于对象,类里面,方法外面,int默认值0,浮点型 0.0
//布尔值:默认false
//除了基本类型,其余的默认都是null
String name;//实例变量
int age;
//类变量 static
static double salary=2500;//从属于类,随着类一起出现一起消失
//main方法
public static void main(String[] args) {
//局部变量;必须声明和初始化
int i=10;
System.out.println(i);
//变量类型 变量名 = new Demo02();
Demo02 demo02=new Demo02();
System.out.println(demo02.age);//0
System.out.println(demo02.name);//输出null
System.out.println(salary);//2500,可以直接输出
}
public void add(){//另一个方法
//System.out.println(i);//i是局部变量,在另一个方法中,不能再输出i
}
}
常量
初始化之后不能再改变值
final 类型 常量名=值
static final double PI=3.14;
//final 是修饰符,不存在先后
起名规范
变量:首字母小写,后面单词首字母大写(驼峰原则):lastName
常量:大写字母和下划线:MAX_VALUE
类名:首字母大写和驼峰原则:Man,GoodMan
方法名:首字母小写和驼峰原则:run(),runRun()
运算符
普通的运算符都有
优先级用()分开
public class Demo03 {
public static void main(String[] args) {
long a=123123123123123L;
int b=123;
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
//有long型就会转换成long型
//没有long,不管有没有int型变量都会转换成int型(比int低的数值型)
//关系运算符返回结果:正确、错误(布尔值)
//多用在if里
int m=10;
int n=20;
System.out.println(m>n);//false
System.out.println(m<n);//true
System.out.println(m==n);//false
System.out.println(m!=n);//true
}
}
幂运算
double pow=Math.pow(2,3);
System.out.println(pow);//8
位运算
与二进制有关的
/*
A=0011 1100
B=0000 1101
与运算:
A&B=0000 1100
或运算:
A|B=0011 1101
异或运算(相同为0,不同为1):
A^B=0011 0001
~B=1111 0010
左移:<<(相当于*2) 右移:>>(相当于除2)
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 1000 8
0001 0000 16
*/
字符串连接符
int i=10;
int j=20;
int k=5;
//字符串连接符 + +两侧有一方是String类型的就会把另一个操作数转换成String类型再进行连接
System.out.println(""+i+j);//1020
//字符串再后面会先运算再连接
System.out.println(i+j+""+k);//305
三元运算符
//三元运算符
//x?y:z 如果x==true,则结果为y,否则结果为z
int score=80;
String type=score<60?"不及格":"及格";
System.out.println(type);//及格
包机制
类似于文件夹,用于区别类名的命名空间
语法格式为:
package pkg1[.pkg2[.pkg3...]];//[]里面可省略
一般利用公司域名倒置作为包名com.baidu.xxx(三个包包含)
为了能够使用某一个包的成员,需要再java中明确导入该包,使用import(必须放在package下面)
import package1[.package2...].(classname|*);
import base.Demo01;
import base.*;//导入这个包下所有的类
JavaDoc
文档注释
Javadoc命令是用来生成自己API文档的
Java JDK帮助文档:https://www.oracle.com/cn/java/technologies/java-se-api-doc.html
JKD8:https://docs.oracle.com/javase/8/docs/api/
package base;
/**
* @author zz
* @version 1.0
* @since 1.8
*/
//加在类上就是类的注释
public class Doc {
String name;
/**
*
* @param name
* @return
* @throws Exception
*/
//加在方法上就是方法的注释
public String test(String name)throws Exception{
return name;
}
}