java 从零开始

来源:互联网 发布:unity优化方案 编辑:程序博客网 时间:2024/06/06 01:38

    我们作为程序员编写程序,就是在和计算机进行沟通,学好了编程,就是让人可以更随心的同计算机进行沟通。这种沟通是一种创造性的工作,创造性的工作就是要参与到这个世界的创造中来。

    我们在这里将从最java的最基础学起。

    首先,我们来看java jdk的安装。jdk下载后,安装到计算中后,要设置两个环境变量。path环境变量的设置是在电脑的高级属性中,修改增加 jdk 的bin目录,注意,在这里要先用分号;检查设置成功的方法是在命令行下输入 java -version。classpath环境变量的设置是电脑的高级属性中,增加classpath 属性,然后把其值设置为英文的点号(.)。

环境变量是一些列键值对。

path 环境变量是外部命令路径。classpath环境变量是class(类文件)的路径,用点,表示的是当前路径。

JDK中包含bin,include,lib,jre等。

JRE是java运行环境。JRE包括java虚拟机,java平台核心类文件,其它支持类文件。

 

JVM虚拟机,是由软件模拟出来的计算机。

JVM可以有运行在各种硬件平台机器上得版本,而java程序是二进制代码,它直接运行在JVM上。所以java跨平台。

 

 

java代码,Hello world.

public  class Hello{

     public static void main(String args[]) {

          System.out.println("Hello world!");

   } 

}

 

编译 javac Hello.java

  生成 Hello.class

执行 java Hello

注意,在这里执行的时候,不要加扩展名 class .

 

我们在写程序的时候要养成一些基本的好习惯,比如:成对的符号,成对书写;注意代码的缩进;注意代码的大小写等。

 

java的语法,java 的语义。

记录清晰,概念准确。反复练习,熟能生巧。

 

计算机的特点,计算机是一种极度精确地设备,存储信息要明确的指出位置和大小。

java语言的变量声明,就是指出变量的位置和大小。

 

变量命名规范,这里以驼峰命名为例,也是为主:

1.变量命名应该用有意义的英文单词。

2.变量名如果只有一个单词,则所有字母小写。

3.变量名如果由多个单词组成,则从第二个单词开始首字母大写。

 

java使用 Unicode编码,在Unicode中的字母和汉字使用的是一样多的长度4个字节,所以 java中的cha 是可以表示汉字的。

比如  char='中' 。

 

java的运算符和表达式。

java的分支语句。

顺序结构,分支结构,循环结构。

 

面向对象。

面向对象是一种编程方法,而不是一门编程语言;

面向对象是一种思维方式。

 

学习面向对象的方法。

掌握一门面向对象的语言的语法;

掌握面向对象的思维方式,多训练才能有面向对象的思维;

熟悉面向对象设计原则,最终极目标就是要减少重复代码,比如开放封闭原则等;

掌握面向对象的设计模式,前人设计经验的总结。

**** 思维方式 ---->  设计原则 ---->  设计模式

 

**** 方式 ---->  原则 ---->  模式

 

 

思维方式的转变:

先虑谁来做,后确定怎么做;

先虑整体,后考虑局部;

先考虑抽象,后考虑具体。

 

创建类的方法

创建对象的方法

对象和对象的引用

 

Person zhangsan=new Person("zhangsan");

1. 在占内存上声明一个引用 zhangsan;

2.在对内存上创建一个对象;

3.把对象赋值给引用。

这里可以画出一个图,其中表示出占内存,和堆内存。

 

对象的使用方法;

多对象的创建方法;

匿名对象的创建和使用方法,匿名对象就是一次性的对象!

 

函数的重载,java允许函数重名。

两个或者多个函数在同一个类中;

函数名相同;

参数列表不同。

 

构造函数作用。

默认的构造函数由编译器检查创建;

带参数的构造函数可以给属性赋予初始值;

如果有带参数的构造函数,那么就不可以再用为空的构造函数。

 

使用 this 调用成员变量和成员函数;

this 是一个对象,代表调用者的对象。也就是 代表 自己。

可以用来区分 成员变量 和  参数变量。

 

使用this调用构造函数;

构造函数赋值的时候,可以使用this 来区分成员变量和构造函数的参数。

***使用 this 来调用 本类的 其它内部构造函数!!!消除重复代码!

******this函数的调用必须要写在第一个语句,一个中只能调用一次,若多次,则在前面前面调入。

********这可以看做是构造函数通过this来进行串联,一次只能联一个!

 

class Person{

  String name;

  int    age;

  String address;

Person(){

}

Person(String name,int age){

    this.name=name;

    this.age=age;

}

Person(String name ,int age, String address){

    this(name,age);

    this.address=address;

}

}

 

 

static关键字的用法。

1.定义静态变量:

可以直接通过类名直接调用,但不是必须;

多个对象共用静态变量。

 

 

2.定义静态函数:

可以直接通过类名调用,但不是必须的;

静态函数中无法引用非静态的成员变量;

 

3.定义静态代码块:

直接在类中对代码段使用 static {  }

装在类的时候执行,然后再解释去执行对象的建立。

主要用来给静态变量赋予初始值。

 

java的继承

java只支持单继承;

只修改父类,便于维护;

减少重复代码。

 

生成子类的过程;使用super调用父类构造函数;

继承的时候,构造函数不能被继承;

