小白学java

目录

1、配置java 环境
2、java代码规范
3、java笔记
4、java程序编写

配置java环境

1、下载java 所需要的JDK (我下载的时1.8版本)地址: 地址JDK
2、下载IDEA 地址:IDEA地址
3、填写注册服务器 http://idea.iteblog.com/key.php

java代码规范
1、java关键字都是小写的,绝对不是大写开头的
2、java标识符命名规则
(1)由字母、数字、下划线、$组成、但是不能以数字开头(字母可以是中文、日文等)
(2)大小写敏感
(3)不能使用java中的关键字和保留字     比如说goto
(4)不用java中内置的类名     比如说System
(5)类名和文件名要一致,首字母大写
3、类名首字母要大写 '

java笔记
常量:程序中固定不变化的值
变量的定义:表示存储空间,可以用来存放一类型的常量,没有固定的值,并可以重复使用,可以存储某种类型的未知数据
变量的特点:1、占据着内存中的某一块区域2、可以重复使用3、该区域的数据可以在同一个类型范围内变化
变量的分类:变量根据定义的位置不同分为两大类  1:成员变量/字段:直接定义在类的{}中的变量(方法外)2:局部变量:定义在方法中的变量 变量除了成员变量就是局部变量
作用域:1、成员变量(在所定义的类中起作用)2、局部变量(从定义的第一个地方开始,紧跟着第一个}结束)
注意:1、成员变量必须定义在方法中才能够引用,否则不能实现 2、变量必须先声明,并且初始化才能够使用 3、声明变量必须要有数据类型 4、同一个作用域内变量名不能够重复
三元运算符:和oc一样,数据类型  变量 = boolean表达式?值1:值2(如果:boolean表达式结果为ture,三元运算表达式结果就是值1,如果是false那么三元表达式结果就是值2)
方法定义方法(method)函数(function)其实就是值一个特定的功能操作: 
JAVA方法的调用:1、静态方法不能够调用非静态方法
实现方法的调用:带static的是类方法,不带的是实例方法,那么实现类方法的就可以直接“.”出来,反而实例的时候需要new出来2、java方法中的main方法是由jvm(java虚拟机)来调用的,我们只需要启动jvm就可以了,因为main是主入口。
java方法定义的格式:[修饰符]返回值类型 方法名称([形参1,形参2]){
    方法体:
    [如果方法需要给调用者返回一个结果,此时使用return值];
}
方法中的术语:
  修饰符:public,static修饰的方法属于类,直接使用类名调用即可,现在都使用static进行修饰
  返回值类型:方法其实是在完成一个功能,该功能操作完毕之后,是否需要给调用者一个结果,如果不需要给调用者返回结果,此时使用关键字void来声明,无返回值的意思。
  方法名称:遵循标识符的规范,使用动词表示,首字母小写,若是多个单词组成,使用驼峰表达式进行。
  形式参数:方法圆括号中的变量,仅仅只是站位而已,参数的名称其实无所谓,形式参数可以有多个。
  参数列表:参数列表==参数的类型+参数的个数+参数的顺序
  方法签名:方法签名==方法名称+方法参数列表     在同一个类中方法签名是唯一的(eg:doWork(int a,int b))其实就是方法的名称在一个类当中是唯一的意思。
  方法体:方法中{}中的代码,表示具体完成该方法功能的代码
  返回值:1、在方法内部使用return的关键字 2、功能 :给调用者返回一个结果值,此时该方法不能使用void进行修饰 3、功能:结束当前的方法
  针对于有返回值的方法,调用者需要定义一个变量去接受返回值的类型结果
  实际参数:调用者调用某个具体方法的时候,实际传递的参数值
