189 8069 5689

Java学习随便记1-创新互联

java 的 Hello World 比多数语言看上去都要复杂,因为再小的程序也要来一个 class,并且你的文件名必须和类名保持一致,不然编译器不好找待编译文件中谁才是“主子”类

创新互联是一家专注于做网站、成都网站制作与策划设计,大同网站建设哪家好?创新互联做网站,专注于网站建设十载,网设计领域的专业建站公司;建站业务涵盖:大同等地区。大同做网站价格咨询:18982081108
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

上面的 HelloWorld 类,需要被外部访问,所以访问控制标记为 public。里面的main函数意思差不多和 C/C++ 或者 golang 差不多,它要能被外部访问到,所以,也是 public的,因为它是“独生子女”,总是“单例”的,所以,是类的静态成员(标记static)。我不太清楚教java的老师是如何向“孩子们”解释这里的public和static的。(也许不解释:-))

上述代码保存到 HelloWorld.java文件,用 javac 命令编译为 .class文件,再用 java 命令执行:

sjg@sjg-PC:~/garbage/java_code$ javac HelloWorld.java 
sjg@sjg-PC:~/garbage/java_code$ ll
总用量 8
-rw-r--r-- 1 sjg sjg 425 12月  5 12:38 HelloWorld.class
-rw-r--r-- 1 sjg sjg 125 12月  5 12:38 HelloWorld.java
sjg@sjg-PC:~/garbage/java_code$ java HelloWorld 
Hello World

java 的类和对象的概念,把 C++和 C# 类似的概念搬过来就可以了,需要了解的一些点:

  • 构造函数和类同名,构造函数可以多个重载,一个都不提供也可以(此时编译器为你提供默认构造方法,相当于无参构造)。创建对象时用 new 关键字(可以同时与构造函数对应传参)。
  • 访问实例的变量和方法,都是 . 语法,不存在C/C++中->箭头语法,java没有指针,除了原始类型,应该都是引用
  • 源文件声明规则:每个源文件只有一个public类且文件名和类名一致,非public类可以多个。如果一个类属于某个包,则package语句要放在源文件首行。如果源文件有import语句,它们应在package语句和类定义之间(没有package就在最前面了)。这些,无论是和golang的package还是其他语言的namespace,都是差不多的。

java的数据类型分为内置数据类型(即原始数据类型)和引用数据类型。

内置数据类型又可以分为 byte(相当于int8)、short(相当于int16)、int(相当于int32)、long(相当于int64)、float(立即数需要后面标记f或F)、double(浮点默认类型)、boolean、char(注意,对应Unicode16)。这些原始数据类型中,最坑爹的莫过于char,它和其他语言基本上都不同,具体可以自己百度它的历史。内置类型和引用类型不同,它有自己的默认“零值”,而引用类型的默认“零值”都是null——引用类型都是内置类型“装箱”后在堆上生成的,和内置类型“值”来“值”去不一样。

内置类型前面的整数和中间浮点数满足以下自动类型转换规则:

byte,short,char—>int —>long—>float —>double

可以用C风格小括号强制类型转换(可能丢失精度或溢出):

byte b = (byte)i;  (int)23.7 == 23;  (int)-45.89f == -45

引用类型指向一个对象,我们说的引用类型变量的类型,指的是它所指的“东西”的类型。java 对象是引用类型,数组也是引用类型。

Java 使用修饰符 final 来定义常量:

final double PI = 3.1415927;

立即数的使用和 C++ 差不多,转义字符也差不多,就是字符可以用 '\u0001' 方式表达。

java的局部变量、实例变量、类变量概念和其他语言基本一致。

java的访问控制修饰符有 “零修饰符”(包内的)、private(类内的)、public(类外可见)、protected(包内的和家族的)。其中比较复杂的是 protected:如果声明为 protected的变量、方法够构造器和访问者(类)在同一个包内,那没有问题,可以访问;如果访问者不在同一个包内,此时的 protected 更接近 C++ 中家族的概念,即子类可以继承protected方法,在继承中使用,但子类实例不能不继承就使用另一个包内的protected方法——想想也对,你都不是我的“儿子”,又不是我所在“圈”(包)内的,凭什么让你调用protected方法。

