Java基础入门知识点讲解

JDK&JRE&JVM

JDK:

Java Develoment kit Java开发工具包

JRE:

Java Runtime Environment Java运行时环境

JVM:

Java Virtual machine Java虚拟机 通过虚拟机实现跨平台特性

第一个程序

public class Welcome{
    public static void main(String[] args){//args arguments参数的缩写
        System.out.println("Hello World!");
    }
}

控制台调用输出:

javac:将.java文件编译成.class字节码文件

执行.class文件 java 文件名(不用加文件后缀)

变量和数据类型(8种)

标识符Identifier
  • 规则:标识符不能包含除了字母、数字、下划线、$符号开头之外的任意字符

Java内部采用了Unicode字符集,universal通用字符集

  • ISO8859-1
    • 西欧字符集
  • BIG5
    • 台湾的大五码,表示繁体汉字
  • GB2312
    • 大陆使用最早、最广的简体中文字符集
  • GBK
    • GB2312的扩展,可以表示繁体中文
  • GB18030
    • 最新GBK的扩展,中国所有非手持/嵌入式计算机系统的强制实施标准,可以表示汉子、维吾尔文、藏文等中华民族字符。
  • Unicode
    • 国际通用字符集
Java是一种强类型语言,每个变量都必须声明其类型。

数据类型

  • 基本数据类型
    • 数值型
      • 整数类型:byte、short、int、long
      • 浮点类型:float、double
    • 字符型:char
    • 布尔型:boolean
  • 引用数据类型
    • 类:class
    • 接口:interface
    • 数组
public class TestDataType{
    public static void mian(String[] args){
        int a = 10;//声明整数
        System.out.println(a);//输出
        Integer.toBinaryString();//将十进制转换成二进制
        Integer.toOctalString();//将十进制转换成八进制
        Integer.toHexString();//将十进制转换成十六进制
        /*BigInteger类 大整数*/
        
        /*自动类型转换:如果数据的大小没有超过当前数据代表的范围,可以自动转型*/
    }
}
类型占用存储空间表示范围默认值
byte1字节-128~1270
short2字节-32768~327670
int(Integer)4字节-231~231-10
long8字节-263~263-10L
float4字节e^32科学计数法0.0f
double8字节10^3080.0d
char2字节0~65535
booleanfalse
public class TestFloatType{
    public static void main(String[] args){
        double d = 3.14;//浮点数常量默认是double类型
        float f = 6.20f;//转换为float类型 加f或F
        double d2 = 314e-2;//科学技术法 3.14 314×10^-2次方
        /*
        	浮点数:
        	默认是double
        	浮点数存在舍入误差,很多书字不能精确表示。如果需要进行不产生舍入误差的精确数字 			计算,需要使用BigDecimal类 大小数类。
        	最好避免比较中使用浮点数。
        */
        
        float f = 0.1f;
        double d = 1.0/10;
        System.out.println(f==d);//false 浮点数在内存中表示会有误差
    }
}
字符型
public class TestCharType{
    public static void main(String[] args){
        char c1 = 'a';//char类型使用unicode字符集 表示0~65535个字符
        char c2 = '\"';//转译字符\ 引号 反斜杠
        char c3 = '\t';//制表符 \n换行符
        
        char c4 = 'a';
        int i = c4 + 2;//每个字符对应ASCII a对应的是97
        char c5 = (char)i;//将99强转为字符类型 对应字符为 c 强制类型转换
        
        /*循环打印a~z*/
        for(int i =0; i < 26; i++){
            char temp = (char)(c4+i);
            System.out.println(temp);//循环打印
        }
        
        String str = "abslfja";//定义字符串
    }
}
boolean类型(一位,不是一字节)

通常用来做逻辑判断

public class TestBooleanType{
    public static void main(String[] args){
        boolean b= true;//默认false
        if(b){
            System.out.println("sf");
        }
    }
}
类型转换

容量小的数据类型可以自动转换为容量大的数据类型。