在子类的构造函数中必须先调用父类的构造函数,如果子类没有显示声明调用的话,编译器会自动先加上super();

使用super()的时候,一定是在子类构造函数的第一行。

 

函数的复写,override,重新写父类函数的实现,也叫重写;

它必须满足两个条件,1是父子类关系,2是函数的声名完全一样;

 

override 叫重写,用在父子类中,参数相同;

overload叫重载,用在同个类中,参数不同;

 

super调用父类的成员函数;

super.fuctest();

这种super调用,可以写在函数中的各个位置,要看具体需要。

 

对象的转型。

向上转型:将子类的对象赋值给父类的引用,这个引用能够调用哪些成员变量取决于这个引用的类型。

向下转型:将父类的对象赋值给子类的引用。

*** 向下转型是先把子类向上转型为父类,然后再把父类转换为子类(强制);不可以直接把父类对象转换为子类对象!!!

 

抽象函数:

只有函数的定义,没有函数体的函数被称为抽象函数。

abstract  void myfun();

 

抽象类:

使用abstract修饰的类称为抽象类,它有以下三个特点。

1.抽象类不能够生成对象;

2.如果一个类当中包含有抽象函数吗,那么这个类必须声明为抽象类;

3.如果一个类当中没有抽象函数,那么这个类也可以被声明为抽象类。

 

抽象类就是用来被继承的;

抽象类是可以有构造函数的,抽象类的构造函数是为子类的构造函数通过super 来调用构造函数。

 

包的概念和访问

将类放置到一个包当中,需要使用package  "包名"

编译时需要使用 -d 参数,该参数的作用是依照包名生成相应的文件夹

一个类的全名应该是 包名. 类名

 

包名的命名规范:

1.要求包名的字母都要小写;

2.包名一般是你的域名倒过来写;

 

软件包是为java类提供命名空间;

打包时需要使用package指令;

一个类的全名应该是 类名 + 包名

 

public  可以修饰类、成员变量和成员函数;

没有任何限制,同一个包当中,或者不同包当中都可以自由访问;

 

private 只可以修饰成员变量和成员方法,只能在本类中使用。

 

default ,不写就是默认的,可以修饰类,成员变量,成员函数;在同一个类当中可以自由访问;

 

访问权限与继承的关系:

如果子类和父类不在同一个包当中, default的成员变量和成员函数,不能在继承中被使用,在同一个包中可以;

private的成员变量和成员函数即使在同一个包中,也不能被使用;

protected,拥有与default一样的功能,但该功能只能修饰成员变量和成员函数。可以被继承访问,但不可以被不同的类访问。

 

public   -->protected   -->default   -->private

 

import  导入其它包。这样要用其它包的public 类,那么就可以简单写类名就可以了。

 

 

***接口是面向对象的核心!

使用interface定义;

接口当中的方法都是抽象方法,默认不用写;

接口当中的方法权限都是public,默认不用写;

 

实现接口使用implents关键字;

一个类可以实现多个接口;

一个接口可以继承多个接口;

 

简单静态工厂模式,用静态函数和向上转型。

 

java异常 

 中断正常指令流的事件 。

jdk的异常包括,基类 是 Throwable,两个子类 Exception 和  Error .

产生Error的时候,虚拟机将关机。

 

try{

可能出异常的代码;

}catch{

处理异常的代码;

}finally{

释放资源等的代码,无论是否出异常都要执行;

}

 

Spring的AOP事务管理默认是针对unchecked exception回滚。

Exception作为基类,下面还分checked exception和unchecked exception。如果客户端可以通过其他的方法恢复异常,那么这种异常就是checked exception;

如果客户端对出现的这种异常无能为力,那么这种异常就是Unchecked exception;简单来说,继承于RuntimeException的都是unchecked exception。

Error:
1.总是不可控制的(unchecked)
2.经常用来用于表示系统错误或低层资源的错误
3.如何可能的话,应该在系统级被捕捉 

Exception:
1.可以是可被控制(checked) 或不可控制的(unchecked)
2.表示一个由程序员导致的错误
3.应该在应用程序级被处理 

Java 中定义了两类异常:
1) Checked exception: 这类异常都是Exception的子类 。异常的向上抛出机制进行处理,假如子类可能产生A异常,那么在父类中也必须throws A异常。可能导致的问题:代码效率低,耦合度过高。
2) Unchecked exception: 这类异常都是RuntimeException的子类,虽然RuntimeException同样也是Exception的子类,但是它们是不同的,它们不能通过client code来试图解决,所以称为Unchecked exception 。

 

throw :抛出异常,使用在函数中;

在抛出unchecked exception的时候不需要捕捉,但是在抛出checked exception需要自己捕捉。

 

throws:声明异常,使用在函数声明尾巴;

表示函数有可能带异常,这样对checked exception就可以抛出到调用中去捕捉异常。

 

 

IO编程

IO的分类

第一种分发:输入,输出;

第二种分发:字节流,字符流;

第三种分发:节点流,处理流。

 

字节流的核心类:

InPutStream,   OutPutStream  ,这两个类都是抽象类,这两个是所有字节流的父类,

FileInPutStream,  FileOutPutStream

 

大文件的读写

 

 

字符流的使用

  字符流的基础类是Reader,Writer;对应生成的子类包括  FileReader, FileWriter

 

处理流 BufferReader ,主要使用它的readLine()方法。

节点流和处理流:

节点流是被修饰者,处理流是修使者。