java学习总结3

48.二维数组动态初始化

        格式:数据类型[][] 数组名=new 数据类型[m][n];

        m指这个二维数组,可以存放多少个一维数组,n指每一个一维数组,可以存放多少个元素

        特殊情况:int [][] arr=new int [有实参][];(可自行定义一维数组的长度)

49.面向对象

        学习获取已有对象并使用;学习如何自己设计对象并使用(面向对象的语法)

50.类和对象

  •         类(设计图):是对象共同特征的描述;
  •         对象:是真实存在的具体东西。

        在Java中,必须先设计类,才能获得对象。

        定义:

                public class 类名{

                        成员变量(代表属性,一般是名词)

                        成员方法(代表行为,一般是动词)

                        构造器

                        代码块

                        内部类

                }

        得到类的对象:类名 对象名=new类名();

        使用对象:访问属性:对象名.成员变量

                          访问行为:对象名.方法名( ... )

51.定义类

  •         用来描述一类事物的类,专业叫做:Javabean类,不写main方法;
  •         编写main方法的类,叫做测试类,可以创建javabean类的对象并进行赋值调用。

        类名首字母建议大写,需要见名知意,驼峰模式;一个Java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名,但建议一个文件定义一个class类。

        成员变量的完整定义格式:修饰符 数据类型 变量名称=初始化值;(一般无需指定初始化值,存在默认值)

52.竖行修改

        鼠标滚轮拖动选中,修改;或者alt+鼠标左键

53.封装

        对象代表什么,就得封装对应的数据,并提供数据对应的行为

54.private关键字

        是一个权限修饰符,可以修饰成员(成员变量和成员方法),被private修饰(私有化)的成员只能在本类中才能访问,对于每一个私有化的成员变量,都要提供get和set方法,方法用public修饰

  •         set方法:给成员变量赋值
  •         get方法:对外提供成员变量的值

55.this关键字(就近原则)

        this的作用:区分局部变量和成员变量

        this的本质:所在方法调用者的地址值

  •         成员变量:定义在方法外,类里面的变量,有默认初始化值,位于堆内存的对象,随着对象的创建而存在,随着对象的消失而消失,在整个类中有效;
  •         局部变量:定义在方法里的变量,没有初始化值,使用前需要赋值,位于栈内存的方法,随着方法的调用而存在,随着方法的运行结束而消失,在当前方法中有效。

        当变量名相同时,优先调用局部变量,需要越过局部变量调用成员变量时,(格式:this.变量名)

56.构造方法

        又叫作构造器、构造函数,作用是在创建对象时,由虚拟机自动调用,给成员变量进行初始化。

        格式:

public class Student {

    修饰符 类名(参数){

        方法体;

    }

}
  •         特点:方法名与类名相同,大小写也要一致;
  •                    没有返回值类型,连void都没有;
  •                    没有具体的返回值(不能由retrun带回结果数据)。

        执行时机:

                创建对象的时候由虚拟机调用,不能手动调用构造方法;

                每创建一次对象,就会调用一次构造方法。

        构造方法的重载(方法名相同,参数不同):

  •                 无参数(空参)构造方法:初始化的对象时,成员变量的数据均采用默认值;
  •                 有参数(带参)构造方法:在初始化对象的时候,同时可以为对象进行赋值。

        注意事项:

                任何类定义出来,默认自带无参数构造器,写不写都有;

                一旦定义了有参数构造器,无参数构造器就没有了,此时需要自己写无参数构造器;

                建议在任何时候都手动写上空参和带全部参数的构造方法。

57.标准的JavaBean类

        类名需要见名知意;

        成员变量使用private修饰;

        提供至少两个构造方法(无参、带全部参数);

        成员方法:提供每一个成员变量对应的setXxx()/getXxx(),如果还有其他行为,也需要写上;

