Java基础总结

来源:互联网 发布:淘宝举报刷销量 编辑:程序博客网 时间:2024/06/16 01:15

Java简介


1)java 特点: 简单, 面向对象, 跨平台, 安全, 支持多线程

2) java 的跨平台


        Java 通过JVM(虚拟机) 实现了跨平台技术
        Java 源代码(*.java)经过Java的编译器编译成
        Java字节码(*.class),执行Java字节码,Java字节码
        经过JVM的解释为具体平台的具体指令,并执行。
        不同平台(系统)有不同的JVM,主流平台都提供了JVM。所以
        JAVA字节码可以在所有平台上能够解释执行。在这个
        意义上Java是跨平台的。也就是说:Java 的字节码是跨平台的。


3) Java JDK 


JDK java 开发
     |-- bin 开发工具(命令:java,javac,jar,javad,jar,rmic,jps...)
     |-- jre JRE Java运行环境
       |-- lib (rt.jar) Java API(应用编程接口,系统类库)
       |    (java 提供的现成组件)
       |-- bin (java_vm)JVM Java虚拟机
编程习惯介绍:
原则:让别人看的清楚、舒服 Java里面取名应“见名知意”.
大括号对齐
遇到大括号往里缩进(按tab键)
程序块之间加空行
并排语句之间加空格
等号两侧加空格
左大括号前要加空格
成对编程

Java文件中的命名规则
类名首字母要大写
变量名和方法名首字母要小写
运用驼峰表示法(第一个单词首字母小写,其他单词首字母大写)

Java语言的特点:
          1 跨平台:一次编译,到处运行(通过JVM实现);
        2 简单:简化C++,取消了指针,对指针进行上层的封装,它保证能够通过这个指针(引用),来访问有效的内存单元;
        3 纯面向对象的语言,所以的属性、方法都要放在类中;
        4 垃圾回收机制,自动垃圾收集,永远不会出现内存泄露的问题。
虚拟机:
        Java语言是先编译后解释,java源码是通过编译器编译成java字节码(*.class)的字节码文件,然后再由JVM进行解释运行。

Java环境变量配置(参加工作第一天可能会用上,可以记在自己的笔记上)
Windows下面:
        1.JAVA_HOME:指明JDK安装路径
2.PATH:%JAVA_HOME%/bin;C:/Windows;C:/Windows/Command
3. CLASSPATH: set CLASSPATH=%JAVA_HOME%/jre/lib/rt.jar;.
Linux下面:
        1.export JAVA_HOME=/usr/local/jdk
2.export PATH=$JAVA_HOME/binPATH
3.export CLASSPATH=$JAVA_HOME/jre/lib/rt.jar:.

注:windows下分隔符是;而linux下分隔符是:
执行过程中的内存管理
code segment 存放代码
data segment 静态变量、字符串常量
stack 栈  局部变量
heap 堆 new出来的东西
寄存器:处理器内部,由编译器分配,我们没有直接控制权。
标识符:
        定义:凡是自己可以取名字的地方都叫标识符,都遵守标识符规则。
        1.由字母、下划线“_”、美元符“$”或数字组成
2.以字母,下划线,美元符开头
3.java标识符大小写敏感
4.关键字都是小写英文.

Java关键字: if, public, class, else, while
特殊关键字: goto, const
java中 true, false, null 不是关键字, 是字面量!

JAVA的注释:
1.单行注释//
2.多行注释/*   */
3.文档注释/**  */

隐式类型转换:
自动类型提升:
        A运算符B
        A和B中有一个是double,结果就是double;
A和B中有一个是float,结果就是float;
A和B中有一个是long,结果就是long;
同时存在(double>float>long)
除此上之外的情况,结果都是int。

隐式类型转换:

直接量默认数据类型:
           int a = 321;
           int x = 2147483648; // 错,超出范围 
>16 进制直接量,以“0x”开头
           int b = 0xFF; // 255
>8 进制直接量,以“0”开头
           int c = 0377; // 255
>byte、short、char 用适当的整数(字面量)直接量赋值
          byte b = 127;//最大值
          short s = 32767;
          char c = 65535;//最大值
          char x = 65536; // 错,超出范围
>以“L”结尾的整数直接量是 long 类型 
           long a = 2147483648L;
           long x = 2147483648; // 错,不加L默认为int类型
>浮点数数字直接量是 double 类型
           double a = 3.14;
           double b = 5.26E100;