访问控制的继承规则:(1)父亲说方法是public的,继承时儿子必须标记为public;(2)父亲说方法是 protected的,继承时儿子要么延续protected,要么标记为public,不能私有独吞影响继承链;(3)父亲说方法是private的,那当然,没人能继承或使用

其他修饰符:static表示方法或变量是类(共享、公共)一级的。final修饰符阻止了后代继承和篡改。abstract修饰符用来创建抽象类和抽象方法(提供协议和规约,不提供实现的类和方法,带abstract方法的类必须标为abstract,反之则不成立)。synchronized和volatile修饰符用于线程相关的编程。transient修饰符用来在持久化中标记不要持久化的变量。

Java运算符,基本上当C++即可。instanceof 运算符用来判断实例的类型(类或接口的兼容类型),基于反射的编程中有用。

Java 循环结构:和 C++ 一样,而且,有C++11一样的 for (T  var : a) { } 型遍历数组的结构。

java 条件语句:无论if...else和switch...case,当 C++即可。

和 C++ 不同,java 默认内置了很多现成的类,包括原始类型对应装箱的类(它们都是Number的子类,有一些相同的方法):Boolean(boxed boolean)、Byte(boxed byte)、Short(boxed short)、Integer(boxed int)、Long(boxed long)、Character(boxed char)、Float (boxed float)、Double(boxed double)、Math(也就是打包了一堆数学计算的静态方法)、字符串相关的String/StringBuffer(线程安全)/StringBuilder、Arrays(打包了操作数组的一些静态方法)、Date/Calendar/GregorianCalendar(从简单的时间日期到复杂的时区日历)、……

Java数组:声明  T[]   a;    创建  a = new T[size];   声明的同时立刻创建 T[]  a = new  T[size];

也可以初始化方式创建  T[]  a = {v0, v1, ..., vk};   java 数组的索引基于0,所以 a[1] 是第2个元素。

多维数组只是多括号而已  T[][]  a = new T[size1][size2];

Java正则表达式:  java的正则表达式和perl相似,所以,略。操作正则表达式,主要是 Pattern(用compile方法创建对象)、Matcher(用Pattern对象的matcher方法创建对象,它的实例意思类似一个匹配后的结果集)、PatternSyntaxException(非强制异常类,帮助了解正则表达式语法错误) 3个类。

Java中的IO:Java.io包几乎包含所有IO相关类。

静态类成员变量System.in代表标准输入流(它直接读取,是“节点流”的概念),它应该是编译器帮你处理好自动打开的对象,把它作为参数传递给 InputStreamReader 的构造函数,可以实现从字节流到字符流的转换(所以它是“处理流”的概念),而将 InputStreamReader流对象作为构造函数参数传递给 BufferedReader的构造函数,就可以实现带缓冲的字符读取(用read()方法读一个字节(不是字符,是int8),用readLine()方法读取一行,它当然也是“处理流”的概念)。

JDK5提供了Scanner类来实现获取用户输入,它直接用System.in作为参数来构造实例,用 hasNext()判断是否读完,用 next()或nextLine()来读取一个非空字符或下一行,还有 hasNextXxx()、nextXxx() 等方法来读取 int 或 float 数据。

控制台输出的最常用方法是 System.out.print() 和 System.out.println()。System.out 是 PrintStream流类的实例,不过它和System.in一样,是System类的静态成员变量,代表标准输出流(编译器帮你处理好自动打开的对象,直接输出,是“节点流”)。除了print()和println(),System.out还有write()方法(写字节,字节数组,字符串),不过不常用。

由于一个字符并不等于一个字节,所以,流又分为字节流和字符流。字节流从抽象基类 InputStream 和 OutputStream派生,字符流则从抽象基类 Reader 和 Writer派生。当然,它们派生的类又可以分成直接读写的“节点流” 和目的是处理的“处理流”。

可以参考他人整理的资料,例如  吃透Java IO:字节流、字符流、缓冲流 - 知乎

流面向的操作,除了标准输入和标准输出,另外一个常用的就是文件。这部分比较啰嗦,概念基本和其他语言相似,此处略过。

看来,想一篇就把java学完不行

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


新闻标题:Java学习随便记1-创新互联
URL链接:http://cdxtjz.cn/article/dhpogp.html

其他资讯