public class TestCast {
    public static void main(String[] args){
        /*转型*/
        byte b = 123;//自动转型为byte
        byte b2 = (byte)300;//不能完成自动转型 需要进行强制类型转换 会丢失精度
        char c2 = 'a';
        int i = c2;//可以直接转换为int类型
        long do1 = 1233333;
        float f = do1;//可以直接转换为float类型 可能会丢失精度
        
        int i2 = 100;
        char c3 = (char)i2;//不能完成自动类型转换 需要强制类型转换
        /*
        	超出表示范围 会转化成为一个完全无意义的值
        */
        
        /*运算时类型提升为题*/
        int a = 3;
        long b = 4;
        /*做所有二元运算符,都会有类型提升问题 例:int型+long型 结果会自动转换为long类型*/
        int c = (int)(a + b);//丢失精度 blong类型需要强制类型转换
         
        int money = 100000000;//10亿
        int years = 20;
        int total = (long)money*years;//需要进行对money强制类型转换,否则数值会溢出
        
        /*一个人70年心跳多少次*/
        long times = 70L*60*24*365*70;//需要将首位添加L将其自动转换为long类型,提升类型
        
    }
}
JDK1.7特性
  • 二进制整数
  • 下划线分隔符
public class TestBinaryNum{
    public static void main(String[] args){
        int a = 013;//八进制 0x十六进制 0b代表二进制
        int b = 0b0000_1111_0101;//分隔符二进制
    }
}
变量(variable)
  • Java是一种强类型语言,每个变量都必须声明其类型。
  • Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。
  • 变量在使用前必须对其进行声明,只有在变量声明以后,才能为其分配相应长度的存储单元,声明格式为:
    • type varName
  • 注意事项:
    • 每个变量都有类型,类型可以是基本类型,也可以是引用类型。
    • 变量名必须是合法标识符。
public static void main(String[] args){
    int n;
    n = 5;
    int x, y, z;
}
局部变量(Local Variable)和实例变量
  • **局部变量:**方法或语句块内部定义的变量
    • 在使用前必须先声明和初始化(赋初值)
  • 实例变量·(成员变量、属性):
    • 方法外部、类的内部定义的变量
    • 如果不自行初始化,他会自动初始化成该类型的默认初始值(数值型变量初始化成0或0.0,字符型变量的初始化值是16位的0,布尔型默认是false)\u0000
常量(Final)

只能被初始化一次

final int C = 10;//常量要使用大写

final int MAX_SPEED = 120;//两个单词之间用下划线分开
命名规范
  • 所有变量、方法、类名:见名之意
  • 变量、方法名:
    • 首字母小写和驼峰命名法
    • run(),runRun(),age ageNew monthSalary
  • 常量:
    • 大写字母和下划线:MAX_VALUE
  • 类名:
    • 首字母大写和驼峰命名法:Man,GoodMan
运算符
  • Java语言支持如下运算符:
    • 算术运算符:+,-,*,/,%,++,–
    • 赋值运算符:=
    • 关系运算符:>,<,>=,<=,==,!=, instanceof
    • 逻辑运算符:&&,||,!
    • 位运算符:&,|,^,~,>>,<<,>>>(了解!!!)
    • 条件运算符:? , :
    • 扩展赋值运算符运算符:+=,-=,*=,/=
算术运算符
  • 二元运算符类型提升:
    • 整数运算:
      • 如果两个操作数有一个为Long,则结果也为Long
      • 没有Long时,结果为int,即使操作数全为short,byte,结果也是int
    • 浮点运算:
      • 如果两个操作数有一个为double,则结果为double
      • 只有两个操作数都是folat,则结果才为float
  • 一元运算符(++,–)
public static void main(String[] args){
    double d = 10.2%3;//小数也可以进行取余运算
    a++;//执行完后 先自增,后赋值
    ++b;//先自增再赋值
}
位运算符
  • ~ --取反
  • & --按位与
  • | --按位或
  • ^ --按位异或
  • << : 左移运算符
  • >>:右移运算符
  • 笔试可能会考:
    • 右移一位相当于除2取商
    • 左移一位相当于乘2
public static void main(String[] args){
    int b = 3<<1;//左移一位 相当于乘2 3✖2
    int a = 3<<2;//左移两位 相当与乘2乘2 3✖2✖2
    int c = 4>>2;//右移两位 相当与除2除2 4➗2➗2
}
字符串连接符
  • “+”运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接。
三目运算符
  • 三目运算符,语法格式:
    • x?y:z
    • 其中x为boolean类型表达式,先计算x的值,若为true,则整个三目运算的结果为表达式y的值,否则整个运算结果为表达式z的值。
  • 经常用来代替简单的if-else判断
