Java基础4-面向对象概述;super();this()

昨日内容回顾

  1. java基本数据类型:

    • byte : 一个字节,-128 ~ 127 = 256

    • short : 两个字节, -32768 ~ 32767

    • int : 四个字节,

    • long : 八个字节,

    • float : 4字节

    • double : 8字节

    • boolean : 1个字节

    • char : 2个字节

  2. 运算符

    • 算数: (+号) (-号) + - * / % (+号) (-号) a++ ++a b-- --b
    • 赋值: = += -= *= /= %=
  3. 布尔表达式的逻辑运算符

    • | : 单或,没有短路情况。
    • & : 单与,同上。
    • ^ : 异或,a == b->false a !=b -> true
    • ! : 取反
    • && : a && b ,a == false ,b 不运算,短路了。
    • || : a || b ,a == true , b 不运算,短路了。
  4. java中数字的表现形式

    • 十进制 int x = 100 ;
    • 八进制 int y = 077 ;
    • 十六进制 int z = 0xef;
  5. 将一个byte数变换成00-FF之间的一个字符串
    [思路]:
    1)将b和十六进制数0x0F做&运算取得低四位的值。
    2)再将b右移4位,再次和0x0F做&运算取得高四位的值。
    3)构造字符数组,按下标取得对应的字符即可。

作业解答

  1. 定义一个函数,函数功能是动态提取int[]中元素的最大值

     public int maxArr(int[] arr){
         if(arr==null || arr.length=0){
             System.out.println("非法数组");
             return -1;
         }
         max = arr[0];
         for(int i=1;i<arr.length;i++){
             if(arr[i]>max){
                 max = arr[i];
             }
         }
         return max;
     }
    
  2. 定义一个函数,从数组中查询指定的元素首次出现的位置

     public int findIndex(int[] arr, int x){
         for(int i=0;i<arr.length;i++){
             if(arr[i]==x){
                 return i;
             }
         }
         if(i==arr.length)
             return -1;
     }
    
  3. 定义函数,完成冒泡排序,大数下沉

     // 5 4 3 2 1
     // 4 3 2 1 5
     // 3 2 1 4 5
     // 2 1 3 4 5
     // 1 2 3 4 5
     public void bubbleSort(int[] arr){
         for(int i=arr.length-1;i>0;i--){
             for(int j=0;j<i;j++){
                 if(arr[j]>=arr[j+1]){
                     int tmp = arr[j];
                     arr[j] = arr[j+1];
                     arr[j+1] = tmp;
                 }
             }
         }
     }
    
  4. 折半查找

     public int halfFind(int[] arr, int x){
     // 2 4 6 8 9 10 23 32 34 45 ---> 8
         int min = 0;
         int max = arr.length-1;
        
         while(min<=max){
             int index = (min+max)/2;
             if(arr[index]==x){
                 return index;
             }
             else if(arr[index]>x){
                 max = index-1;
             }
             else{
                 min = index+1;
             } 
         }
         return -1;
     }
    
  5. 定义一个函数,实现矩阵的转置.arr[i][j] == arr[j][i];//前提条件是正方的。

     public void transArr(int[][] arr){
         for(int i=0;i<arr.length;i++){
             for(int j=0;j<=i;j++){
                 int tmp = arr[i][j];
                 arr[i][j] = arr[j][i];
                 arr[j][i] = tmp;
             }
         }
     }
    
  6. 遍历三维组数,横向输出三维数组的每一个层。

     public void out3DArr(int[][][] arr,boolean flag) {
         if(flag==true) {
             for(int i = 0;i<arr.length;i++) {
                 for(int j=0;j<arr[i].length;j++) {
                     for(int k=0;k<arr[i][j].length;k++ ) {
                         System.out.print(arr[i][j][k]+"\t");
                     }
                     System.out.println();
                 }
                 System.out.println("--------------------------------------");
             }
         }
         else {
             for(int i =0;i<arr.length;i++) {
                 for(int j=0;j<arr.length;j++) {
                     for(int k=0;k<arr.length;k++) {
                         System.out.print(arr[j][i][k]+"\t");
                     }
                     System.out.print("\t");
                 }
                 System.out.println();
             }
         }
     }
    
  7. 定义一个类:Dog 有名称 color age cry();

     public class Dog {
         private String color;
         private int age;
    
         public void cry() {
             System.out.println("汪汪汪...");
         }
     }
    
  8. 阐述出来堆区,栈区,何时出现溢出,如何解决。

    1)堆内存:存放对象,当构造大量对象时,会出现堆溢出,可以通过java -Xmx设置最大堆内存大小, java -Xms设置初始堆内存大小
    2)栈内存:方法栈,当方法无限递归调用时出现,通过java -Xss 设置栈内存大小

  9. 将一个字节转换成0~255之间的整数:将符号位作为数字位

     public int byte2Int(byte b){
         return b&0xff;
     }
    
  10. 对数组进行冒泡排序(实现倒序),封装成方法,返回排序后的数组

    // 1 2 3 4 5
    // 2 3 4 5 1
    // 3 4 5 2 1
    // 4 5 3 2 1
    // 5 4 3 2 1
    public void bubbleSort(int[] arr){
        for(int i=arr.length-1;i>0;i--){
            for(int j=0;j<i;j++){
                if(arr[j]<=arr[j+1]){
                    int tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                }
            }
        }
    }
  1. 实现数组的拷贝,将一个数组中的元素复制到另一个数组中,如果元素个数不等,或者截取,或者回绕。

    public void copyArr(int[] srcArr, int[] destArr) {
        if(srcArr.length>=destArr.length) {
            for(int i = 0;i<destArr.length;i++) {
                destArr[i] = srcArr[i];
            }
        }
        else {
            for(int i = 0;i<destArr.length;i++) {
                destArr[i] = srcArr[i%srcArr.length];
            }
        }
    }
    
  2. 输出整数的二进制表示方式

    public void int2bit(int x){
        System.out.print("0x");
        for(int i=31;i>=0;i--) {
            System.out.print(((a>>i)& 0x1));
        }
    }
    
  3. 选择排序

    public void selectSort(int[] arr) {
        // 5 4 3 2 1 
        // 1 5 4 3 2
        // 1 2 5 4 3
        // 1 2 3 5 4
        // 1 2 3 4 5
        for(int i = 0;i<arr.length-1;i++) {
            for(int j=i+1;j<arr.length;j++) {
                if(arr[i]>=arr[j]) {
                    int tmp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = tmp;
                }
            }
        }
    }
    

