小白学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<hour.length;i++){
            System.out.println(hour[i]);
        }
       数组遍历的另一种书写方式
        for(int k : hour){
            System.out.println(hour[k]); 
        }
函数:简单求和第一种   
        public class Hello {
    public static  void cal (int a ,int b){
        int i = 0;
        int sun = 0;
        for (i = a;i<=b;i++){
            sun += i;
        }
        System.out.println(sun);
    }
    public static void main(String[] args){

        cal(1,10);
        cal(30,40);
    }
}
    简单求和第二种
        public class Hello {
    public static  int sum (int i,int o){
        int sum = 0;
        for (int a = i;i<o;i++){
            sum += i;
            return sum;
        }
    }
    public static void main(String[] args){
        System.out.println("sum from "+ sum(1,10));
    }
}
new一个字符串的操作都包含了哪些操作?
            string  a = new String("this is a string");
            1、创建一个string 对象 
            2、用this is a string 初始化这个对象
            3、创建管理这个对象的变量a
            4、让a管理这个对象
        注:我们这里修改两个字符串将两个字符串进行赋值,那么这两个字符串a、b其实管理者一个对象,那么就像数组一样如果a[]==b[],那么如果进行了赋值,那么给数组a更改之后,如果输出数组b那么数组b也会被更改。
变量:本地变量 与 成员变量
本地变量:在方法里重新定义的变量叫本地变量
成员变量:不是重新定义在方法里的,原本就存在的叫成员变量
继承: 
public class Main extends china.china {
    hello text = new hello();
}

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);

    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,563评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,531评论 18 399
  • 为什么要学习java? java是目前最流行的编程语言,主流公司框架基本上都离不开java的影子,未来还会火很多年...
    东辉在线阅读 420评论 1 4
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,266评论 25 707
  • 不知从什么时候起 我突然发现自己离不开你 哪哪都是你的身影 就连睡梦中 都会梦见你 我爱上你了 你的一举一动 都影...
    紫玉云潇阅读 238评论 0 1