在有C++和C#基础之下开始学习Java,主要记录了一些和C++C#不同的或不知到的点

  • 栈对象必须初始化,否则会报错。(其他的则有默认值)
  • byte占用8位,char占用16位
  • 接口默认为public,接口中的变量默认位public static final
  • 如果子类和基类在同一包中,则子类可以访问基类protected成员(也就是说:被声明为 protected 的变量、方法和构造器能被同一个包中的任何其他类访问)
  • 继承访问规则:public-public            protected-protected/public
  • final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
  • transient关键子,该修饰符包含在定义变量的语句中,用来预处理类和变量的数据类型。???
    public transient int limit = 55;   // 不会持久化
    public int b; // 持久化
  • volatile 易变的变量,每次都会强制从内存中读取

  运算符

  • >>>:按位右移补充0
  • instanceof:判断一个实例是否是某个类型(如果是该类型或该类型的超类则返回true)

  循环控制语句

  • 增强for循环,限制位数组或者有迭代器的类

    public static String[] names = {"acsd", "bcasdf", "cfgad"};
    public static void main(String[] args) {
    for(String s:names) {
    System.out.println(s);
    }
    }
  • switch语句在逻辑上需要break。否则会在第一次匹配到后,继续输出后面所有不匹配的选项,直到break或者结束。
  • switch条件必须时常量,支持整型、字符串或者枚举:Cannot switch on a value of type float. Only convertible int values, strings or enum variables are permitted

  Java Number

  • Java 语言为每一种内置数据类型提供了对应的包装类,(Integer、Long、Byte、Double、Float、Short)都是抽象类 Number 的子类。
  • 一个缓存问题?当数字的值占用内存小于一个byte时,会指向同一个引用
    Integer iNum1 = 128;
    Integer iNum2 = 128;
    System.out.println(iNum1.equals(iNum2));//true
    System.out.println(iNum1 == iNum2);//true

  Java中的字符串优化 stringbuffer 和 stringbuilder

  • stringbuilder 相对有速度上的优势,但不是线程安全的

  Java数组

  • 数组是连续的,非对齐。
  • arrays类提供了很多对数组操作的方法(赋值-fill,升序-sort,通过 binarySearch 方法能对排序好的数组进行二分查找法操作)

  Java函数

  • 可变参数

    public static void testFcn4(double...ds) {
    for(double it : ds) {
    System.out.println(it);
    }
    }
  • Java函数 finalize  以下为一般形式
    protected void finalize()
    {
    // 在这里终结代码
    }
  • synchronized 关键字声明的方法同一时间只能被一个线程访问。synchronized 修饰符可以应用于四个访问修饰符。
  • 序列化的对象包含被 transient 修饰的实例变量时,java 虚拟机(JVM)跳过该特定的变量。该修饰符包含在定义变量的语句中,用来预处理类和变量的数据类型。

  Java 面向对象

  • Java无多继承,继承使用extends关键字
  • 可以继承多个接口interface,使用关键字implements,多个接口之间使用逗号隔开
  • super为父类引用,this为当前引用
  • final关键子:修饰类,则该类不能被继承;修饰函数,则函数不能被修改(Cannot override the final method from Parent);final修饰变量,则变量不可修改
  • final关键字:一个类为final类,则她的函数都会是final,但是实例变量不是final
  • 重写:default修饰的方法,子类和父类同包时才可以重写;(这类似C#的internal,java没有命名空间,而是使用包——个人理解)
  • 重写:重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。也就是说“强制性异常”不能抛出更多!
  • 重载:可以更改返回类型,但不能作为重载的区别;还可以更改访问修饰符
  • abstract:抽象函数不能有实现(Abstract methods do not specify a body),抽象类下的非抽象函数则必须有实体。
  • 接口中的变量会被引式指定为静态公有

  Java泛型

  • 类型通配符 ?和通配符的上下限(? super XClass  表示 可以使用的类 必须是xclass的父类,extends则表是必须是子类)

        public static void main(String[] args){
    TestFcn1(new ArrayList<AClass>());
    TestFcn2(new ArrayList<CClass>());
    //TestFcn2(new ArrayList<AClass>());//in MainClass cannot be applied
    }
    /*
    * ? super XClass 类型必须是XClass的父类
    * ? extends XClass 类型必须是XClass的子类
    * */
    public static void TestFcn1(List<? super BClass> numList){ }
    public static void TestFcn2(List<? extends BClass> numList){ }

  Java序列化

  • 序列化就是把一个对象转换成字节码,字节码保存了对象的信息
  • 反序列化就是把字节码转换成对象
  • 使用关键子transient可以在序列化时不对数据不保存
  • 一个类能被序列化,前提条件是:实现了java.io.Serializable并且该类的所有属性都可以被序列化(如果一个属性不需要被序列化 则用transient关键子修饰)
  • 序列化和反序列化包含在类ObjectInputStream 和 ObjectOutputStream   objectread/write

  做一个飞机大战,主要理解继承、封装和堕多态等面向对象的思想,顺便打打基础!

Java 初学者的更多相关文章

  1. 一位资深程序员大牛给予Java初学者的学习路线建议

    java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈 ...

  2. 对Java初学者的忠告

    1) 适合自己的图书才是最好的,最好的书并不一定适合你,看自己的情况. 如果你是一个Java初学者一上手就捧一本Thinking in Java在手里,我想你的日子是不会好过的,那样的书给有一定基础的 ...

  3. Java初学者笔记

    Java初学者笔记 前提:认识汉字,认识英语单词,会用键盘打字 ------------------------------- 端口是什么: --------面向对象编程(OOP) 接口”(Inter ...

  4. 给JAVA初学者的50个忠告

    摘自: http://wenku.baidu.com/link?url=p5vDKt5bKzUXxG_hAsB9XopHJRROeovOGGh4jnXGZXiUedR-fNOLO7zb6ddENo5U ...

  5. java 初学者需注意问题

    1.Java为什么能跨平台运行? Java语言编写的程序既是编译型的,又是解释型的.程序代码经过编译之后转换为一种Java字节码的中间语言,Java虚拟机即JVM将对字节码进行解释和运行.编译只进行一 ...

  6. 一位资深程序员给予Java初学者的学习路线建议

    一位资深程序员给予Java初学者的学习路线建议 java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打算来点干 ...

  7. Java初学者:深度辨析"=="与equals的区别

    Java初学者:深度辨析"=="与equals()方法的区别 1.基本数据类型当中,"=="比较的是两个变量的值 int a=5; int b=4; 3 int ...

  8. Java初学者必知 关于Java字符串问题

    摘自 http://developer.51cto.com/art/201503/469443.htm 下面我为大家总结了10条Java开发者经常会提的关于Java字符串的问题,如果你也是Java初学 ...

  9. 转载:一位资深程序员大牛给予Java初学者的学习路线建议

    一位资深程序员大牛给予Java初学者的学习路线建议   java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打 ...

  10. Java初学者应该注意的学习问题

    作为初学者,在刚开始学习的时候,一定会走很多弯路.但其实很多弯路是不必走的,会浪费很多时间,导致学习效率大打折扣.今天小编给大家讲述一下,作为一个Java初学者,在开始学习的时候应该注意的问题,应该从 ...

随机推荐

  1. cocos2d-x 多触点监听

    [cpp] view plaincopy //首先到cocos2d-x项目下的ios目录下.找到AppController.mm文件,在函数 didFinishLaunchingWithOptions ...

  2. 我所不知的 javascript Object 的一些现象

    1.我们都知道对象访问属性有两种方法,一种是使用 . 操作符,使用它添加的属性名必须满足标识符的命名规范:另一种是使用 [] 键访问的方法,可以接受任意UTF-8/Unicode字符串作为属性名,在E ...

  3. Linux下查看history里的某种命令

    Linux下,直接键入history命令,会将当前账户此前所有的命令都显示出来,未免太多了些.如果我只想查找某种命令,怎么办? 比如说,我只想查找我之前运行过的 "git" 命令 ...

  4. Domain-specific language 领域特定语言

    https://en.wikipedia.org/wiki/Domain-specific_language A domain-specific language (DSL) is a compute ...

  5. MapReduce01

    ================== Hadoop内核 | MapReduce(分布式计算框架) ================== 源于Google的MapReduce论文 ----------& ...

  6. caffe代码阅读10:Caffe中卷积的实现细节(涉及到BaseConvolutionLayer、ConvolutionLayer、im2col等)-2016.4.3

    一. 卷积层的作用简单介绍 卷积层是深度神经网络中的一个重要的层,该层实现了局部感受野.通过这样的局部感受野,能够有效地减少參数的数目. 我们将结合caffe来解说详细是怎样实现卷积层的前传和反传的. ...

  7. 从新浪微博和MySQL的password保护机制谈HTTPS/SSL的必要性

    尽管业界已经达成共识,在传输用户password等须要保密的信息时,尽可能採用HTTPS/SSL协议传输. 但我们还是能够看到少数没实用HTTPS/SSL加密的站点或应用. 新浪微博的登录页面和MyS ...

  8. Linux下的IPC-UNIX Domain Socket【转】

    本文转载自:http://blog.csdn.net/guxch/article/details/7041052 一. 概述 UNIX Domain Socket是在socket架构上发展起来的用于同 ...

  9. C#使用Quartz.NET详解

    Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中.它提供了巨大的灵活性而不牺牲 ...

  10. hdoj--1205--吃糖果(规律)

     吃糖果 Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Sub ...