58.快捷键生成JavaBean

        (1)编写完属性后Alt+insert(F12)/Alt+Fn+insert(F12)

  •                 空参:构造函数+无选择;
  •                 带全部参数:构造函数+ (ctrl+A) +确认;
  •                 getset:getter and setter+ (ctrl+A) +确认;

        (2)或下载ptg插件(Ptg To JavaBean)

59.一个对象的内存图

        加载class文件;

        申明局部变量;

        在堆内存中开辟一个空间;

        默认初始化;

        显示初始化;

        构造方法初始化;

        将堆内存中的地址值赋值给左边的局部变量;

题解

1.请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数。函数 myAtoi(string s) 的算法如下:

空格:读入字符串并丢弃无用的前导空格(" ")

符号:检查下一个字符(假设还未到字符末尾)为 '-' 还是 '+'。如果两者都不存在,则假定结果为正。

转换:通过跳过前置零来读取该整数,直到遇到非数字字符或到达字符串的结尾。如果没有读取数字,则结果为0。

舍入:如果整数数超过 32 位有符号整数范围 [−231,  231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被舍入为 −231 ,大于 231 − 1 的整数应该被舍入为 231 − 1 。

返回整数作为最终结果。

int myAtoi(char* s) {

    int i=0,num=0,sign=1,len=strlen(s);

    if(len==0)

        return 0;

    while(s[i]==' ')

        i++;

    if(s[i]=='-'){

        sign=-1;

        i++;

    }else if(s[i]=='+'){

        i++;

    }

    while(s[i]!='\0'){

        if(s[i]<'0'||s[i]>'9'){

            i++;

            break;

        }

        if(num>INT_MAX/10)

            return (sign>0?INT_MAX:INT_MIN);

        if(num==INT_MAX/10){

            if(sign>0&&s[i]>'7')

                return INT_MAX;

            else if(sign<0&&s[i]>='8')

                return INT_MIN;

        }

        num=10*num-'0'+s[i];

        i++;

    }

    num=num*sign;

    return num;

}

先去除前导空格,再处理正负号,如果遇到'-',将sign设为-1,并跳过该字符;遇到 '+'则直接跳过该字符。遍历剩余的字符串字符,若遇到非数字字符,则跳出循环,否则进行越界判断,若num已经大于INT_MAX/10,则根据正负直接返回最大或最小值;若num等于INT_MAX/10,则检查下一个字符是否会导致溢出。对于正数,如果下一个字符大于'7',则返回INT_MAX;对于负数,如果下一个字符大于或等于'8',则返回 INT_MIN,使用num = 10*num - '0' + s[i]; 来更新num的值。最后,将num乘以正负号返回结果。

2.给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。

bool isPalindrome(int x) {

    char a[100];

    sprintf(a,"%d",x);

    int left=0,right=strlen(a)-1;

    for(left,right;left<right;left++,right--) {

        if(a[left]!=a[right])

            return false;

    }

    return true;

}

把整数x转化为字符串存入数组中,定义两个左右索引,从数组头尾两边向内判断,若左索引的值与右索引不相等,返回false;否则返回true.

3.给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。

  •         '.' 匹配任意单个字符
    •         '*' 匹配零个或多个前面的那一个元素

所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。

bool isMatch(char * s, char * p) {

    if(!*p)

        return !*s;

    bool match=*s&&(*s==*p||*p=='.');

    if(*(p+1)=='*')

        return isMatch(s,p+2)||(match&&isMatch(++s,p));

    else

        return match&&isMatch(++s,++p);

}

如果p为空,s为空,两者匹配返回true,s非空不匹配;

s非空,p == s || p == '.'时第一个字符匹配;

若(p+1) == '*',则有两种情况匹配:

  •         *匹配0个字符,s匹配剩下的,即isMatch(s, p+2)
    •         *匹配1个字符,继续用p匹配剩下的s,即match && isMatch(++s, p)

若(p+1) != '*',则递归判断剩下的是否匹配 match && isMatch(++s, ++p).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值