初学JavaSE

Java简介

Java面向对象程序设计语言和Java平台的总称。

Java常用术语介绍

JVM:java虚拟机,它是整个java实现跨平台的 最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可 以在虚拟机上执行,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解 释给本地系统执行。

JRE:java运行环境。光有JVM还不能成class的 执行,因为在解释class的时候JVM需要调用解释所需要的类库lib。 在JDK的安装目 录里你可以找到jre目录,里面有两个文件夹bin和lib,在 这里可以认为bin里的就是jvm,lib中则是jvm工 作所需要的类库,而jvm和 lib和起来就称为jre。

JDK:java开发工具包,基本上每个学java的人都会先在机器 上装一个JDK,那他都包含哪几部分呢?让我们看一下JDK的安装目录。在目录下面有 六个文件夹、一个src类库源码压缩包、和其他几个声明文件。其中,真正在运行java时起作用的 是以下四个文件夹:bin、include、lib、 jre。现在可以看出这样一个关系,JDK包含JRE,而JRE包 含JVM。

Eclipse:一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

IDE:集成开发环境IDE

,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器编译器调试器和图形用户界面等工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。

java中命名规则:

  • Package 的命名
Package 的名字应该都是由一个小写单词组成。
  • Class 的命名
Class 的名字必须由首字母大写的单词组成
  • Class 变量的命名
变量的名字必须用一个小写字母开头。后面的单词用大写字母开头。
  • Static Final 变量的命名
Static Final 变量的名字应该都大写,并且指出完整含义。
  • 参数的命名

  参数的名字必须和变量的命名规范一致。

  • 数组的命名

  数组应该总是用下面的方式来命名:

  byte[] buffer;

  而不是:

  byte buffer[];

  • 方法的参数

  使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名字:

  SetCounter(int size){

  this.size = size;

  }

  • Java 文件样式

  所有的 Java(*.java) 文件都必须遵守如下的样式规则

  • 版权信息

  版权信息必须在 java 文件的开头,比如:

  /**

  * Copyright ?0?3 2000 Shanghai XXX Co. Ltd.

  * All right reserved.

  */

  其他不需要出现在 javadoc 的信息也可以包含在这里。

  • Package/Imports

    package 行要在 import 行之前,import 中标准的包名要在本地的包名之前,而且按照字母顺序排列。如果 import 行中包含了同一个包中的不同子目录,则应该用 * 来处理。

      package hotlava.net.stats;

      import java.io.*;

      import java.util.Observable;

      import hotlava.util.Application;

      这里 java.io.* 使用来代替InputStream and OutputStream 的。

  • Class

      接下来的是类的注释,一般是用来解释类的。

      /**

      * A class representing a set of packet and byte counters

      * It is observable to allow it to be watched, but only

      * reports changes when the current set is complete

      */

      接下来是类定义,包含了在不同的行的 extends 和 implements

      public class CounterSet

      extends Observable

      implements Cloneable

      Class Fields

      接下来是类的成员变量:

      /**

      * Packet counters

      */

      protected int[] packets;

      public 的成员变量必须生成文档(JavaDoc)。proceted、private和 package 定义的成员变量如果名字含义明确的话,可以没有注释。

  • 存取方法

      接下来是类变量的存取的方法。它只是简单的用来将类的变量赋值获取值的话,可以简单的写在一行上。

      /**

      * Get the counters

      * @return an array containing the statistical data. This array has been

      * freshly allocated and can be modified by the caller.

      */

      public int[] getPackets() { return copyArray(packets, offset); }

      public int[] getBytes() { return copyArray(bytes, offset); }

      public int[] getPackets() { return packets; }

      public void setPackets(int[] packets) { this.packets = packets; }

      其它的方法不要写在一行上

  • 构造函数

  接下来是构造函数,它应该用递增的方式写(比如:参数多的写在后面)。

访问类型 ("public", "private" 等.) 和 任何 "static", "final" 或 "synchronized" 应该在一行中,并且方法和参数另写一行,这样可以使方法和参数更易读。

  public

  CounterSet(int size){

  this.size = size;

  }

  • 克隆方法

  如果这个类是可以被克隆的,那么下一步就是 clone 方法:

  public

  Object clone() {

  try {

  CounterSet obj = (CounterSet)super.clone();

  obj.packets = (int[])packets.clone();

  obj.size = size;

  return obj;

  }catch(CloneNotSupportedException e) {

  throw new InternalError("Unexpected CloneNotSUpportedException: " + e.getMessage());

  }

  }

  • 类方法

      下面开始写类的方法: 第一个单词首字母小写其他单词首字母大写

      /**

      * Set the packet counters

      */

      protected final

      void setArray(int[] r1, int[] r2, int[] r3, int[] r4)

      throws IllegalArgumentException

      {

      // Ensure the arrays www.gzlij.com are of equal size

    if (r1.length != r2.length || r1.length != r3.length || r1.length != r4.length)

      throw new IllegalArgumentException("Arrays must be of the same size");

      System.arraycopy(r1, 0, r3, 0, r1.length);

      System.arraycopy(r2, 0, r4, 0, r1.length);

      }

  • toString 方法

  无论如何,每一个类都应该定义 toString 方法:

  public

  String toString() {

  String retval = "CounterSet: ";

  for (int i = 0; i < data.length(); i++) {

  retval += data.bytes.toString();

  retval += data.packets.toString();

  }

  return retval;

  }

  }

  • main 方法

  如果main(String[]) 方法已经定义了, 那么它应该写在类的底部.