控制语句
public static void main(String[] args){
    double d = Math.random();//随机数 返回随机小数
    int e = (int)d*5;//0~4的小数
    int r = 1 + (int)d*6;//1-6的整数 
    Math.random()*6+1;//1-6的整数
}
swirch多值选择结构

switch语句会根据表达式的值从相匹配的执行,一直执行到break标签处开始ak语句处或者是switch语句的末尾。与任一case值不匹配,则进入default语句(如果有的话)

使用Scanner获取键盘输入
public static void main(String[] args){
    //获取键盘输入
    Scanner sc = new Scanner(System.in);
    String name = sc.netxLine();
    int age = sc.netxInt();
}
while循环结构
//先判断 后执行
while (布尔表达式) {
    循环体;
}
  • 在循环开始时,会计算一次“布尔表达式”的值,若条件为真,执行循环体,而对于后来每一次额外的循环,都会在开始前重新计算一次。
  • 语句中应有循环趋向于结束的语句,否则会出现无限循环–“死循环”
//先执行 后判断
do{
    循环体
}while(布尔表达式);
for循环

for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。

public static void main(String[] args){
    int sum = 0;
    for(int i = 1; i <=100; i++){
        sum += i;
    }
    System.out.println(sum);
    /*
    1.执行初始化语句:i=1
    2.判断i<=100
    3.执行循环体
    4.步进迭代:i++
    5.回到第二步继续判断
    */
    
    for(int i = 1, j = i+10;i<5;i++,j=i*2){
        System.out.println(i+j);
    }
    
    /*无限循环 死循环*/
    for(;;){}
    while(true){}
}
方法

方法就是一段用来完成特定功能的代码片段,类似于其它语言的函数。

方法声明格式:
[修饰符1 修饰符2 ...] 返回值类型 方法名(形式参数列表){
    java语句:----
}
方法的调用方式:

对象名.方法名(实参列表)

方法的详细说明

  1. 形式参数:在方法声明时用于接收外界传入的数据。
  2. 实参:调用方法时实际传给方法的数据。
  3. 返回值:方法在执行完毕后返回给调用它的环境的数据。
  4. 返回值类型:事先约定的返回值的数据类型,如无返回值,必须显示指定为void
注意事项:
  1. 实参的数目、数据类型和次序必须和所调用的方法声明的形式参数列表匹配。
  2. return 语句终止方法的运行并指定要返回的数据,
  3. Java中进行方法调用中传递参数时,遵循值传递的原则(传递的都是数据的副本)。
  4. 基本类型传递的是该数据值得copy值。
  5. 引用类型传递是该对象引用的copy值,但指向的时同一个对象。
方法的重载(overload)

重载的方法,实际是完全不同的方法,只是名称相同而已。

构成方法重载的条件:
  1. 不同的含义:形参类型,形参个数,形参顺序不同
  2. 只有返回值不同不构成方法的重载。
  3. 只有形参的名称不同,不构成方法的重载。
递归结构

递归基本思想就是“自己调自己”

public static void main(String[] args){
    
}
static int count = 0;
static void a(){
    count++;
    if(count<10)
        a();
    else
        return;
}
阶乘
/*阶乘 n*(n-1)*/
	@Test
	public void test2() {
		System.out.println(TestFB.jiecheng(3));
	}
	public static long jiecheng(int n) {
		if (n<=1) {
			return 1;
		}else {
			return n*jiecheng(n-1);
		}
	}
递归的缺陷

简单的程序是递归的优点之一。但是递归调用会占用大量的系统堆栈,内存耗用多,在递归调用层次比较躲时速度要比循环慢的多,所以在使用递归时要慎重。

注意事项:

任何能用递归解决的问题能使用迭代解决,当递归方法可以更加自然地反映问题,并且易于理解和调试,并且不强调效率问题时,可以采用递归。

在要求高性能的情况下尽量避免使用递归,递归调用既花费时间又耗费内存。

/*循环语句完成阶乘运算*/
public static long jiecheng2(int n) {
		long sum = 1;
		for (int i = 1; i <= n; i++) {
			sum = i*sum;
		}
		return sum;
	}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值