Java语言特征

Java之父:詹姆斯,格斯林

跨平台:
一次编译,到处运行
write once,run everywhere!

Java是一种面向对象的编程语言(OOP)
面向对象(OO -- Oriented Object)

内置了大量的类库!

Java版本:
JavaSE(Java Standard Edition) java标准版
专门开发桌面级应用
JDK:Java Development Kit java开发工具包
JRE:Java Runtime Environment java运行环境
JVM:Java Virtual Machine java虚拟机

JavaEE(Java Enterprise Edition) java企业版
它是一个体系,不是一门具体的技术
包含EJB,Servlet,JSP...等技术

API(Application Programming Interface) 应用程序接口
==> 面向程序员

SPI(Service Provider Interface) 服务供应商接口
==> 面向服务供应商

JavaME(Java Micro Edition) java微型版
==> 安卓
-------------------------------------------------------

编写第一个Java程序:

编译 运行
XXX.java -------> XXX.class -------> 结果

.java 源文件
.class 字节码文件

---------------------------------------------------------

JAVA类的定义:

package xxx.xxx.xxx;

import xxx.xxx.xxx;

public class 类名 {
//方法
public static void main(String[] args){
//方法体;
//...;
}
}

注意点:
1.建议采用驼峰法(Camel)命名规范
类名必须与文件名一致
2.类名的每个单词首字母都必须大写
3.方法名首字母小写,以后每个单词首字母大写

类名
1.类名必须由数字,字母,_,$,中文汉字所组成,并且不能以数字开头
中文命名不推荐,因为可能产生乱码问题
2.不能是JAVA关键字
public,class,void,package,interface,abstract
private,protected,byte,short,int,char,long
double,float,boolean,enum,static,final,
......
3.不能是java的保留字:goto,const
4.不能是以下3个字面量:true,false,null
5.尽量不要是内置对象类型

注意:String不是关键字!

-------------------------------------------------------

包的概念

作用:
1.做为一种命名空间,保证在不同包下的类可以重名
2.可以方便管理和维护,因为包就是对于操作系统的文件夹

如何定义:
使用关键字:package

注意:
1.package语句必须放在整个类的第一行
2.包名采用小写字母编辑,并且中间以.隔开
3.自定义的包名,不能是java或者javax
4.一般情况下,包名采用公司域名的倒置来命名

如:
com.baidu.xxx;
com.tencent.xxx;

有了包过后,类的名字为
包名.类名 ----> 类的全限定名

------------------------------------------------------

Scanner:用来获取用户键盘输入

第一步:导入Scanner
关键字:import
import java.util.Scanner;

第二步:创建Scanner对象
Scanner sc = new Scanner(System.in);

第三步:使用创建的对象名去调用Scanner内部的方法
. 是用来调用方法或者属性
sc.nextLine();//用来获取用户输入的一行信息
sc.nextInt();//用来获取用户输入的整数

同包 不需要import
跨包 需要import

注意:
1.java.lang.*所有类是不需要import的,可以直接引用
2.如果导入某一个包中相同的几个类,则可以用简写形式:
xxx.xxx.*;
不推荐,会降低程序性能,因为要去搜索
3.nextInt()和nextLine()方法不能混用,会导致nextLine()方法出现问题.

------------------------------------------------------

输出语句
System.out.println("XXX");
ln表示输出完括号里面的内容过后换行

例如:
System.out.println("好好学习");
System.out.print("天天向上");

----------------------------------------------------------
注释:

代码:注释 = 1 : 2+

单行注释,修饰某一行代码
//

多行注释,修饰一段代码
/*
*
*/

文档注释,修饰类和方法
/**
*
*/

可以通过javadoc指令来生成API文档
Project -> Generate Javadoc

常用的标记:
@author 作者
@since 从以下哪个版本开始
@see 另请参见
@param 参数
@return 返回
@deprecated 已过时

数据(Data)

是系统的核心,我们编程的目的就是为了操作数据(增,删,改,查)

在代码中如何定义和存储数据呢?需要通过变量或者常量以及数据类型

注意:Java是一种强类型的语言,也就是说任何数据都需要有类型.
JavaScript,弱类型的编程语言,定义变量时无需声明数据类型

Java语言分为基本类型和对象类型两大类数据类型(无数种)
1)基本类型(8种):
名称 容量 范围 默认值
byte 字节型 占1字节=8bit -128~127 0
short 短整型 占2字节=16bit -32768~32767 0
int 整型 占4字节=32bit -2147483648~2147483647 0
long 长整型 占8字节=64bit -2^63 ~ 2^63 - 1 0
float 单精度浮点数 占4字节=32bit -3.4E+38 ~ 3.4E+38 0.0
double 双精度浮点数 占8字节=64bit -1.797E+308 ~ 1.797E+308 0.0
char 字符型 占2字节=16bit 'a' , 'B', '您' \u0000
boolean 布尔类型 占1字节=8bit true/false false