类和对象:

类是一种具有相同属性和行为的对象的抽样。

面向对象: 把软件系统看成各种对象的集合,对象是2最小的子系统。

类图:

Person
name、age、class(属性特征)

eat()

sleep()(方法)

实例化:根据类模板创建实例对象的过程。  格式:类名 对象名 = new 类名(参数1,参数2...参数n);

构造方法:构造方法是一种特殊的方法,它是一个与类同名且没有返回值类型的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。构造方法和其他方法一样也可以重载。

1.构造方法作用:构造出来一个类的实例   .对构造出来个一个类的实例(对象)初始化。
2.构造方法的名字必须与定义他的类名完全相同,没有返回类型,甚至连void也没有。
3.主要完成对象的初始化工作,构造方法的调用是在创建一个对象时使用new操作进行的。
4.自定义类中,如果不写构造方法,java系统会默认添加一个无参的构造方法。如果写了一个有参的构造方法,就一定要写无参构造方法。

方法的重载

构造方法的重载:在一个类内部,方法名相同,方法参数(个数、类型)不同的方法的再次加载。

常用的数据类型:

byte(字节)            8         -128 - 127                                                                              0
shot(短整型)         16       -32768 - 32768                                                     0
int(整型)              32    -2147483648-2147483648 0
long(长整型)         64     -9233372036854477808-9233372036854477808                     0       
float(浮点型)         32    -3.40292347E+38-3.40292347E+38                                     0.0f
double(双精度)      64    -1.79769313486231570E+308-1.79769313486231570E+308     0.0d
char(字符型)         16         ‘ \u0000 - u\ffff ’                                           ‘\u0000 ’
boolean(布尔型)     1         true/false                                                       false

常用的类:

String 字符串类
System 可得到系统信息
StringBuilder 字符串工具类
Thread 线程类
Math 与数学有关的工具类

ArrayList 底层用数组实现的集合
LinkedList 底层用链表实现的集合
HashMap 接口Map的一个实现类
HashSet 接口Set的一个实现类
Scanner 简单文本扫描器,即用户输入。
Calendar 日期类
Date 日期类

File 目录或文件操作类
FileInputStream 输入流
FileOutputStream 输出流
PrintWriter 写入同时可以对文件格式化
BufferedInputStream 具有缓冲的输入流
BufferedOutputStream 具有缓冲的输出流
BufferedReader 从字符输入流中读取文本,缓冲各个字符。

转义字符:\n  换行     \t  制表   \r   回车

字符串与类值类型间转换: int num1=Integer.parseInt(str 1)

int num1=1

int num2=9     System.out.println(+num1 +num2); 结果为19.

Scanner类介绍:

用于用户从键盘上输入。导包:import java.Util.Scanner

用法:Scanner input=new Scanner(System.in);

int num=input nextInt();输入整型数据

String str=input.next();输入字符串型数据

String str2=input.nexlLine();输入下一个字符串型数据

数组:

定义:int[]arr  常用

int arr[]

int[] arr=new int[5]   定义长度为5的数组

int[] arr=new int[]{1,2,3}

int[]arr={1,2,3,4,5}

数组的下标相当于一个指针,进行操作时需要加一指向下一个元素。

If分支结构介绍:

if(条件){

-----------              判断两字符串是否相等

          }else if(条件){     String name="lina"

------------             if("lina".equals(name)){

  }                

                          }

switch 语法介绍:

switch(expr){

  case value1:

    statements;

  break;

  ........

  default:

    statements;

  break;

}                                  每个case均以一个break结尾。这样可使执行流程跳转至switch主体的末
尾。这是构建switch语句的一种传统方式,但break是可选的。若省略break,会继续执行后面的case语
句的代码,直到遇到一个break为止。

for循环:

语法: for(初始语句;判断语句;累加语句){            ( 注意:初始语句应带上其数据类型。)

循环体

}

continue 和break:

continue: continue之后内容不执行,结束一次循环,重新开始另一次循环。

break:跳出整层循环。

while循环和do while循环:

语法:  while(条件判断语句){

循环体

}

自加语句(i++)                    ++i :先自加后执行其他运算;    i++: 先执行其他运算后自加;

语法:  do{

循环体

}while(条件判断语句);        循环至少执行一次。

冒泡排序:

过程: 使小的数据依次上浮。

若有n个数据,即总长为n,则从下标为0的 元素开始到下标为n-1的元素。

    比较轮数 i      次数 j

0                n-1

1                n-1-1

     2               n-1-1-1

...                 ...

i                  n-i-1

快速排序:

从待排数据中任取一个数据作为分界值,比这个分界值小的数放在左边,大的放在右边。对左右两个子序列递归。     

上一篇:我的前端工具集(八)获得html元素在页面中的位置


下一篇:学习笔记10—Python 绘图集