笔记2018-03-14

1、静态代码块

static{
//静态代码块
}

关于静态代码块,要注意的是:
(1)它是随着类的加载而执行,只执行一次,并优先于主函数。具体说,静态代码块是由类调用的。类调用时,先执行静态代码块,然后才执行主函数的。
(2)静态代码块其实就是给类初始化的,而构造代码块是给对象初始化的。
(3)静态代码块中的变量是局部变量,与普通函数中的局部变量性质没有区别。
(4)一个类中可以有多个静态代码块

public class Test{
staitc int cnt=6;
static{
      cnt+=9;
}
public static void main(String[] args) {
      System.out.println(cnt);
}
static{
      cnt/=3;
}
}
运行结果:
5

2、==和equals()

在Java中,==有两个作用:(1)常用来判断两个基本数据类型的变量是否相等;(2)判断两个引用变量是否指向同一个对象。
.equlas()的作用:equals方法其实是交给开发者去覆写的,让开发者自己去定义满足什么条件的两个Object是equal的。
Java中默认的 equals方法实现如下:

public boolean equals(Object obj) {
    return (this == obj);
}

而String类则覆写了这个方法,直观的讲就是比较字符是不是都相同。

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = offset;
            int j = anotherString.offset;
            while (n-- != 0) {
                if (v1[i++] != v2[j++])
                    return false;
            }
            return true;
        }
    }
    return false;
}

(1)对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。
  “==”比较两个变量本身的值,即两个对象在内存中的首地址。
  “equals()”比较字符串中所包含的内容是否相同。
(2)对于基本类型的包装类型,比如Boolean、Character、Byte、Shot、Integer、Long、Float、Double等的引用变量,==是比较地址的,而equals是比较内容的。但是,不同数据类型的数据之间比较(即使数值大小是一样的)返回值是false,例如:

image.png

返回值是false。
(3)基本类型比较,那么只能用==来比较,不能用equals

int a = 3;
int b = 4;
int c = 3;
System.out.println(a.equals(c));//错误,编译不能通过,equals方法
//不能运用与基本类型的比较

(4)对于除了上述类型之外的变量来说,"=="和"equals"方法的作用是相同的,都是用来比较其对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。

3、Switch

在JDK7之前,switch(表达式){……},其中的表达式结果只能是int(可以自动转为int的byte、short、char),枚举类型。
但是JDK7中,表达式结果也可以是字符串。
如果没有break的话,执行完当前打case,还会继续往下执行。

4、break continue

break用于强行退出循环,不执行循环中剩余的语句。(break语句还可用于多支语句switch中)
continue 语句用于循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。

5、char与int

char b = 'a'+18; //因为char本身在码表中可以用数字表示的,然后运算之后还是char,应该输出s 
//另外,如果下面定义就是错的了。 
char a = 'a'; 
char b = a + 18; // 这样就是错的,因为JVM运算完后不知道结果是多少,
//所以会提示损失精度的错误,关于一个类型变量值的问题。

int以下的数据类型(精度小于int)运算的时候都会被自动转换为int后进行计算

char b='a'+18; 在运算的时候'a'自动类型提升为int, 加上18也为int类型,用char接收不报错是因为'a'+18相加的值在char类型范围里面,隐式向下转型为char类型,如果把18换成65534就会报错丢失精度了,这个时候就得需要强转或者用int类型来接收。

char a = 'a'; char b = a + 18; 这样报错是因为char b = a + 18中的a为变量,为变量则类型存在不确定性,变量a加上18的类型就不确定,所以会报错有可能丢失精度,需要强转。如果把char a = 'a'加上final则不会报错了,即为final char a = 'a';可见两者的差别,第一个是两个常量相加,第二个是一个变量加上一个常量。

其实char a和'a'不是一回事。就像'a'+18 和b+18不是一回事一样。'a'这个东西是一个常量值(你不要看到'a'就以为它是char类型,其实这里写'a'和97是一样的,默认都是int类型的常量,仅仅加上单引号是为了告诉我们这里面只能放char规定范围的数值)。而你定义了char a='a'这就不一样了,这个a是变量,仅仅是把常量的值赋给变量,这个是'a'这个int值传递给了char,这时候a就是char类型了。char类型与18进行运算,当然得到的结果就是int型,而且必须是int型的内存块。

‘a’+18其实是两个int型的常量进行运算,然后生成一个新的int类型的常量。传递给b的是一个常量值(常量不可改变,变量可以改变),常量的值赋给变量,不存在强制转换,只要这个变量的类型值能够容纳这个新的常量即可。理解这个,你就需要理解常量不可改变这一点上,两个新的常量相加会生成一个新的常量。而变量与常量相加会形成一个新的变量值。

而a+18,其实a已经分配了一个内存空间用存放char类型变量a(记着,a是变量,值可以改变,常量值不可以改变,而且a是char类型),然后把a复制一份放到内存,然后用复制的值的与int类型的常量18进行运算,这时候生成是一个变量值(没有标注,但是一定有一个变量来存放它),然后把这个变量值赋给变量b,因为是变量,存在着类型转换问题。原理是因为a与18分别处于不同的内存块当中,这时候传递给b的是2个内存空间的值,这时候就存在着转换问题了。

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

推荐阅读更多精彩内容

  • 一、Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计...
    子非鱼_t_阅读 4,128评论 1 44
  • Win7下如何打开DOS控制台? a:开始--所有程序--附件--命令提示符 b:开始--搜索程序和文件--cmd...
    逍遥叹6阅读 1,584评论 4 12
  • 新人报道。 之前在手机上看到过这么一句感慨。“我以为我感动了你,原来我只感动了我自己。” 很心酸的一句话,弥漫着浓...
    存在即是悖论阅读 695评论 1 1
  • 荣辱不惊,闲看花开花落; 去留无意,漫随云卷云舒。 我要的幸福, 不经精雕玉琢, 无须华丽粉饰。 我要的幸福, 在...
    黛绿未央阅读 167评论 1 3
  • 原载:知乎 今天我爸生日,旧文重发。 老爸算是游戏史比较长的人了,应该说是中国第一批电子游戏玩家吧。 从我记事起,...
    Turret阅读 139评论 0 1