artificerpi

Java 数据类型与基础知识

1. Java数据类型

java有两种数据类型:  原始数据类型引用(对象)数据类型  

  • Primitive Data Types
  • Reference/Object Data Types

 

1.1   8种基本数据类型

byte

  • Byte data type is an 8-bit signed two's complement integer       (two's complement integer 二进制补码)

short

  • Short data type is a 16-bit signed two's complement integer

int 

  • Int data type is a 32-bit signed two's complement integer.

long 

  • Long data type is a 64-bit signed two's complement integer

float 

  • Float data type is a single-precision 32-bit IEEE 754 floating point

double

  • double data type is a double-precision 64-bit IEEE 754 floating point

boolean

  • boolean data type represents one bit of information

char

  • char data type is a single 16-bit Unicode character
  • Minimum value is '\u0000' (or 0)
  • Maximum value is '\uffff' (or 65,535 inclusive)
  • Char data type is used to store any character
  • Example: char letterA = 'A'

 

Three-bit two's-complement integers
BitsUnsigned
value
Two's
complement
value
011 3  3 
010 2  2 
001 1  1 
000 0  0 
111 7  -1 
110 6  -2 
101 5  -3 
100 4  -4 

1.2 类型转换

  •  总是可以将一个数值赋给支持更大数值范围类型的变量。
    • 例如 int --> float,  long --> float都是可以的, (注意,可以将long型的值赋给float型变量)
    • 类型转换不改变被转换的变量  double d = 4.5; int i = (int)d; //i becomes 4, but d is not changed, still 4.5
    • 将一个int型变量赋值给short型或byte型变量,必须显示使用类型转换  int i = 1; byte b = i;   // Error because explicit casting is required
    • 只要整型直接量实在目标变量允许的范围内,那么将整型直接量赋给short型或者byte型变量时,就不需要显示的类型转换   byte a = 1;  byte b =  'c';  // ok
    • boolean只有true和false,较特殊的非数值型,不能进行强制转换
    • char类型和int类型在允许范围内可以互相转换
  • 类型转换的语法要求目标类型放在括号内,紧跟其后的是要转换的变量名或值。  eg: int a = (int) b;     (b: long)

 

 

  switch 支持的类型: (java 7)

    A switch works with the byteshortchar, and int primitive data types. It also works with enumerated types (discussed in Enum Types), the String class, and a few special classes that wrap certain primitive types: CharacterByteShort, andInteger (discussed in Numbers and Strings).

 

1.3 包装类(Wrapper class) 

 Byte, Short, Integer, Long, Float, Double, Boolean, Character.

 开箱

 

对应数据库

 

SQLJDBC/JavasetXXXgetXXX
VARCHAR java.lang.String setString getString
CHAR java.lang.String setString getString
LONGVARCHAR java.lang.String setString getString
BIT boolean setBoolean getBoolean
NUMERIC java.math.BigDecimal setBigDecimal getBigDecimal
TINYINT byte setByte getByte
SMALLINT short setShort getShort
INTEGER int setInt getInt
BIGINT long setLong getLong
REAL float setFloat getFloat
FLOAT float setFloat getFloat
DOUBLE double setDouble getDouble
VARBINARY byte[ ] setBytes getBytes
BINARY byte[ ] setBytes getBytes
DATE java.sql.Date setDate getDate
TIME java.sql.Time setTime getTime
TIMESTAMP java.sql.Timestamp setTimestamp getTimestamp
CLOB java.sql.Clob setClob getClob
BLOB java.sql.Blob setBlob getBlob
ARRAY java.sql.Array setARRAY getARRAY
REF java.sql.Ref SetRef getRef
STRUCT java.sql.Struct SetStruct getStruct

 

  • 注意在java中,(任何方法中的)局部变量必须初始化后才使用(区别于声明变量),否则编译无法通过。

 

2. 基础知识之零散集合

java.lang.Object

API  官方doc

    Object()
    默认构造方法
    clone() 
    创建并返回此对象的一个副本。 
    equals(Object obj) 
    指示某个其他对象是否与此对象“相等”。 
    finalize() 
    当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。 
    getClass() 
    返回一个对象的运行时类。 
    hashCode() 
    返回该对象的哈希码值。 
    notify() 
    唤醒在此对象监视器上等待的单个线程。 
    notifyAll() 
    唤醒在此对象监视器上等待的所有线程。 
    toString() 
    返回该对象的字符串表示。 
    wait() 
    导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法。 
    wait(long timeout) 
    导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量。 
    wait(long timeout, int nanos) 
    导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量。
View 展开

 

面向对象语言与过程式语言的比较 (Procedural Languages and Object-oriented Languages)

  过程式编程是传统的编程方式,它遵循了与计算机硬件相符合的方式来执行程序(获取指令,解码,执行)。

  如果把数据项看作一个对象,那么一个程序可以看作一系列在此对象上的操作。 [假设]

  • 在过程式编程中,这些对象和操作是独立而分离的。对象可以存储在计算机中,不同的程序在它们上面使用不同的操作。这些对象是被动的(passive),程序员定义好操作并应用到这些对象上。
  • 在面向对象编程中,对象和操作联系在一起,程序员同时定义好对象和在该对象上的操作。程序员或其他程序员可以使用这个结合并调用其中的一些操作来解决某个问题,因此这些对象是活跃的(actived)。

 

 类的设计原则

  • 內聚性
  • 一致性
  • 封装性
  • 清晰性
  • 完整性
  • 实例和静态

  如果方法不依赖于某个具体的实例,那就应该将它声明为静态方法。

 

Java修饰符

 

goto, const是c++中的保留字,目前在Java中不能使用。注意true,false,null是字面常量,不是关键字。

 

分支语句

break

  •  unlabeled
  •  labeled  

continue

return

 

输入输出重定向

测试某个代码的时候,如果需要从控制台输入大量数据,从键盘上输入是非成乏味的事情,而且容易出错。可以将数据保存在一个文本文件中重定向输入。

示例

 1 import java.util.Scanner;
 2 
 3 public class Hello {
 4     public static void main(String[] args){
 5         Scanner sc = new Scanner(System.in);
 6         String data = sc.nextLine();
 7         System.out.println(data);
 8     }
 9 
10 }
View Code

运行 (这里会将数据输出到output.txt文件而不是控制台)

java Hello < input.txt > output.txt

  

程序设计风格

1. 适当的注释和注释风格

  使用javadoc注释(/**...*/)来注释整个类或整个方法。为了将这些注释提取出来放在一个javadoc的HTML文件中,这些注释必须放在类或方法头的前面,要注释方法中的某一步骤,建议使用行注释(//)。

2. 命名习惯

3. 适当的缩进和空白

4. 块的风格 (recommend end-of-line)

 

编程哲学KISS (Keep it simple, stupid) ,写优雅的代码,简单而有效。  elegant, simple and effective.

  • Google Java Code Style

    https://google.github.io/styleguide/javaguide.html

 

Effective Java 

UML

 

参考:

https://www.tutorialspoint.com/java/java_basic_datatypes.htm

http://www.tutorialspoint.com/jdbc/jdbc-data-types.htm

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html

posted @ 2016-09-29 11:25  artificerpi  阅读(218)  评论(0编辑  收藏  举报

Copyright ©2017 artificerpi