zoukankan      html  css  js  c++  java
  • java基础(1)

    1.常量

    常量是指程序运行期间,内容不可发生改变的量,像10,10.2,“hello”等都是常量

    2.变量

    变量与常量相反,程序运行期间,可以在一定范围内发生改变的量就是变量,变量的本质其实就是用来存放数据的一小块内存空间

    变量的格式:数据类型 变量名 = 数据值

    标识符的规则:

    • 只能由字符、下划线_和美元符$组成
    • 不能以数字开头s
    • 不能是java的关键字

    常见的标识符命名规则(软性建议):

    • 见名只其意
    • 只使用英语和数字,更不要使用拼音
    • 类:每个单词首字母大写, 如Hello
    • 变量第一个单词完全小写后续更多单词首字母大写(小驼峰式),如ageOfLuyi
    • 方法:与变量规则一样,如show(),getAge()
    • 包:其实就是文件夹,由于对类进行管理,命名建议为全部小写,多级包用点.隔开

    变量的注意事项:

    • 创建的多个变量不能重名
    • 变量一定要赋值之后才能使用
    • 变量的作用域问题:变量定义在哪个大括号中,就只能在哪个大括号中使用,超过所属的大括号,就无法使用
    • 可以在一个语句中同时定义类型相同的多个变量

    3.数据类型的分类

    基本类型

    • 整数类型:byte(占一个字节) short(占2个字节) int(占4个字节) long(占8个字节)
    • 浮点类型:float(占4个字节) double(占8个字节)
    • 字符类型:char(占2个字节)
    • 布尔类型:boolean(占1个字节)

    引用类型

    • 字符串
    • 接口
    • 数组
    • Lambda
    • ...

    注意事项:

    • 整数类型默认为int类型
    • 浮点数类型默认为double类型
    • 定义一个long型数据,在数值后面要用字母L作为后缀(大小写都可以,推荐使用大写),如5000L
    • 定义一个float型数据,在数值后面要用字母F作为后缀(大小写都可以,推荐使用大写),如3.14F
    • 字符char型数据,是可以包含中文的

    4.运算符

    运算符:对常量或变量进行操作的符号,叫做运算符,例如“+”
    表达式:用运算符将多个常量或变量连起来的式子,叫做表达式,例如“a+b”
    常用的运算符:

    算数运算符:

    1.加号(+) :跟数学中的加法一样,但是+对于字符串来说,并不是相加的意思,而是连接的功能,需要注意优先级问题

    String str5 = "abc" + 10 + 20
    //结果为:abc1020
    String str5 = "abc" + (10 + 20)
    //结果为:abc30
    

    2.减号(-)

    3.乘号(*)

    4.除号(/)这里的除号是整除,只看商,不看余数

    5.求余(%):取模运算,取得余数,只看余数,不看商

    6.自增运算符(++):在变量的原有基础上加1,可以写在变量前面,也可以写在变量后面

    a.单独使用的时候:前++和后++无任何区别

    b.如果和其他运算符混合使用时:如果是前++,那么变量马上+1,然后拿着结果进行使用,如果是后++,那么首先使用当前的本来数据,然后再进行+1操作

    • 自减运算符(--):在变量的原有基础上减1
    • 计算中如果有小数参与,那么结果一定是小数

    赋值运算符

    • 基本赋值运算符:表示将右侧的数值赋给左边的变量
    • 复合赋值运算符:如 a += 3,a *= 4
    • =左侧不能是常量,右侧既可以是常量也可以是变量

    比较运算符:比较运算符的结果一定是一个布尔值,要么为true,要么为false

    • 大于 >:
    • 小于 <:
    • 大于等于 >=
    • 小于等于 <=
    • 不等于 !=
    • 等于 ==

    逻辑运算符:

    • 与(&):全为true才为true
    • 或(|):有一个true就是true
    • 异或(^):相同是true,不同是false
    • 非 取反(!):本来true变成false,本来是false变为true
    • 短路使用:如果左侧已经可以判断到最终结果,那么右侧将不再执行
      • 短路与(&&)
      • 短路或(||)

    位运算符(了解)

    ^的特殊使用:两次异或不改变原值

    位运算可能会出现的面试题:

    A:请实现两个变量的交换:用位异或运算符实现

    a = a^b; b = a^b; a = a^b

    B:请用最有效率的方式计算出2乘以8的结果

    2<<3

    5.Scanner键盘输入

    使用引用类型的三个步骤:

    1.导包:指定需要使用的目标在什么位置,在public class之前写一行代码 import 包路径名

    import java.util.Scanner;
    

    2.创建:数据类型 变量名称 = new 数据类型()

    Scanner sc = Scanner(System.in);
    

    3.使用:变量名称.方法名();

    String str = sc.next()
    	int num = sc.nextInt()
    

    总代码:

    import java.util.Scanner;
    public class Sc{
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            System.out.println("please input something");
            String str = sc.next();
            System.out.println(str);
        }
    }
    

    6.流程

    顺序结构:程序自上而下一条线走下来

    选择结构(if-else):

    1.单if语句

    if(布尔表达式){
    	语句体;
    }
    //如果布尔表达式为true,则执行语句体,否则,不执行;
    

    2.标准if-else语句

    if(布尔表达式){
    语句体A;
    }else{
        语句体B;
    }
    //如果布尔表达式为true,则执行语句体A,否则,执行语句体B;
    

    3.扩展if-else语句

    if(布尔表达式1){
        语句体A;
    }else if(布尔表达式2){
        语句体B;
    }
    ...
    else if(布尔表达式N){
        语句体N
    }else{
        语句体N+1
    }
    

    例子:求两个数的最大值

    import java.util.Scanner;
    public class MaxNumber{
        public static void main(String[] arg){
            Scanner sc = new Scanner(System.in);
            System.out.println("please the num1: ");
            int num1 = sc.nextInt();
            System.out.println("please the num2: ");
            int num2 = sc.nextInt();
            if(num1 > num2){
               System.out.println("the max number is" + num1);
           }else{
               System.out.println("the max number is" + num2);
           }
    	}
    }
    

    选择结构(switch):

    格式:

    switch(表达式){
    case 值1:
    语句体1;
    break;
    case 值2:
    语句体2;
    break;
    ...
    default:
    语句体n + 1;
    break;
    }

    格式解释说明:

    1.switch:说明这是switch语句

    2.表达式:可以是byte,short,int,char,不可以是long,JDK5之后可以是枚举,JDK7以后可以是字符串

    3.case:后面的值就是要和表达式进行比较的值

    4.break:表示程序到这里中断,跳出switch语句

    5.default:如果所有情况都不匹配,就执行这里,相当于if语句中的else

    执行流程:

    1.首先计算表达式的值

    2.和每一个case语句进行匹配,如果有匹配的就执行对应的语句体,看到break就结束

    3.如果没有匹配到,就执行default的语句n+1

    注意事项:

    1.case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的

    2.default可以省略,但是不建议,因为它的作用就是对不正确的情况给出提示

    3.break可以省略,但是结果可能不是我们想要的,会出现case穿透的现象,所以不推荐省略

    4.default不一定要在最后,可以是任意位置,但是建议放在最后

    5.switch语句结束的条件

    • 遇到break就结束
    • 执行到末尾就结束

    示例代码:

    import java.util.Scanner;
    
    public class Demo11 {
    	public static void main(String[] args) {
    		System.out.println("请输入一个数字(1-7)");
    		Scanner sc = new Scanner(System.in);
    		int day = sc.nextInt();
    		String week = null;
    		switch(day){
    		case 1:
    			week = "一";
    			break;
    		case 2:
    			week = "二";
    			break;
    		case 3:
    			week = "三";
    			break;
    		case 4:
    			week = "四";
    			break;
    		case 5:
    			week = "五";
    			break;
    		case 6:
    			week = "六";
    			break;
    		case 7:
    			week = "天";
    			break;
    			default:
    				System.out.println("数据错误!");
    		}
    		System.out.println("今天星期" + week);
    	}
    }
    

    循环结构

    循环结构的组成部分

    • 初始化语句:这部分内容最先执行,而且仅执行一次;
    • 条件判断:如果成立,则循环继续,如果不成立,则循环中止;
    • 循环体:每次循环都将重复执行循环体的代码内容;
    • 步进语句:每次循环执行后,都会执行一次步进语句;

    for 循环:通常用于控制次数的场景

    for(初始化语句;条件判断,步进语句){
    	循环体;
    }
    

    例子:求出1-100的偶数和

    public class EvenNumber{
        public static void main(String[] arg){
            int sum = 0;
            for(int i = 1; i < 101; i ++){
                if(i % 2 == 0){
                    sum += i;
                }
            }
            System.out.println("the sum is: " + sum);
        }
    }
    

    whlie循环:

    标准模式:
    while(条件判断){
    	循环体;
    }
    //当条件满足时执行循环体,不满足则跳出循环体
    
    扩展模式:
    初始化语句;
    while(条件判断){
    	循环体;
    	步进语句;
    }
    

    例子:求1-100的奇数和

    public class OddNumber{
        public static void main(String[] arg){
            int sum = 0;
            int i = 1;
            while( i < 101){
                if(i % 2 == 1){
                    sum += i;
                }
                i ++;
            }
            System.out.println("the sum is: " + sum);
        }
    }
    

    for循环与while循环的区别:for循环的步进语句还能接着走,而whlie的步进语句由于continue跳出了循环,导致剩余内容的步进语句也没被跳过

    public class ContinueDemo{
        public static void main(String[] arg){
            for(int i = 1; i < 10; i ++){
                if(i == 4){
                    continue;
                }
                System.out.println(i);
            }
            System.out.println("=====================");
            int i = 1;
            while(i < 10){
                if(i == 4){
                    continue;
                }
                 System.out.println(i);
                 i ++;
            }
        }
    }
    //输出结果为:
    1
    2
    3
    5
    6
    7
    8
    9
    =====================
    1
    2
    3
    

    1.for循环格式固定,控制次数更方便,而while循环格式更加灵活,不在意循环次数,循环次数确定的使用for较多,次数不确定,使用while较多

    2.for循环小括号内定义的变量,循环内可用,循环外不可用,while循环的初始化表达式本来就在外面,仍然可用

    3.跳转语句continue的效果不同:

    跳转控制语句:

    1. break语句:跳出循环
    2. continue语句:只跳出本次循环,后续还要继续循环

    死循环(永真循环):
    这两种方法可以实现死循环

    while(true){
    }
    for(; ;){
    }
    

    嵌套循环:

    //打印一天中所有可能出现的时:分
    public class Clock{
        public static void main(String[] arg){
            for(int i = 0; i < 24; i ++){
                for(int j = 0; j < 60; j ++){
                    System.out.println(i +":" + j);
                }
            }
        }
    }
    

    7.集成开发环境(IDE)

    我们这里介绍Eclipse,因为他是完全免费的

    Eclipse IDE基本特点:

    • 完全免费
    • 完全开源
    • java语言编写
    • 绿色软件:解压就能用,不用安装
    • 扩展性很强

    下载:官网:http://www.eclipse.org
    安装:解压就可直接使用
    卸载:删除从官网下载的文件夹即可

    Eclipse使用的常用快捷键

    • 添加单行注释:Ctrl + / 取消:Ctrl + /
    • 添加多行注释:Ctrl + Shift + / 取消:Ctrl + Shift + /
    • 向上向下复制一行:Ctrl+Alt+向上/向下
    • 向上向下移动一行:Alt+向上/向下
    • 删除当前行:Ctrl+D
    • 格式化:Ctrl+Shift+F
    • 智能提示:Alt+/

    8.数组的使用

    概述:数组是一种引用类型。变量只可以存放一个数据,数组则可以存放多个类型统一的数据,可以存放基本类型,也可以存放引用类型;

    数组的格式:

    • 数据类型[] 数组名称;
    • 数据类型 数组名称[];(不推荐)

    数组的初始化:使用之前一定要先初始化

    1.动态初始化:指定数组的长度

    //创建了一个可以存放三个数据的int类型的数组array1
    int array1 = new int[3]
    

    2.静态初始化:指定数组的内容,会自动根据内容推算出数组的长度

    /*标准格式, 标准格式可以拆分为
    int array2[];
    array2[] = new int[]{1, 2, 3};*/
    int array2[] = new int[]{1, 2, 3};
    System.out.println(array1);
    /*简便格式,不可以拆分为
    int array3[];
    array3 = {1, 2, 3};*/
    int array3[] = {1, 2, 3};
    

    数组的访问:

    • 直接打印array1会得到一个包括地址值,如[I@15db9742
    • 打印array1[0]:会得到数组中索引为0的值,数组的索引也就是数组中元素的编号,编号从0开

    数组的默认值:

    当你没有给数组赋值的时候,数组会有自己的默认值,不同数据类型的数组会有不同,整数类型的数组的默认值为0,布尔值类型的数组的默认值为false,浮点类型的数组的默认值为0.0

    数组获取长度:数组名称.length,当一个数组在内存中被创建了的时候,那么数组的长度旧不能发生改变

    数组在堆栈中存放的情况:

    二维数组:元素是一维数组的数组

    1.格式:

    A.数据类型[][] 数组名 = new 数据类型[m][n];

    B.数据类型[][] 数组名 = new 数据类型[m][];

    C.数据类型[][] 数组名 = new 数据类型[][]{{...},{...}};

    D.数据类型[][] 数组名 = {{...},{...}};

    9.java内存分配

    栈(Stack):主要用来存放局部变量

    堆(Heap):凡是new出来的东西,都在堆当中,都有地址,堆当中的数据有默认规则:

    如果是整数,默认是0

    如果是浮点数,默认为0.0

    如果是字符,默认是‘u0000’(Unicode写法)

    如果是布尔值:默认是false

    如果是引用类型(包括Striing),默认是null(空常量)

    数据使用完毕后,在垃圾回收器空闲的时候回收

    方法区(Method Area):

    与面向对象的知识点相关,再后面详说

    本地方法区(Native Method):

    与操作系统相关

    寄存器(Register):

    与CPU相关,性能极高

    10.方法

    概述:对于一些复杂的代码逻辑,如果希望重复使用这些代码,并且做到“随时任意使用”,那么就可以将这些代码放在一个大括号“{}”之中,并且起一个名字,使用代码的时候,直接找到名字调用即可;

    方法的格式:

    修饰符 返回值类型 方法名称(参数类型 参数名称){  
    	方法体;  
    	return返回值;  
    }
    

    解释:

    • 修饰符:目前就用public static,后面再详细讲解其他修饰符
    • 返回值类型:方法最终产生的数据是什么类型
    • 方法名称:自定义的名字,规则和变量一样
    • 参数类型:进入方法的数据是什么类型
    • 参数名称:进入方法的数据,对应的变量名称
    • 方法体:需要执行的若干代码
    • return:有两个作用,结束当前方法和带着后面的返回值交给调用处
    • 返回值:方法的最终数据结果

    注意事项:

    • 返回值类型必须和返回值对应
    • 如果参数有多个,那么使用逗号隔开
    • 如果不需要参数,那么小括号内可以留空

    调用方法的三种方法:

    • 单独调用:格式为 方法名称(参数值),这种调用无法使用方法中的返回值
    • 打印调用:格式为 System.out.println(方法名称(参数值)),调用方法,并把返回值打印出来
    • 赋值调用:格式为 数据类型 变量名称 = 方法名称(参数值),注意变量的数据类型必须和方法的返回值数据类型一致

    有返回值的方法的例子:求两个数之和

    public class Demo2 {
    public static int plus(int num1, int num2){
    	return (num1 + num2);
    }
    
    public static void main(String[] args) {
    	int sum = plus(3, 4);
    	System.out.println("the sum is: " + sum);
    }
    

    }

    关于名称的两个问题:

    • 变量的名称能不能和方法的名称一样?可以
    • 如果有两个方法,每一个方法当中都有一个同名的变量,是否可以?可以,虽然名称相同,但是他们是两个变量

    没有返回值的方法格式:没有返回值的时候,只能使用单独调用,不能使用打印调用或赋值调用

    修饰符 void 方法名称(参数类型 参数名称){  
    	方法体;  
    	return;//最后一行的return可以省略不写  
    }
    

    无返回值的方法的例子(遍历数组并打印出来的方法):

    public class Demo3 {
    	public static void arrayMethod(int[] array){
    		for(int i = 0; i < array.length; i ++){
    			System.out.println(array[i]);
    		}
    	}
    	
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		int[] array1 = {1, 2, 3};
    		arrayMethod(array1);
    	}
    	
    }
    

    方法的重载:

    1.问题描述:对于类似的多个方法,全都是执行相加的操作,但是因为参数列表不一样,所有要记住很多名字,太麻烦

    2.解决方案:使用方法的重载技术,可以达到效果,对于类似功能的多个方法,只要记住一个相同的方法名即可,可以根据参数列表的不同自动适配

    3.方法重载(Overload):方法的名称相同,但是参数列表不同(包括参数个数不同,参数类型不同,参数的多类型顺序不同)

    重载的例子:

    public class Demo4 {
    	public static void main(String[] args) {
    		int sum1 = Plus(1, 2);//3
    		int sum2 = Plus(1, 2, 3);//6
    		int sum3 = Plus(1, 2, 3, 4);//10
    		System.out.println(sum1 + " " + sum2 + " " + sum3);
    	}
    	public static int Plus(int a, int b){
    		return a + b;
    	}
    	public static int Plus(int a, int b, int c){
    		return a + b +c;
    	}
    	public static int Plus(int a, int b, int c, int d){
    		return a + b + c +d;
    	}
    }
    

    重载的注意点:

    1.无法根据参数的名称进行重载,当两个方法的参数名不同,但是功能完全一样时,不能进行重载

    2.无法根据返回值类型的不同进行重载,当两个方法的返回值类型不同时,也不能进行重载

    参数传递:

    1.概述:在调用方法的时候,向方法内传入一些数据的动作

    2.形式参数与实际参数:在定义方法的时候,写在小括号里面的参数就是形式参数,而在调用方法时,真正传入方法里的数据就叫做实际参数

    3.参数传递的过程的两项规则:对于基本数据类型(以及String)来说,传递的是值,形式参数的操作不会影响实际参数;而对于引用类型(除String外),传递的是地址,形式参数的操作会影响实际参数

  • 相关阅读:
    CMake 手册详解(十九)
    CMake 手册详解(二十三)
    CMake 手册详解(二十)
    xtrabackupex xbstream 流备份还原(转载)
    xtrabackup 安装与使用(转载)
    怎么样写好一篇技术博客
    python为什么需要符号表
    cmake的一些基本概念及源码结构
    让IT工作者过劳的13个坏习惯
    SHTML和HTML的区别
  • 原文地址:https://www.cnblogs.com/luyi001/p/13307134.html
Copyright © 2011-2022 走看看