如何定义方法:
  到底需要定义什么功能方法?
  是否需要定义返回值类型的问题?
          答:我们说方法其实就是在完成某个功能,那么我们完成该功能之后是否需要返回数据,如果不需要则用void进行返回,如果需要返回一个结果,我们就把结果数据的类型作为好该方法的返回值类型。
          eg:求两者之和,我们在乎的是方法执行的过程,并且执行完毕之后,需要给调用者一个反馈
  是否需要形式参数?
          答:该方法在完成该功能的过程之中,是否有未知的因素参与,如果有请作为参数传递,如果没有则没有形参。
          eg:求两者之和,这两个数到底是什么其实对于方法来讲是未知的,仅仅只是调用者知道,并且调用者不同的参数值
方法重载判断原则:1、定义:在同一个类中,某个方法允许在一个以上的同名方法,只要他们的参数列表不同就可以  2、作用屏蔽了同一个功能的方法由于参数不同所造成方法名称不同。3、原则:“”两同一不同(两同:同类中,方法名相同  一不同:方法参数列表不同)⚠️:方法重载和方法的返回值类型无关,只是一般要求返回类型一致.并且即便没有形参也是可以的
例子:getSum(1,2); /*这个地方系统会自动判断出来你选择的是哪个方法 */getSum(1.2,1.1);/*调用double*/ (虽然方法是相同的,但是形参是不同的,所以可以使用重载模式)

JVM内存分化,认为的根据不同内存空间的存储以及存储的数据
        程序计数器:当前线程所执行的字节码的行号指示器.
        本地方法栈:为虚拟机使用的native方法服务
        java虚拟机:描述java方法执行的内存模型,每个方法被执行的时候都会同时创建一个栈帧用于存储局部变量表,操作栈,动态链接,方法出口等信息⚠️:每一个方法创建一个栈帧,栈帧存放了当前方法的数据类信息(局部变量)当前方法调用完毕,该方法的栈帧就被销毁了。
        java堆:被所有的线程共享的一块内存区域,在虚拟机启动时创建,所有的对象实例以及数组都要在堆上分配(使用new关键字,就是代表在堆中开辟了一块新的空间)
        方法区:线程共享的内存区域,存储已被虚拟机加载的类信息,常量,静态变量即时编译器编译后的代码数据等(这个区域的内存回收目标主要是针对常量池的回收和对类型的卸载)
        栈:后进先出,因为后进来的是在最上面,栈当中是引用堆当中的地址也就是说当中放的就是0x******
        堆:先进先出,new就代表在堆空间储存数据,再往底层说其实他是存储地址的就是16进制的地址0x********,若堆中的内存空间没有被引用时候,就变成了垃圾,就等着垃圾回收器来回收。

GC(Garbage Collection):垃圾回收器:
        java的自动垃圾回收机制:简单理解为,程序员不用手动的控制内存的释放每当jvm发觉内存资源紧张的时候,就会自动的清除无用的对象(没有被引用到的对象)所占的内存空间 .⚠️ java的垃圾回收器,自动回收的是堆空间的内存,而栈空间内存会随着该方法的执行结束,自动释放该方法的栈帧内存。

什么是数组:
        数组:是在程序设计中,为了方便,把具有相同类型的若干个变量按照有序的形式组织在一起的数据形式,这些按一定顺序排列的同类型数据的几个成为数组。而数组中的每一个数据称之为数组元素,数组元素以索引表示其数组的位置,索引从0开始,步长是1,有点像excel表格的行号,逐步递增,好比宾馆的房号

基本数据类型:byte short int long float double char boolean
引用数据类型:类 接口 数组
数组的定义:
      方式1:数组元素的类型[] 数组名; int[] ages;   推荐使用
      方式2:数组元素的类型 数组名[];int ages[];    
      ⚠️:数组是必须初始化的,才能使用4  因为初始化才会分配空间