>在数字直接量后加“D”也表示 double 类型
           double b = 3.14D;
           double c = 5D;
>在数字直接量后加“F”表示 float 类型
           float e = 3.14F; 
>Char 类型直接量可以是字符或整数
           char a = ‘a’;
           char b = ‘啊’;
           char c = 97;
           char d = ‘\u0061’;//16进制
注意: byte a=1;  a=a+2;//错误   a+=2;//正确
变量:
        变量:变量是内存中的一小块区域 使用变量名来访问这块区域
因此,每一个变量使用前必须先申明,然后必须进行赋值,才能使用。



成员变量包括实例变量和静态变量


实例变量:
1、在一个类中,任何方法之外定义的变量;
2、从面向对象的思想来说我们又把实例变量看成一个类的属性。
3、实例变量在没有赋初值时系统会自动帮我们做初始化,默认初始化值: 
byte  short   int   long  为 0 
float  double 为 0.0 
char  为 ‘\0’ 
boolean  为 false 
引用类型为null
局部变量:
    1、在方法内定义的变量叫局部变量。
2、局部变量使用前必须初始化,系统不会自动给局部变量做初始化。
3、局部变量前面只能用final修饰或者不加修饰
    4、局部变量的生命范围在他所在的代码块,在重合的作用域范围内不允许两个局部变量命名冲突。
注:局部变量与实例变量允许同名,在局部变量的作用域内,其优先级高于实例变量。
    我们可以用this.实例变量名  以区分局部变量。

JAVA中方法的功能及动作:
        1) 方法就是函数 例如:y=f(x)=3x+6;
2) 方法的语法
        (修饰词)(返回值类型)(方法名)(参数列表){
                 //方法体
        }
        public static void main(String[] args){}
   例如:
        public static int f(int x){
           int y = 3 * x + 4;
           return y;
        }
     4) 如果定义了返回值类型 就必须有return语句, 返回结果为
和该返回值类型兼容的数据
5) 方法的参数和方法内部的变量 都是局部变量,变量作用域只在方法内部!
6) 实参: 方法调用时候实际传递的参数变量(具体的值)
        形参: 方法的参数定义,是临时变量.(方法的参数列表)
JAVA的运算符:
1.算术运算(+ - * / %)
a)运算的封闭性
i.同种类型参与运算(可能发生自动类型转换)
ii.返回同种类型(可能发生上溢出或下溢出)
iii.Byte/short/char按照int运算
b)整数的运算结果是整数(小数点忽略不计)
c)余数
i.0 对其他数的 余数 是0
ii.n%3 是 周期函数, 函数值 [0,3)
iii.负数的余数是负数(考试可能出现, 工作中很少用)

2.自增(自减)运算 ++   --
a)可以将当前变量自我增加(减少)1
b)i++, 后++, 先将i的值作为整个表达式的值, 然后将i增加1. 就是:Int a=i;i++;
c)++i, 先++, 先将i增加1, 然后将i的值作为整个表达的值. 就是:i++; int a=i;
3.逻辑与比较运算
a)逻辑运算
i.短路运算(遇到不满足情况立即结束)  ||   &&   非
ii.非短路运算(执行完全部过程)        |  &   
b)比较运算(比较变量的值,逐位比较)>  >=  <  <=  ==  !=
i.基本类型变量的值就是基本值(int a=1)
ii.引用类型变量的值就是对象地址(引用内存中的一块区域)
4.条件运算符(3元运算符)
语法规则:条件表达式?表达式1:表达式2
当"条件表达式"为true时候, 表达式1作为整个表达式的值, 
否则 表达式2作为整个表达式的值
5.移位运算符
运算对象是二进制的“位”。可单独用它们处理整数类型(主类型的一种)。
左移位(<<):左移位 低位补0
       右移位:分为无符号和有符号
                                  有符号(>>),若值为正高位补0,值为负高位补1
                  无符号(>>>),无论值为正负,在高位都补0
       其中无符号移位是java新添运算,是c或c++没有的。

       注:移位可与等号(<<=或>>=或>>>=)组合使用。此时,运算符左边的值
会移动由右边的值指定的位数,再将得到的结果赋回左边的值。

6.逗号运算符
在java中,唯一用到逗号运算符的就是for循环中,格式如下:
        for(int i = 0, j = 1;i < 10 && j != 11;i++, j++)
无论在初始化还是在步进部分,语句都是顺序执行的。此外,尽管初始化部分可设置任意数量的定义,但都属于同一类型。



