zoukankan      html  css  js  c++  java
  • 自学it18大数据笔记第一阶段Javaday03day04

    笔记为自学时随手记录,如有错误,欢迎指正,不胜感激!现已广州转移至上海,欢迎小伙伴们加qq或微博沟通交流(QQ,微博和博客同名

    笔记分享:自学it18大数据笔记-第一阶段Java-day03-day04——会持续更新……

    day03笔记见下图:

    day04笔记见下图:

    Day03

    回顾

    echo %classpath%  查看classpath

    float x=100.0f  要强转  降级

    函数 function,方法method   封装功能代码  不能嵌套定义

    函数的格式

    修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,...)

             {

                              执行语句;

                              return 返回值;

             }

             返回值类型:函数运行后的结果的数据类型。

             参数类型:是形式参数的数据类型。

             形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数。

             实际参数:传递给形式参数的具体数值。

             return:用于结束函数。

             返回值:该函 数运算后的结果,该结果会返回给调用者

    函数就像个黑匣子 有输入:参数   就有输出:返回值(没有返回值void)  所以函数2个明确就是知道进去什么,要出来什么!

    ######

    有种 参数个数不确定情况:int...arg  

    Function的调用

    ============

    函数名(实参)  可以无参

    =================

    \n是换行,英文是New line,表示使光标到行首

    \r是回车,英文是Carriage return,表示使光标下移一格

    \r\n表示回车换行

    \t Tab键

    函数的重载overload

    -----------------

    Recursive递归  很多命令带参 –R  就是递归的意思  尤其是文件夹的操作的时候

    Fabric阶乘

    ################

    +++++++++++++++

    数组array

    ---------------------------------------------

    同一种类型数据的集合,容器   以0为基址

    格式:

    元素类型[] 数组名 = new 元素类型[元素个数或数组长度];   固定长度

    示例:int[] arr = new int[5];   arr.length数组的长度  length是属性不是方法

    元素类型[] 数组名 = new 元素类型[]{元素,元素,……};

    int[] arr = new int[]{3,5,1,7};

    int[] arr = {3,5,1,7};

    Java没有显式的指针操作  引用就是它指针   指针是对象的内存地址!

    Null 对象不存在,不能访问起属性和方法

    内存的结构

    对象和数组都在 堆 里面 通过new创建的实体 都有内存地址 都有默认的初始化值

    栈存储局部变量 使用完就释放

    方法区

    本地方法区

    寄存器

    数组排序

    选择排序  依次后比 选出最小(大)放在最前 2个for的顺序相同

    class ArrayDemo{

             public static void main(String[] args){

                      int[]  arr = {34,46,53,44,56};

                      for(int i=0; i<arr.length-1; i++){

                              for(int j=i+1; j<arr.length ; j++){

                                       if(arr[i] > arr[j] ){

                                                int temp = arr[i];

                                                arr[i] = arr[j];

                                                arr[j] = temp;

                                       }

                              }

                      }

                      //增强for

                      for( int ii :arr){

                              System.out.print(ii + "  ")       ;               

                      }

                      System.out.println();

             }

    }

    冒泡排序 2个比较  每一轮就把最大的沉底了(放在最后)==大数沉底 2个for的循序相反

    class ArrayDemo{

             public static void main(String[] args){

                      int[]  arr = {34,46,53,44,56};

                      for(int i=arr.length-1; i>0; i--){

                              for(int j=0; j<i ; j++){

                                       if(arr[j] > arr[j+1] ){

                                                int temp = arr[j];

                                                arr[j] = arr[j+1];

                                                arr[j+1] = temp;

                                        }

                              }

                      }

                      //增强for

                      for( int ii :arr){

                              System.out.print(ii + "  ")       ;               

                      }

                      System.out.println();

             }

    }

    增强for循环

         For(带参变量:数组)==变量依次取得数组中的元素

    索引就是排了序的数据

    折半查找(二分查找)

    在有序的数列中,进行二分查找,每次取出搜索范围的中间值进行比较,依次再进行范围的缩小,直至找到所需的值。

    class HalfFind{

             public static void main(String[] args){

                      int[] arr = {33,44,35,55,36,53,43,77,66,52};

                      int[] arr0 = ArrStort(arr);

                     

                      //增强for

                      for( int ii :arr0){

                              System.out.print(ii + "  ")       ;               

                      }

                      System.out.println();

                      System.out.println("-------------------------------------------");

                     

                      int num = 77;

                      int index = -1;

                      int min = 0;

                      int max = arr.length - 1;

                      while(min <= max){

                              int mid = (min + max) / 2;

                              if(arr[mid] == num){

                                       index = mid;

                                       break;                               

                              }

                              else if(arr[mid] > num){

                                       max = mid - 1;

                                      

                              }

                              else{

                                       min = mid + 1;

                              }

                      }

                      System.out.println(index);

                             

             }

            

             public static int[] ArrStort(int[] arr){

                      for(int i=0; i<arr.length-1; i++){

                              for(int j=i+1; j<arr.length ; j++){

                                       if(arr[i] > arr[j] ){

                                                int temp = arr[i];

                                                arr[i] = arr[j];

                                                arr[j] = temp;

                                       }

                              }

                      }

                      return arr;

             }

    }

    二维数组【】【】   数组的数组

    格式1:int[][] arr = new int[3][2];

    格式2:int[][] arr = new int[3][];

    格式3:int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};

    注意特殊写法情况:int[] x,y[]; x是一维数组,y是二维数组。

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    Day04

    回顾作业: 一个字节byte转换成0~255之间的整数  用到 &

    Byte b = 100;

    Int I = b & 0xff;

    面向对象 OOP   一切都是对象

    OOP:Oriented object program 面向对象编程

    OOA:Oriented object analyze 面向对象分析

    OOD:Oriented object design 面向对象设计

    C语言是面向过程的,

    Entity实体      new在创建对象中常用 分派空间   开发就是不断创建对象 适用对象

    面向对象特征:封装encapsulation   继承inheritance   多态polymorphism

    ---------------

    物以类聚

    对现实事物的软件抽象。   对象就是切实存在的个体  

    类和对象 就是图纸和汽车的关系

    类就是图纸

    汽车就是堆内存中的对象

    ========================================

    生活中描述事物无非就是描述事物的属性和行为。

    如:人有身高,体重等属性,有说话,打球等行为。

    Java中用类class来描述事物也是如此

    属性:对应类中的成员变量。

    行为:对应类中的成员函数。

    定义类其实在定义类中的成员(成员变量和成员函数)。

    ====================================

    类成员    相对的概念

    ---------

    1,成员变量  属性property==字段field   数值类型的基本默认为0

    2,成员函数  方法

    3,定义方式   class 类名  //首字母大写,或 $_  其他都不能用

    堆heap:数组和对象在堆中

    栈stack:函数方法在栈中   局部变量在在栈中

    (局部变量 是函数或语句内部的变量,在栈中  没有初始值 定义局部变量必须初始化 || 成员变量 是对象类中在整个类中都可以被访问 在堆中  有默认的初始值)

    局部变量是对成员变量的一个应用 通过内存地址

    Java vm调整堆大小

    ----------------------------------------------------------------------

    默认jvm分配的栈空间大小是1m

             默认jvm分配的堆空间的最大值是1/4物理内存。

    Java –X                              //查看Java非标准输出帮助

             Java –Xmx100m         //设置jvm的堆空间最大值

             Java –Xms100m            //设置jvm的堆空间初始值

    ======================================================================

    查看运行的java进程

             jps [-v]              //显示可提取pid

             查看指定java进程的堆空间

             jmap -heap pid        //jmap也是jdk自带工具

                                                //linux下切换到root。

             java中对象和数组位于堆内存中,局部变量、函数参数等位于栈内存中。

            

    =======================================================================

    匿名对象   用完就扔 不在需要用一个变量来保持了

    --------------------------------------------

    是对象的简化形式

    两种使用情况

    当对对象方法仅进行一次调用的时  new Person().run();

    匿名对象可以作为实际参数进行传递  run(new Person());

    封装 encapsulation    将部分成员隐藏起来,外界只能通过其他方式进行访问,使用private进行修饰,保证安全性。

    -------------------------------------------------

    原则:

    将不需要对外提供的内容都隐藏起来。

    把属性都隐藏,提供公共方法对其访问。

    Public---private  完全公开---完全私有:两个极端——用到最多的2个修饰符

    ====================================================================

    private关键字:是一个权限修饰符。用于修饰成员(成员变量和成员函数),被私有化的成员只在本类中有效。

    常用之一:

    将成员变量私有化,对外提供对应的set ,get方法对其进行访问。提高对数据访问的安全性。

    构造函数   函数的一种!  给对象进行初始化——创建对象的时候使用的

    -----------------------------------------------------------------------------------------------------------

    1,函数名和类名相同(正常函数名首字母小写并且有返回值——有值就有类型,或void)

    2,没有返回值(有值就有类型:无值无类型)

    默认构造函数是无参的,多个构造函数是重载的形式存在的

    3,如果类没有定义构造函数,jvm分配一个空构造;如果类定义了构造函数,就不会自动分配空构造,需要自己给出!!!

    代码块            代码中使用单独的{}围起来的内容。

    -------------------------------------------------------------------------------------------

    构造代码块:类的成员之一;创建对象时调用(创建1个对象就调用1次),先于构造函数调用。

    局部代码块:方法内定义的代码块

    静态代码块:使用static修饰的代码构造块,在类的加载时实行并只调用一次,以后不再调用。通常放置对静态成员变量的初始化过程——在类中函数和代码块中最先执行,只执行一次!

    类中:1,静态成员和对象无关

          2,静态成员只能访问静态成员,无法访问非静态成员——非静态成员可以访问静态成员

          3,静态成员存在内存中的方法区中

    Main函数中可以通过类直接访问某类的静态成员 (静态成员和对象无关)    static和对象无关只和类相关

    ========================================================================

    static关键字:用于修饰成员(成员变量和成员函数)

    被修饰后的成员具备以下特点:

    随着类的加载而加载

    优先于对象存在

    被所有对象所共享

    可以直接被类名调用

    使用注意:

    静态方法只能访问静态成员

    静态方法中不可以写this,super关键字

    主函数是静态的

    =========================================================================

    类成员                                       对比

    -----------------------------------------------------

    成员变量                          局部变量

    成员函数                          局部函数

    构造函数

    构造代码块                     局部代码块

    静态代码块

    Javabean

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    This.xxx  指向对象自身的指针(引用) 类似private修饰的成员变量

    -----------------------------------------------------

    特点:this代表其所在函数所属对象的引用。换言之:this代本类对象的引用。

    什么时候使用this关键字呢?当在函数内需要用到调用该函数的对象时,就用this。

    This()

    -----------------------------------------------------

    访问当前类的构造函数  重用(复用)

    This()的调用必须是构造函数的第一条语句!

    为了构造函数的重用

    Super()

    ----------------------------

    访问超类的构造函数

    必须是第一行代码

    构造函数的首行要么是this(),要么是super()。默认是super()

    Super.xxxxxx   访问超类的成员

    ----------------------------------------

    super和this的用法相像:this代表本类对象的引用;super代表父类的内存空间的标识。

    当子父类出现同名成员时,可以用super进行区分

    子类要调用父类构造函数时,可以使用super语句——就是super()的用法。

    继承 extends  (单词加s 是因为类都是第三人称单数)

    -------------------------------------------------------------

    多个类可以称为子类,单独这个类称为父类或者超类。

    子类可以直接访问父类中的非私有的属性和行为。

    通过 extends 关键字让类与类之间产生继承关系。

    class SubDemo extends Demo{}

    继承的出现提高了代码的复用性。

    继承的出现让类与类之间产生了关系,提供了多态的前提。

    ===========================================================

    Java只支持单继承,不支持多继承。

    一个类只能有一个父类,不可以有多个父类。

    class SubDemo extends Demo{} //ok

    class SubDemo extends Demo1,Demo2...//error

    Java支持多层继承(继承体系)

    class A{}

    class B extends A{}

    class C extends B{}

    定义继承需要注意:1,不要仅为了获取其他类中某个功能而去继承;2,类与类之间要有所属( " is a " )关系,xx1是xx2的一种——狗是动物的一种。

    函数覆盖 override  重写overwrite              继承的时候才有!

    ---------------------------------------------------------------------------------------------------------------------------

    1,子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为重写或者复写。

    2,父类中的私有方法不可以被覆盖。

    3,在子类覆盖方法中,继续使用被覆盖的方法可以通过super.函数名获取——就是super.xxx的使用。

    覆盖注意事项:

    覆盖时,子类方法权限一定要大于等于父类方法权限

    静态只能覆盖静态。非静态覆盖非静态,静态性约束保持一致。

    覆盖的应用:

    当子类需要父类的功能,而功能主体子类有自己特有内容时,可以复写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  • 相关阅读:
    【洛谷P3853】 [TJOI2007]路标设置
    【洛谷P1159】排行榜
    【洛谷P2921】[USACO08DEC]在农场万圣节
    【洛谷P1108】低价购买
    【洛谷P1363】幻象迷宫
    【题解】洛谷P2023 [AHOI2009] 维护序列(线段树)
    【数据结构】线段树的几种用法
    【题解】洛谷P1283 平板涂色(搜索+暴力)
    【题解】洛谷P1074 [NOIP2009TG] 靶形数独(DFS+剪枝)
    【题解】洛谷P1120 小木棍(搜索+剪枝+卡常)
  • 原文地址:https://www.cnblogs.com/xsjgn/p/6604501.html
Copyright © 2011-2022 走看看