java学习笔记


5.2.2015

运算符

%:求余数,如8%3=2
= =:逻辑上等于
!=:逻辑上不等于
!:逻辑非
&:逻辑与
|:逻辑或
^:逻辑异或(相异为true,相同为false)
&&:短路与
||:短路或

| 逻辑或
eg. A|B,会对A, B都进行判断
||短路或
eg.A||B,只有当A为假的时候才会对B进行判断。若A为真,则不继续对B进行判断。

int i1 = 10,i2 = 20;
int i = (i2++);
++放在后面,表示先把i2的值(20)赋给i,然后i2再递增1
++放在前面(++i2),则先把i2递增1再赋值给i
print后面不带ln则打印出结果后不换行

运算符 用法举例 等效表达式
+= a+=b a=a+b
-= a-=b a=a-b
*= a*=b a=a*b
/= a/=b a=a/b
%= a%=b a=a%b

+除了用于加法外,还可用于对字符串进行连接操作
String s ="Hello"+"World";
+运算符两侧操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后联接
int c = 12;
System.out.println("c="+c);
"c="为字符串,因此系统把后面的c也转换成字符串即12再联接。
当进行打印时,无论任何类型,都自动转换为字符串

三目条件运算符:
x ? y : z
其中x为boolean类型表达式,先算x值,若为true则整个运算结果为表达式y的值,否则为表达式z的值。
举例:
int score = 80; int x = -100;
String type = score < 60 ? "不及格" : "及格";
int flag = x > 0 ? 1 : (x == 0 ? 0 : -1);
System.out.println("type= " + type);
System.out.println("flag= " + flag);
输出结果为type=及格 ,flag=-1

for语句

形式如下::
for(表达式1;表达式2;表达式3){语句;.....;}
执行过程:
先计算表达式1,然后执行表达式2,若为true则执行语句,然后计算表达式3,然后再判断表达式2的值,……知道表达式2的值为false
举例:计算result=1!+2!+3!+…+10!

public class OddSum {
    public static void main(String []args) {
        long result = 0;
        long f = 1;
        for (int i=1; i <= 10; i++) {
            f = f * i;
            result += f;
        }
        System.out.println("result="+result);
    }
}

练习1

计算1+3+5+7+…+99=

public class OddSum2 {
    public static void main(String []args) {
        long result = 0;
        long f = 2;
        long g = 0;
        for (int i=1; i <= 50; i++) {
            g = f * i - 1;
            result += g;
        }
        System.out.println("result="+result);
    }
}

老师的解法

public class OddSum2 {
    public static void main(String []args) {
        long result = 0;
        for (int i=1; i <= 99; i+=2) {
            result += i;
        }
        System.out.println("result="+result);
    }
}

while & do while语句

  • while语句
    形式如下:
    while(逻辑表达式){语句;...;}
    执行过程:先判断逻辑表达式,若是ture则执行语句,然后再判断逻辑表达式若为true再执行语句,直至false为止
  • do while语句
    形式如下:
    do{语句;..;}while(逻辑币表达式);//这个分号不能丢
    执行过程:先执行语句,然后判断逻辑表达式,若为true则继续执行语句;若为false则结束。

举例:输出0-9 0-10

public class TestWhile {
    public static void main(String[] args) {
        int i = 0;
        while (i<10){
            System.out.println(i);
            i++;
        }
        
        i = 0;
        do {
            i++;
            System.out.println(i);
        }
        while (i<10);
    }
}

break & continue语句

break用于终止循环;
continue用于跳过continue语句下面未执行的循环,开始下一次循环。
举例:break语句

public class TestBreak {
    public static void main(String[] args) {
        int stop = 4;
        for (int i = 1; i <= 10; i++) {
            
            if (i == stop) { 
                break;
            }
            System.out.println("i="+i);
        }       
    }
}