OOP

Oriented object program,面向对象编程

  1. entity:实体,new:新建

  2. 面向对象的特征:

    • 封装
    • 继承
    • 多态
  3. 对象:
    切实存在的个体

  4. 类:

    • 物以类聚,人以群分。人找人,虾找虾。
    • 对现实事物的软件抽象
  5. 类的成员:

    • 成员变量:属性,数值类型的基本数据类型默认值是0,与声明顺序无关.存放在对象所在的堆内存中

    • 成员函数:方法

    • 构造函数

    • 构造代码块

    • 定义方式:

        class 类名 //首字符大写,$_开头
      
  6. 堆:数组和对象在堆中

  7. 栈:方法在栈中,StackOverflow

  8. 局部变量:定义在方法或语句中,没有默认初始化值,必须初始化,存放在栈中,所在范围结束后,空间自动释放

  9. 单位换算
    1024 = 1k
    2^10 = 1024
    1kb = 1024 byte
    1mb = 1024k byte
    1gb = 1024m byte
    1tb = 1024g byte
    1pb = 1024t byte
    1eb = 1024pb
    1zb = 1024eb
    1yb = 1024zb
    1nb = 1024yb

java VM调整堆大小:
  1. 堆默认是1/4物理内存,栈空间默认是1m

  2. java -X //查看java非标准输出帮助

  3. java -Xmx100m //设置jvm的堆空间最大值

  4. java -Xms100m //设置jvm的堆空间初始值

  5. java -Xss100m //设置jvm的栈空间最大值

  6. 查看java进程id使用jps

  7. 查看指定java进程的堆内存信息使用:jmap -heap pid

java匿名对象

//匿名对象1
new Person().run();
//匿名对象2,作为参数进行传递
run0(new Person());

封装

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

  • public -- private

构造函数

  1. 函数名和类名相同

  2. 没有返回值:创建后肯定返回的是该类的对象

  3. 如果类没有定义构造函数,jvm分配一个空构造。如果类定义了构造函数,没有空构造

  4. 可以重载

  5. 创建对象
    new Person();

构造代码块

  1. 创建对象时调用

  2. 构造函数之前

对象创建过程

  1. 构造代码块:从上到下按序执行

  2. 构造函数

  3. 成员变量

    • color = null ;

    • color = "black";

    • 构造代码块

    • 构造函数

静态代码块

  1. 在类加载期间执行,而且只执行一次

  2. 类的信息存放在方法区,jvm中还有堆区(heap),栈区(stack)

  3. 静态成员之间可以互相访问,按序执行。

  4. 静态成员不可以访问非静态成员。

  5. 非静态成员可以访问静态成员

  6. 静态成员通过类访问,和对象无关(类名.静态成员)

OOA

Oriented object analyze,面向对象分析

OOD

Oriented object design,面向对象设计

一切都是对象

面向过程的:c语言

javabean,标准java类

pojo:plain old java object,

class Dog{
    private String color;
    public String getColor(){
        return color;
    }
    public void setColor(String c){
        color = c;
    }
}

this

指向对象自身的引用,类似于成员变量,使用private进行修饰

  1. 静态方法不可以使用this

  2. this.:访问成员变量

  3. this():访问当前类的构造函数,对this的调用必须是第一条语句。为了构造函数的重用

继承

  1. extends

  2. 只支持单重继承,不支持多重继承

  3. 支持多层继承

super()

  1. 访问超类的构造函数

  2. 必须是第一行代码

  3. 构造函数的第一行代码要么是this(),要么是super(),默认是super()

  4. super.xxx 访问超类的成员

函数的覆盖

  1. 重写,overwrite

  2. 只有在继承的情况下

  3. private方法不可以被覆盖

  4. 成员变量:不可以被覆盖

练习

  1. Car{String color,int tires}

     class Car{
         private String color;
         private int tires = 4;
         public void setColor(String color){
             this.color = color;
         }
         public String getColor(){
             return color;
         }
     }
    
  2. 百钱买百鸡

    • 公鸡:5/只
    • 母鸡:3/只
    • 小鸡:1/3只
    • 100买100只鸡
class BuyChick{
    public static void main(String[] args){
        for(int i=0;i<=100/5;i++){
            for(int j=0;j<=100/3;j++){
                for(int k =0;k<=100*3;k=k+3){
                    int money = i*5+j*1+(k/3);
                    int count = i+j+k;
                    if(money==100 && count==100){
                        System.out.println("公鸡:"+i+",母鸡:"+j+",小鸡:"+k);
                    }
                }
            }
        }
    }
}

作业

  1. 将按位运算操作,尤其是左移和右移(有无符号)整理到自己的博客中。
    重点说明清晰负数的运算过程。

  2. byte数到十六进制字符串表现形式程序设计原理和实现方式整理到博客中。

  3. 定义函数,计算一位整型数组所有元素的和。

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

推荐阅读更多精彩内容