面向对象:


一. OOP中的基本概念


    Java的编程语言是面向对象的,采用这种语言进行编程称为面向对象编程(Object-Oriented Programming, OOP), 它允许
    设计者将面向对象设计实现为一个可运行的系统。Java的编程单位是类,对象最后要通过类进行实例化(即“创建”)。


二. 抽象数据类型

    在java中,我们用class 这个关键字来表示一个类,类是一个抽象的数据类型。

三. 类和对象

    面向对象的开发方法把软件系统看成各种对象的集合,对象就是最小的子系统,一组相关的对象能够组合成更复杂的
    子系统。面向对象的开发方法将软件系统看成各种对象的集合,接近人的自然思维方式。

    对象是对问题领域中事件的抽象。对象具有以下特性:

    1) 万物皆为对象。问题领域中的实体和概念都可以抽象为对象。例如学生,成绩单、教师、课和教室。
    2) 每个对象都是惟一的。正如世界上不存在一模一样的叶子。
    3) 对象具有属性和行为。
       
    4) 对象具有状态。状态是指某个瞬间对象的各个属性的取值。对象的某些行为会改变对象自身的状态,即属性的取值。
       例如小张本来体重为40kg,经为减肥后,体重减到45kg. 

     
    5) 每个对象都是某个类的实例。小张和小王都属于学生类、中国和美国都属于国家类、中文和英文都属于语言类。
       类是具有相同属性和行为的对象的集合。

       同一个类的所有实例都有相同属性,但属性取值不一事实上相同,但是它们的状态不一定相同。例如小张和小王都属
       于学生类,都有姓名、性别、年龄、身高和体重这些属性,但是他们的属性取值不同。

       同一个类的所有实例都有相同行为,意味着它们具有一些相同的功能。

    类是一组具有相同属性和行为对象的模板。面向对象编程的主要任务就是定义对象模型中的各个类。   
  
    1) 类是一种类型:是引用类型;
    2) 类是元数据:  描述数据的数据,数据在面向对象领域里以对象的形式存在,类是对象共有属性和方法的抽象描述。

    Java程序是各种对象相互交互作用、而不是类。


四. 定义方法形式

    接下来我们来看一下类中定义的方法的格式。
    修饰符 返回类型 方法名(参数列表)

    1) 必须有返回值,如果方法没有返回值,必须用void申明返回类型。
    2) 构造器没有返回类型。

五. 参数传递

    参数传递分为两种:
    1) 对于基本数据类型,参数通过值传递。
    2) 对于类类型,参数通过引用(对象的引用)传递。
    3) 只有引用传递的内容能被改变,而按值传递不会变化。

   

六. this关键字

    在方法调用、参数传递过程中,极有可能出现参数名称与实例变量名同时的情况。在一个方法内,可以定义和成员变量同名的局
    部变量或参数,此时成员变量被屏蔽。

七. 数据隐藏

    那如何对属性进行隐藏呢?
    在前面用private修饰,表示该属性不能被其它类访问和修改,它只能被本类访问和修改,范围限制在本类内。


八. 封装

    另一个方面就是让实现细节不可见(方法(行为)实现的具体细节隐藏。)
    那如何去访问那些private的属性呢?
    提供一个统一的接口给所有的用户,用户只有通过这个接口来访问。
    可以提高可维护性。
    
    封装:在属性(实例变量)前加private, 然后通过统一的方法访问以及修改这些属性值的实现过程;

    注意:1) 实现封装的关键在于绝不让其它类访问该类的实例字段。
          2) 提供一个统一的接口给所有的用户,用户只有通过这个接口来访问。

九. 方法重载

    有时侯,类的同一种功能有多种实现方式,有很多相同名称的方法,参数不同。这给用户对这种功能的调用使用提供了
    很大的灵活性。

    对于类的方法(包括从父类中继承的方法), 如果有两个方法的方法名相同,但参数不一致,那么可以说,一个方法是另一个方法的重载
    方法。这种现象叫重载。

    重载必须满足以下条件:
    1) 方法名称相同。

    2) 参数不同(参数类型、个数和顺序)。

   3) 返回类型可以不相同。

    在一个类中不允许定义两个方法名相同,并且参数签名也完全相同的方法。因为假如存在这样的两个方法,Java虚拟机在运行时就无法
    决定到底执行哪个方法。参数签名是指参数的类型、个数和顺序。


    图解面向对象:

 
0 0