数组初始化方式:
      静态初始化:特点就是由我们为每一个数组元素进行设置初始值,而数组的长度系统自动分配
            语法:数组元素类型[] 数组名 = new数组元素类型[] {元素1,元素2,元素3,........};
            int[] num = new int []{1,3,5,7,9};
            简单写法 (必须声明之后立刻初始化,不能声明之后再初始化):int [] num =  {1,3,5,7,9};
            int [] num = new int[]{1,3,4,5}; (1、声明一个int 类型的数组 2、初始化数组 3、把初始化的数据赋值给num变量)
            System.out.println(num.length);
            num =  new int[]{2,4,8};
            System.out.println(num.length);
            这里我总结下上面的这四句代码的意思:首先我在堆当中创建了一块内存空间,然后我在里面存储了1345,然后我在用栈当中的num变量进行引用取到了这这块地址当中的1345,再之后我又new了一块地址,存储248 ,之后我同样用num这个变量存储这个地址下面的元素,将之前的num的值进行覆盖,所以之后输出的num值是248,解释完毕
      动态初始化:
             由我们来设置数组的元素个数(数组长度)而每一个数组元素的初始值由系统决定.
             语法: 数组元素类型[] 数组名 = new 数组元素类型[length];
             eg.:int [ ] args = new int [100];
             /*数组的动态初始化操作*/
            int [] num = new int[3];
            System.out.println(num.length);
            num = new int[5];
            System.out.println(num.length);
            这里我在对上面的四句代码进行解释:实际上也是分两次在堆当中进行分配内存空间,每次新开辟空间都是不一样的地址。那么num在栈当中分别引用了第一个空间和第二个空间。所以两次打印num的长度是不一样的(第一次是3第二次是5)
             什么时候使用静态初始化,什么时候使用动态初始化?
             答:事先知数组元素是什么的时候使用静态初始化,当我们不知道的时候我们使用动态初始化。
      ⚠️:无论用哪种方式初始化数组,一旦初始化完成吗数组的长度就是固定的了,数组中的元素个数就已经固定了,不能改变,如果需要更改只能重新做初始化  
      ⚠️:不能同时使用静态初始化数组和动态初始化数组
数组的基本操作:
      1、获取元素:元素类型 变量 = 数组的名称[index];
      2、设置元素:数组名[index] = 值;
      3、遍历元素:建议使用for循环
      4、数组长度:数组名.length;length不是属性,不是方法
      5、索引范围:从0开始,逐一递增,[0,数组名.length-1];
数据类型:
/*final 是不能被更改的意思 使用之后就不能被赋值*/
        final  int bill = 100;
/*八进制 和 十六进制*/
 八进制是0开头的数 十六进制的数0X开头的数
 数据类型转换的过程中,如果出现远算表达式,表达式的结果按照最大的类型进行输出(比如:float 和 long 进行相加那么最后的结果一定是float类型的,因为float类型更大)
 有小数点的数模认为double 而不是float 如果想定义float 必须在1.0后面加上F,譬如1.0F。
 四舍五入:/*原本四舍五入实现的结果是long类型的*/
      /*四舍五入*/
       int d =  (int)Math.round(-10.9);
       System.out.println(d);
字符和字符串:
       字符 '你' 字符串 “你妹”
逃逸字符: 主要体现在\"\" 把字符串进行包括
        System.out.println("请分别输入\"5 7\"");
&&和||:
    &&两者都为都为true才是true  ||  两者都为false才是false
   运算符优先级: !> && > ||
循环语句: while 和 do while  do while 代表先循环后判断 而while 代表先判断再循环
          int type = 1;
            do {
                type ++ ;
            }while (type>3);
            System.out.println(type);
break和continue的区别:
        break 是跳出当前所有循环判断 continue是跳出当前循环判断 然后继续往下走。如果是多层嵌套break只能跳出一层循环.但是如果我想跳出多层循环怎么办呢?我们需要在循环前放一个标志,然后break这个标志就可以了。我们在for循环之前加一个标志。然后break 标志;就OK了。