注:1.JAVA中所有的数字都是带符号的
2.字符型和字符串是不同的,字符型用单引号,字符串用双引号
char c = '您';
String s = "好好学习,天天向上!"
3.java中,你写一个整数,默认是int类型的,写一个小数,默认是double类型的.
float f = 3.4;//编译错误,3.4默认是double类型的,不能赋值给float类型的变量

4.cmd命令行中查看中文字的unicode编码的方法
a.打开命令行
b.输入native2ascii回车
c.输入想查询的中文字回车即可得到对应的unicode

ctrl + c 关闭当前转换进程

2)对象类型
a. 内置对象类型(API)
Scanner,Math,Random,String...

b. 自定义对象类型
我们编程时写过的所有类都是自定义对象类型
-------------------------------------------------------------------
特殊符号:
\t 制表符 表示隔开一个tab的距离
\n 换行 到下一行的起始位置
\r 回车 到当前行的起始位置
\b 退格 相当于键盘上的BackSpace
\\ 反斜杠
\" 双引号
\' 单引号
-------------------------------------------------------------------

变量

语法
数据类型 变量名 [= 给变量的初始值];

注:
变量名和类名一样,都是由数字,字母,_,$组成并且不能是数字开头
变量名可以是中文汉字,但是不推荐,因为可能出现乱码问题
变量名尽量首字母小写,以后每个单词首字母大写(常量除外)
如: int num = 1;
int inputInt = sc.nextInt();

|.可以在声明的时候直接初始化(第一次给变量赋值)
如:int i = 100;
double d = 3.14;
String str = "你好!";

||.先声明变量,在使用前,初始化
如:int i;
.....
i = 100;

字面量:就是指代数据本身,它也属于变量
"你好!",'A',3.14,100

注意:所有程序都是由变量所组成的!

给变量赋值的方式:
a.字面量赋值
int i = 3;

b.方法赋值
public int add(int i,int j){
return i + j;
}

int i = add(3,4);

c.表达式赋值
表达式:由变量和运算符组成的合法的语句
int i = sc.nextInt();

int a = 1, b = 2;
int i = a + b;

----------------------------------------------------------
常量

在变量的基础上加一个关键字 -- final

常量一定要初始化,它的值是不能改变的

如:
final int ROW_EACH_PAGE = 10;//定义了一个常量

常量的命名规则:使用大写字母,并且中间用下划线隔开

注意:常量比字面量携带更多的信息,提高了代码的可读性
----------------------------------------------------------

数据类型转换:
1.自动类型转换(隐式类型转换)
由精度小的数据类型可以自动转换成精度大的数据类型

如:byte -> short -> int -> long
char -> int
boolean -> int //error

2.强制类型转换
由精度大的数据类型往精度小的数据类型转换时,可能损失精度,
编译器会报错,必须采用强制转换
如:
1)在所需转换的数值前面加(类型)
注:这里的类型,可以是基本类型,也可以是对象类型
int i = 220900;
char c = (char)i;

float f = (float)3.14;

2)只有long,double,float可以这样转换
在所需转换的数值后面加L/l,D/d,F/f
float f = 3.14F;

注意:
在JAVA中,两种数据类型进行运算时,结果都是偏向数据类型
更大的那一方

----------------------------------------------------------

1byte = 8bit
1K = 1024byte
1MB = 1024K
1GB = 1024MB
1TB = 1024GB
1PB = 1024TB
1EB = 1024PB
1ZB = 1024EB
1YB = 1024ZB
1BB = 1024YB
1NB = 1024BB
1DB = 1024NB

注:手机流量是以1000为计算界限的
----------------------------------------------------------

进制
二进制:只有0和1所组成,每遇到2进1

二进制 十进制
0101 1*2^2 + 0*2^1 + 1*2^0 = 5
1010 1*2^3 + 1*2^1 = 10;
1111 15

二进制转十进制
先从右往左标记,从0开始,然后累加相应位置数字乘以进制数的标记次方

十进制转二进制
连续除以2,然后倒取余数

小练习:
39 --> 0010 0111

110010 --> 50
-------------------------------------------------------------

0011 1000 ---> 56
0001 1100 ---> 28
0000 1110 ---> 14
0000 0111 ---> 7

