自学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的使用。

覆盖注意事项:

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

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

覆盖的应用:

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

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

原文地址:https://www.cnblogs.com/xsjgn/p/6604501.html