数组:
        数组遍历 初始化: 
        随机数的书写方式 :(int)(Math.random()*100)
     int [] hour = new int[(int)(Math.random()*100)];
        System.out.println(hour.length);
        for(int i =0 ;i
java方法调用
public class Main {    public static void main(String[] args) {        System.out.println("Hello World!");        Main.doWork();    }    static void doWork(){        System.out.println("我是你爸爸");//调用方法    }    public static void work(){        System.out.println("我是你的二号爸爸");    }}

java程序编写
public class Main {    public static void main(String[] args) {        System.out.println("我是你爸爸");    }}
三元表达式
public class Main {    public static void main(String[] args) {        double num = 3.51;        int num1 = (int)num;        double num2 = num - num1;        int result = num2>= 0.5 ? num1+1 :num1;        System.out.println(result);    }}
java 无参数无返回值 无参数有返回值 有参数无返回值 有参数有返回值 demo
public class Main {    public static void main(String[] args) {        System.out.println("Hello World!");        Main.doWork();        Main.p();/*调用*/        Main.pValue("hello");//调用        int age =  Main.getAge();        System.out.println(age);        int sum = Main.getSum(3,4);        System.out.println(sum);    }    /*无参数 无返回*/    /*需求 :定义一个方法专门打印---------*/    static void p(){        System.out.println("---------");//调用方法    }    /*有参数 无返回值*/    /*需求:打印任意值*/    static void pValue(String va){        System.out.println(va);//传递这个string参数    }    /*无参数 有返回值*/    /*需求:返回我的年龄*/    static int getAge(){        return  17;    }    /*有参数有返回值*/    /*求两个数之和*/    static int getSum(int a,int b){            return  a+b;    }    static void doWork(){        System.out.println("我是你爸爸");//调用方法    }    public static void work(){        System.out.println("我是你的二号爸爸");    }}  
java实现发短信功能(带参 带返)
public class Main {    public static void main(String[] args) {        System.out.println("Hello World!");        int ret = sendMsg("10086","爱过");        int temp = sendMsg("10010","另一个内容");    }    /*实现一个发送短信的例子*/    //方法名称 sendMsg    /*0:发送失败       1:发送成功      2:对方已经接收    * */    static int sendMsg(String phoneNum, String content){        /*发送短信的逻辑代码*/        return  int 类型的值;            }}
  
java实现登录功能
/*实现登录功能*/static boolean login (String username,String password){    /*实现登录检查账号密码是不是正确*/    /*做判断返回bool类型的值*/        }
java实现递归算法
需求如下,高中数学数列的时候,我们见过菲波纳契数列,其公式为:F(0)=0,F(1)=1,Fn = F(n-1)+F(n-2),现在求F(5)的值,怎么实现呢?
代码如下public class Main {    public static void main(String[] args) {        System.out.println("Hello World!");        int ret = fn(6);        System.out.println(ret);    }    static int fn (int n){        if (n==0){            return  0;        }        else if(n==1){            return  1;        }else {            return fn(n-1)+fn(n-2);        }    }}
这样就是实现了递归的代码编写
sout 输出语句
psvm 创建一个类
java程序常见报错信息(控制台)
java.lang.NullPointerException----代表空指针异常或者叫做空引用异常(当数组还未初始化 就直接操作数组就会空指针异常)
ArrayIndexOutOfBoundsException------数组的索引越界异常(简单来说就是数组一共五个元素,你去区第六个就会出现这个问题)

字符串进行拼接
Scanner in = new Scanner(System.in);
        /*in.nextLine 的意思 是让in 去做nextLine的动作 ()的意思就是 一个动作. 如果把数字放在 前面进行 + 那么他会先运行前面证书的加法,如果放在后面则会让整数类型的数依次拼接到前面字符串后面。因为运算从左到右进行远算的 所以才会出现这样的现象*/
//        System.out.println(in.nextLine());
        /*字符串进行拼接 */
        System.out.println("Answer:"+in.nextLine());
简单的减法运算
public class Hello {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        /*初始化变量*/
        int price = 0;
        /*<类型名称><变量名称> = <初始值>*/
        /*进行手动赋值*/
        price = in.nextInt();
        int chage = 100-price;
        System.out.println(chage);

    }
}

你可能感兴趣的:(小白学java)