位移运算 -- 所有运算中效率最高的
二进制中,向右移动一位,相当于除以2,向左移动一位,相当于乘以2

八进制:由0~7组成,每逢8进1
032 0*8^2 + 3*8^1 + 2*8^0 = 26

十六进制:由0~9和A~F组成,以0x开头
int i = 0x0029;
2*16^1 + 9*16^0 = 41

小练习:
求出0x0419的二进制?
0x0419
求十进制:4*16^2 + 1*16^1 + 9*16^0 = 1049
求二进制:0100 0001 1001

系统内置的转换方法(十进制转换成相应字符串):
toBinaryString(int i) 转换二进制字符串表示

toHexString(int i) 转换十六进制字符串表示

toOctalString(int i) 转换八进制字符串表示
------------------------------------------------------------------

运算符

|.算术运算符
+ 1.数学运算 2.字符串的连接
- 减法(负号)
* 乘法
/ 除法 100/3 = 33 100/3.0 = 33.33333333
% 取余 100%3 = 1

= 表示赋值 int i = 3; 把3赋值给int类型的变量i
== 表示等于 返回类型:boolean

+= -= *= /= %=
如:
b = b + 1; --> b += 1;//后面这种写法可以避免类型转换问题

++ 自增
-- 自减
前++ 表示++写在变量的前面,表达式和变量的值本身都加1(先自增,后赋值)
后++ 表示++写在变量的后面,表达式的值不变,变量加1(先赋值,后自增)

位移运算:性能是最高的
<< 带符号左移位
>> 带符号右移位
>>> 不带符号右移位

注意:没有不带符号左移位(<<<)

<<= >>= >>>=

面试题:
请你用最快并且性能最高的方式得到4的3次方? 4<<3

算术运算符是一种二元运算符,需要两个参数来参与
对算术运算符来说,操作数只能是数字类型(整型,浮点型)
特殊例外:字符串可以用+运算(拼接)

低精度和高精度做运算时,结果是高精度
相同精度数据进行运算,结果是它本身的数据类型

||.比较运算符(返回布尔类型)
< 小于
> 大于
<= 小于等于
>= 大于等于
!= 不等于

|||.逻辑运算符

&& 短路逻辑与 同真为真,同假为假,只要有一个为假,结果为假

|| 逻辑或 同真为真,同假为假,只要有一个为真,结果为真

! 逻辑非 表示取反

如:
boolean b1 = true;
boolean b2 = false;
boolean b = b1 && b2;//false
b = b1 || b2;//true
b = !b1;//false

注意:
& 1.非短路的逻辑与(一般不用)
2.按位与

| 1.非短路的逻辑或(一般不用)
2.按位或

短路型和非短路型逻辑运算符的区别:

短路型运算符,如果运算符左边的结果可以决定整个式子的结果,
那么右边部分就不会执行了
所以,我们在编写代码的时候,需要考虑一下,把哪个条件放在运
算符前面
用逻辑与时,把两个条件中可能为false几率更大的一个放前面
用逻辑或时,把两个条件中可能为true几率更大的一个放前面
这样可以提升整个软件的性能.

||||.按位运算符
& 按位与(非短路逻辑与) 同0为0,同1为1,不同为0
| 按位或(非短路逻辑或) 同0为0,同1为1,不同为1
^ 按位异或 相同为0,不同为1
公式:
一个数连续异或同一个数两次,结果是它本身
5 ^ 7 ^ 7 = 5

如:
5的二进制:0101
7的二进制:0111

0101
& 0111
------
0101 -- 5 & 7 = 5

0101
| 0111
------
0111 -- 5 | 7 = 7

0101
^ 0111
------
0010 -- 5 ^ 7 = 2
^ 0111
------
0101

~ 按位取反
0变1,1变0

负数,在计算机中是以补码的形式存储的

补码 = 原码取反 + 1
~x = -(x + 1)

负数的二进制如何得到?
2的二进制 00000000 00000000 00000000 00000010
按位取反 11111111 11111111 11111111 11111101
再+1 11111111 11111111 11111111 11111110
-2的二进制 11111111 11111111 11111111 11111110

-9的二进制:
00000000 00000000 00000000 00001001
11111111 11111111 11111111 11110110
11111111 11111111 11111111 11110111

~9 = -10
11111111 11111111 11111111 11110110

00000000 00000000 00000000 00001010
11111111 11111111 11111111 11110110

--------------------------------------------------------------

三目运算符 ? :
作用:条件判断

condition ? expression_1 : expression_2;
条件?表达式1:表达式2;