if(i == stop){之间不要加分号
输出i=1,i=2,i=3
举例:continue语句

public class TestContinue {
    public static void main(String[] args) {
        int skip = 4;
        for (int i = 1; i <= 5; i++) {
            if (i == skip) {
                continue;
            }
            System.out.println("i="+i);
        }
        
    }
}

输出i=1,i=2,i=3,i=5

练习

输出1~100内前5个可以被3整除的数

public class Test211 {
    public static void main(String[] args) {
        int i = 1,num = 0;
        while (i < 100) {
            if (i % 3 == 0) {
            System.out.println(i);
            num++;
            }
            if (num == 5) {
                break;
            }
            i++;
        }
    }
}

输出101~200内的质数

public class Test212 {
    public static void main(String []args) {
        for (int i = 101; i < 200; i++) {
            boolean f = true;
            for (int j = 2; j < i; j++) {
                if (i % j == 0) {
                    f = false;
                    break;
                }
            }
            if (!f) {
                continue;
            }
            System.out.print(i+" ");
        }
    }
}

输出101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199

switch语句

public class TestSwitch {
    public static void main(String []args) {
        int i = 18;
        switch (i) {
            case 8 :
                System.out.println("A");
                break;
            case 3 :
                System.out.println("B");
                break;
            default:
                System.out.println("error");
        }
    }
}

输出error
switch(i)//对i值进行探测
case 8 //若i=8 则执行……
default //若为默认情况,则输出error

  • 若case8里没加break,把i赋值为8,则AB都会打印出来,因为会穿到下一个case。即每一个case下都有一个break
  • case可以合并
case 8 :
case 2 :
    System.out.println("A");
    break;

即值为8或2时都输出A

  • default可以省略,但不推荐
  • java中switch语句只能探测int类型值

return语句终止方法的运行并指定返回的数据


5.1.2015

整数类型

类型 占用储存空间 表数范围
byte 1 字节 -128~127
short 2字节 -2-15~215-1
int 4字节 -231~231-1
long 8字节 -263~263-1

整型常量默认为int,若要声明long型常量,需要在后面加L或l

浮点类型

默认为double型,若要声明float型,需在后面加F或f
float占4字节,double占8字节。表数范围都很大

练习1

TestVar2.java第12行出现错误,应该是 System.out.println("x="+x+",y="+y);而不是System.out.println("x="+x",y="+y);
第10行变量名打错di d1

基本数据类型转换

  • boolean类型不可以转换成别的类型。
  • 整型,字符型,浮点型可混合运算中互相转换,遵循以下原则:
  • 容量小的数据类型自动转换成容量大的,数据类型按容量大小排序为:
    byte,short,char->int->long->float->double
    byte,short,char三者不会互相转换,计算时首先转为int类型。
  • 容量大的数据类型转换成容量小的数据类型时要加上强制转换符,但可能会造成精度降低或溢出,需格外注意。
  • 有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种,再计算。
  • 实数常量(如1.2)默认为double
  • 整数常量(如123)默认为int

强制转换符:在数据前加上要转换成的数据的类型名,如要把double转换成float,则
double d=1.2; float f=(float)(d*1.2);

*可以把int类型的数赋值给byte,short,char,但是不能超出其表数范围
byte a=1; byte b=2;//范围为-128~127

练习2

修改TestConvert时候在12,15,15,17行
byte b=(byte)b1-b2;// (b1-b2)忘记括起来
导致


修改后。注意,i结果为0,因为第12行i=i/10;中i和10都是int型,所以除完后得0.1转成int型里会去掉小数点变成0
第13行i=(int)(i*0.1);因为0.1为double型所以i*0.1就变成double型,再赋值给i(i为int型),于是此时需要强制转换成int型。15,16,18,20行同理。注意第6,8行的赋值。

public class TestConvert
{
  public static void main(String[] args)
  {
    int i = 1,j = 2;
    float f1 = 0.1F;
    float f2 = 123;
    long l1 = 12345678,l2 = 8888888888L;
    double d1 = 2e20,d2 = 2321;
    byte b1 = 1,b2 = 2,b3 = 127;
    j = j + 10;
    i = i / 10;
    i = (int)(i * 0.1);
    char c1 = 'a',c2 = 125;
    byte b = (byte)(b1 - b2);
    char c = (char)(c1 + c2 - 1);
    float f3 = f1 + f2;
    float f4 = (float)(f1 + f2 * 0.1);
    double d = d1 * i + j;
    float f = (float)(d1 * 5 + d2);
    System.out.println("j="+j);
    System.out.println("i="+i);
    System.out.println("b="+b);
    System.out.println("c="+c);
    System.out.println("f3="+f3);
    System.out.println("f4="+f4);
    System.out.println("d="+d);
    System.out.println("f="+f);
  }
}

写代码的格式

  • 一对大括号所在的这两行对齐
    public class HW { }
  • 遇到{缩进,按TAB键缩进,不要用空格缩进(SHIFT+TAB往回缩)
  • 程序块之间加空行
public class HelloWorld {

  static int j = 9;
    
  public static void main(String args[]) {
    System.out.println("Hello World"); 
  }
        
  public static void m() {
  }      
  
} 
  • 并排语句之间加空格System.out.println(a); System.out.println(b);
  • 运算符两侧加空格(特定情况除外)int b = 1;
  • {前面有空格public class HelloWorld {
  • 成对编程:写完{立马写出}防止遗漏

4.29.2015

执行过程中的内存管理分为四部分:heap,stack,data segment,code segment.

stack是存放局部变量;data segment是用来放静态变量和字符串常量;code segment是存放代码;heap是动态申请内存用的,即所有new出来的东西都在heap里面。

程序在硬盘里是静态的,运行后会加载到内存的code segment,然后从main方法开始执行,执行过程中会牵扯到内存的其他三个部分:stack,heap,data segment.

成员变量:在方法体之外,类体之内的变量
局部变量:在方法体内的变量
凡是在大括号里声明的变量,出了大括号就不认识了

进制转换:
二进制1101转十进制:从右往左,1101=1*1+2*0+4*1+8*1=13
十进制转二进制:13=1+4+8=1101 15=1+2+4+8=1111
二进制转十六进制:四位一变,先转成十进制再转16进制,1101=13=D
十六进制里:10对应A ,11对应B, 12对应C ,13对应D, 14对应E ,15对应F


4.26.2015

照着视频写的HelloWorld一直运行不了



各种百度找办法,环境变量改了一次又一次,终于发现问题所在,人生第一个小程序出世!

之前运行不了的原因就是:运行的时候多加了个.java 具体原因没弄明白



百度找到原因
折腾半天终于懂了。。


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

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,598评论 18 399
  • 分支结构 分支结构(选择结构) - switch 开关case 不加 break 就会一直往下执行,default...
    迷茫o阅读 185评论 0 0
  • Unsupported major.minor version 51.0解决办法 具体步骤 解决:项目------...
    晨星资源阅读 592评论 0 1
  • 一夜荒唐梦,满腹辛酸泪,期盼烟消云散,自此康庄路行缓,谁料,笑颜,笑颜,掩不过心头,那点小小积怨,峰回路转,总在午...
    枯藤残鸦阅读 208评论 0 1
  • 这是一个很美好的黑夜 一点光都没有 把声音去掉就完美了。
    留子尧阅读 180评论 2 5