zoukankan      html  css  js  c++  java
  • Java突击学习 Day2 Part1

    只睡了6小时,能自然醒并且不困,是个好兆头,继续研究Java吧

    一、基本结构

    1、8种基本数据类型

    整数:byte、short、int、long

    浮点数:float、double

    其它:char、boolean

    首字母小写的是基本类型,大写的是类(对象封装器)

    可以看到,没有string。。。所以平时要弄个字符串要用String的类

    2、常量

    Java使用final(一般static final),C#是const或readonly(一般static readonly)

    3、控制台输出

    Java:  System.out.print("Output") / System.out.println("Output");

    C#: Console.Write("Output") / Console.Writeline("Output");

    不过C#还要Console.Readkey(),不然看不到结果

    4、数字字面量

    后面加L表示long,前面加0表示8进制,0x表示16进制

    float a = (float) 3.14;  //默认是double,要显式转换
    double b = 3.14;
    float c = 3.14F; //要使用F表示是float

    这C#也一样(平时怎么没注意到。。。)

    Java 7还可以 int x = 1_234,相当于int x = 1234

    关于Integer,还有个坑,默认“==”是用于-127~128的,

    >=128的就没办法直接用==比较了,因为这是JAVA底层设计的,超过128的整型包装类是不使用对象池的,那你只好显示的intValue()一下再用==比较了
    int a=200;
    int b=200;
    System.out.println(a==b); //true
    Integer c=200;
    Integer d=200;
    System.out.println(c==d); //false

    5、表达式、运算符、赋值、自增/减(++x 或 x++)、比较运算符、逻辑运算符、运算符优先级、字符串运算

    和C#基本一致,要注意如果右边是复杂表达式,用 *= 和 /= 时会先计算右侧表达式值(C#也一样)

    int a = 12;
    int b = 2;
    a = a/b + 1;  //7
    System.out.println(a);
    a /= b+1;  //2
    System.out.println(a);

    二、对象

    和C#基本一致,连GC都一样。。。

    1、类变量/方法,对应C#的静态

    2、字符串方法: length()  charAt()  substring()  indexOf()

    String a="abcde";
    System.out.println(a.substring(2,3)); //java得到的是c
    
    //string a = "abcde";
    //Console.WriteLine(a.Substring(2, 3)); //C#得到的是cde
    //Console.ReadKey();

    length()和indexOf()是一样的(C#对应的首字母要大写,包括Substring),C#没有charAt()

    3、System.out.format(),和C#的Console.Write()差不多,参数不大一样

    4、类型转换:一样

    5、装箱拆箱:一样

    6、对象比较:一样

    7、getClass()、instanceof:像C#的反射一样

    三、数组、逻辑、循环

    1、数组:Java可以string a[]; C#不能这样

    2、块语句,可以定义一个作用域

    int x = 1;
    {
        int y = x+2;
    }
    System.out.println(y);  //找不到y
    //Console.WriteLine(y); C#也一样

    3、if/else:一样,在if中定义的变量,外层是访问不到的,C#也一样,但js是可以的

    if(true){
      var x=1;
    }
    console.log(x)

    4、switch:一样

    5、三目运算符:一样

    6、for:一样。  for里面的int i,在外面是访问不到的,C#也一样,但是js是可以的,且i是变成跳出循环时那个自增到最大的值

    7、while/do while:一样

    8、continue/break:

    int x = 0;
    out: for (int i = 0; i < 10; i++) {
        while (x < 50) {
            x++;
    //     break; //x为10
            break out; //x为1
        }
    }
    System.out.println(x);

    C#没有out:这种用法,可以使用goto,可加个bool flag,在循环中赋值和判断

    四、创建类和方法

     1、定义类

    一个文件中只能有一个public类,并且此public类必须与文件名相同(C#无此限制)
    private,私有的访问权限,也是最严格的访问权限,仅只能在设置了该权限的类中访问,利用这个访问权限,表现出封装思想。
    
    default,默认的访问权限,也是可以省略的访问权限,它不仅能在设置了该权限的类中访问,也可以在同一包中的类或子类中访问。
    
    protected,受保护的访问权限,它除了具有default的访问权限外,还可以在不同包中所继承的子类访问。
    
    public,公有的访问权限,也是最宽松的访问权限,不仅可以是同一个类或子类,还是同一个包中的类或子类,又还是不同包中的类或子类,都可以访问。

    其它差不多,就是default默认权限,什么都不加就是default,但不能显式地加上default,没这个关键字

    2、类继承    java使用extends,C#使用冒号

    3、方法:一样

    4、this:一样,类方法(相当于C#的静态方法)不能使用this

    5、变量作用域:一样

    6、参数传递方法:一样,如果是传递对象引用的话,会修改原对象

    7、类方法:一样,不能实例化,不能继承

    8、控制台main方法

    public static void main(String[] args) {} //Java不能省
    static void Main(){} //C#可以省略一些

    9、方法重载:一样

    10、构造函数:看上去差不多

    11、覆盖方法:使用super.来调用超类里的方法(对应C#是使用base.)

    void checkTemperature(int x) {
        super.checkTemperature("abc");
    }

     12、覆盖构造函数

    对于super()的用法,Java指定了特殊的规则:它必须是构造函数定义中的第一条语句。如果构造函数没有显式地调用super(),Java将自动调用:使用不带参数的super()

    五、包、接口、其它类对象

    1、限定符:多个使用时顺序无所谓,有个final,和C#的const(或readonly)差不多,指只读

    2、默认变量/方法:试了一下,Java是默认default(但没有这种关键字),C#是默认private

    3、 继承:没有显式声明的(default),子类可以更严格,有显式声明的,子类只能更宽松

    4、属性存取器:和C#有所区别(C#经过简化了,原始写法也差不多)

    private int a;
    //public int A { get; set; } //C#
    public void setA(int a) {
        this.a = a;
    }

    5、抽象类:和C#一样,一个方法抽象了,整个类必须抽象。如果抽象类中只有抽象方法,相当于接口

    6、包:import(对应C#的using),和C/C++的#include不同,Java和C#只是告诉编译器引用地址,像语法糖一样

    还可以import static,C#直到5.0还是6.0才有这特性,不知Java是从哪个版本开始支持的

    类名冲突后要显示引用全,C#也是这样

    一般包名是把域名反过来

    Java的包和C#的程序集很像

    7、接口

    使用extends继承(C#是冒号),使用implements实现(C#不用)

    接口里面方法,如果没有显式声明,会自动转成公共、抽象。方法没有方法体(没有一对大括号)

    接口本身必须公有或包保护,但如果没有显式声明,不会自动转换

    继承多个接口时,如果参数相同返回值不同也会编译错误

    8、内部类:差不多

    六、异常和线程

    1、异常:一样

    2、在方法中显式提醒throws,但只是提示,实际并不抛出指定异常,而是根据实际情况抛出。

    而且一旦在方法声明中显式指明throws,就必须在调用时try/catch,但实际发生的异常可能不是声明的异常。

    public static void main(String[] args) {
        VolcanoRobot vol = new VolcanoRobot();
        try {
            vol.method();
        } catch (IOException e) {
            e.printStackTrace(); //java.lang.NumberFormatException
        }
    }
    public void method() throws IOException {
        throw new NumberFormatException();
    }
    public class VolcanoRobot {
        public static void main(String[] args) {
            VolcanoRobot vol = new VolcanoRobot();
            vol.method();
        }
    
        public void method() throws NumberFormatException {
            try {
                String a = null;
                String b = a.toString();
            } catch (Exception e) {
                System.out.println(e); //java.lang.NullPointerException
            }
        }
    }
    public static void main(String[] args) {
        VolcanoRobot vol = new VolcanoRobot();
        vol.method(); // java.lang.NumberFormatException
    }
    public void method() {
        throw new NumberFormatException();
    }
    
    //try{
    //    String a=null;
    //    String b=a.ToString();
    //}
    //catch(Exception e){
    //    throw new IOException(); //“System.IO.IOException”类型的未经处理的异常在 ConsoleApplication.exe 中发生
    //}

    都可以手动抛出异常

    3、异常继承(但子类不能引发其超类方法未引发的checked异常)

    class RadioPlayer {
        public void startPlaying() throws IOException {    }
    }
    
    class StereoPlayer extends RadioPlayer {
        public void startPlaying() { }
    }

    4、线程:start() / stop() ,和C#差不多,但要增加一个异常判断,

        public static void main(String[] args) throws InterruptedException {
            Thread.sleep(1000);
            System.out.println("test");
        }
        void test(){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
  • 相关阅读:
    每天更新股票日数据
    爬取赶集网类似数据的几个小技巧
    爬取赶集网二手物品下所有物品的信息
    web.xml常用元素
    web.xml中JSP配置及 EL表达式
    JSP 隐藏对象
    第四章 JSP语法
    1.JSP 简介及工作原理
    js闭包
    面试心经之题目二
  • 原文地址:https://www.cnblogs.com/liuyouying/p/5079468.html
Copyright © 2011-2022 走看看