当条件成立时,执行表达式1,当条件不成立是,执行表达式2

相当于
if(条件){
//表达式1;
}else{
//表达式2;
}

Java笔记(一)的更多相关文章

  1. Effective Java笔记一 创建和销毁对象

    Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...

  2. java笔记00-目录

    --2013年7月26日17:49:59 学习java已久,趁最近有空,写一个总结: java笔记01-反射:

  3. java笔记整理

    Java 笔记整理 包含内容     Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ...

  4. 转 Java笔记:Java内存模型

    Java笔记:Java内存模型 2014.04.09 | Comments 1. 基本概念 <深入理解Java内存模型>详细讲解了java的内存模型,这里对其中的一些基本概念做个简单的笔记 ...

  5. servlet(6) - servlet总结 - 小易Java笔记

    垂阅前必看: 这都是我总结的我觉得是学习servlet应该掌握的,我在学习期间也做了一个博客项目来让所学的知识得以巩固.下面就是博客项目链接.前面的servlet相关的笔记总汇,还有就是我把觉得在学习 ...

  6. Java笔记 —— 继承

    Java笔记 -- 继承 h2{ color: #4ABCDE; } a{ text-decoration: none!important; } a:hover{ color: red !import ...

  7. Java笔记 —— 方法重载和方法重写

    Java笔记 -- 方法重载和方法重写 h2{ color: #4ABCDE; } a{ text-decoration: none !important; } a:hover{ color: red ...

  8. Java笔记 —— 初始化

    Java笔记 -- 初始化 h2{ color: #4ABCDE; } a{ text-decoration: none !important; } a:hover{ color: red !impo ...

  9. Java笔记 —— this 关键字

    Java笔记 -- this 关键字 h2{ color: #4ABCDE; } a{ color: blue; text-decoration: none; } a:hover{ color: re ...

  10. Java 笔记 —— java 和 javac

    Java 笔记 -- java 和 javac h2{ color: #4ABCDE; } a{ text-decoration: none !important; } a:hover{ color: ...

随机推荐

  1. php获取文件名称和扩展名

    1.basename()-返回路径的文件名请看下面php代码: <?php $path = "/usr/www/html/index.php"; echo basename( ...

  2. sqlalchemy数据模型

    sqlalchemy在python里作为orm还是比较有名气的,以下是建立的几个简单模型,完全可和flask的数据持久层分离. # coding: utf8 from sqlalchemy impor ...

  3. 经验分享:Linux 双网卡 不同网段 网络互通

    环境如下: 现状:一台linux主机上有两个网卡eth0 和eth1 ,机器能访问192网的服务资源,但不能访问10网段的资源. 要求:linux能通过eth1访问10网段的资源 路由: 网卡: 操作 ...

  4. Bulkcopy对应的实现是Oracle的SQL*LOADER,期间造成Index Unusable,并且last_ddl_time上是不体现的

    部分项目反馈系统整体突然变慢,经查询发现一个系统核心的大数据表的索引状态全部是Unusable. 导致索引失效的直接原因:当某些操作导致数据的rowid改变,索引就会完全失效. 那什么时候会导致row ...

  5. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:5.安装Oracle RAC FAQ-RAC安装DB软件runInstaller看不到节点

    集群安装正常: [root@kmdbrac1 ~]# crs_stat -t -v Name Type R/RA F/FT Target State Host -------------------- ...

  6. SSIS 文件系统任务无法使用变量配置目标路径

    SSIS 文件系统任务无法使用变量配置目标路径 需求: 在SSIS2012中,某个从平面文件导入数据的包中,需要把处理出错的文件拷贝到一个专门的文件夹,便于管理人员及时处理. 问题描述: 1. 在包参 ...

  7. TIOBE Index for January 2016(转载)

    Java has won the TIOBE Index programming language award of the year. This is because Java has the la ...

  8. Linux的nm查看动态和静态库中的符号

    功能 列出.o .a .so中的符号信息,包括诸如符号的值,符号类型及符号名称等.所谓符号,通常指定义出的函数,全局变量等等. 使用 nm [option(s)] [file(s)] 有用的optio ...

  9. 01从c到c++

    c++的发展历史  + 80年代贝尔实验室 本贾尼 + 83年 正式命名c++ + 87年 gnu制定了c++标准 + 92年 微软和IBM分别制定了c++标准 + 98年 ansi ISO 制定了标 ...

  10. Bower 自定义组件文件夹名称

    默认情况下, bower 会自动把文件安装在文件夹 bower_components 下面,如果希望自定义这个文件夹的名称为 components ,可以创建一个名称为 ".bowerrc& ...