Java SE基础大纲:
1、基础
2、面向对象
3、线程(单例)
4、IO
5、数据结构(数组、集合、队列)
6、String类
一、输出hello world
package day01;
public class helloworld {
public static void main(String[] args){
System.out.println("hello world");
}
}
二、常量和变量
1. Java关键字(关键字都小写)
定义:Java关键字是电脑语言里事先定义的,又叫保留字,还有特别意义的变量;Java关键字对编译器有特殊意思,他们用来表示一种数据类型,或者表示程序的结构。
注意:关键字不能用作变量名、方法民、包名、类名、参数。
https://www.w3cschool.cn/java/java-keywords.html
abstract | assert |
---|---|
boolean | break |
byte | case |
– | – |
catch | char |
2. Java标识符
Java语言中,对于变量、常量、函数、语句块也有名字,我们统称为标识符。
标识符是用来给类、对象、方法、变量、接口和自定义数据类型命名的。
Java标识符是由数字、字母、下划线(_)、美元符号
、
人
民
币
符
号
¥
,
在
J
a
v
a
中
区
分
大
小
写
且
要
求
首
位
不
能
是
数
字
,
关
键
字
不
能
作
为
标
识
符
举
例
合
法
标
识
符
:
m
y
N
a
m
e
、
m
y
n
a
m
e
、
P
o
i
n
t
s
、
、人民币符号¥,在Java中区分大小写且要求首位不能是数字,关键字不能作为标识符 举例合法标识符: myName、my_name、Points、
、人民币符号¥,在Java中区分大小写且要求首位不能是数字,关键字不能作为标识符举例合法标识符:myName、myname、Points、points、_sys_ta、OK、_17er、17
非法标识符:
#name、class、25name、&time、if
命名约定:
类和接口名:包含大小写,每个字的首字母大写,MyClass、HelloWorld、
方法名:遵循驼峰规则setAppName
常量名:基本数据类型的常量名使用全部大写字母,字与字间用下划线分割,SIZE_NAME.
变量名:做到见名知意即可。
3、Java变量类型(区分大小写)
在Java中,必须先声明所有变量,然后才能使用它们。变量声明基本形式如下:
type = identifier [= value], identifier [= value] .....
- type类型可以是int float char double long
- identifier是变量的名称
- 初始化包括等号和值
要声明指定类型的多个变量,请用逗号分隔;
int a = 3, b, c = 5; //定义三个整型,并对a、c进行初始化
int d,e,f; //定义三个整形变量
在声明之前不能使用变量,如下会报错,正确应为int count;count = 100:
public class helloworld{
public static void main(String[] args){
count = 100;
int count;
System.out.println(count);
}
}
Java允许变量被动态初始化:
// c is dynamically initialized
double c = Math.sqrt(2 * 2);
System.out.println("c is " + c);
4、数据类型
一定是强类型的,int i = 1; 并不能像scala中一样能自动推导出数据类型
a.基本数据类型(int,float)char boolean
问题:基本数据类型在内存中占多少大小?
类型 | 存储需求 | bit数 |
---|---|---|
int | 4字节 | 4*8 |
long | 8字节 | 8*8 |
short | 2字节 | 2*8 |
byte | 1字节 | 1*8 |
float | 4字节 | 4*8 |
double | 8字节 | 8*8 |
char | 2字节 | 2*8 |
boolean | 1字节 | 1*8 |
b.引用数据类型
主要是类、接口、数组
在JVM中,基本数据类型存储的是什么?数据本身
引用数据类型存的又是什么?地址
package day01;
public class helloworld{
public static void main(String[] args){
String a = "abc";
String b = "abc";
if (a==b) {System.out.println("a == b");}
else {System.out.println("a != b");}
}
} //String类型在直接赋值时,如果内容相同,会指向同一个地址。
//a、b两个值判断,首先会去字符串常量池中找有没有字符串常量“abc”,在a已经产生了abc的前提下,b会直接指向字符串常量池的“abc”,所以两个的内存地址是一样的。
--------------------------------------------------------------------------
稍作变化后:
String a = "abc"
String b = new String( original: "abc"); //用new的话就会直接新建内存来存放。
–问题–?
枚举是否属于引用数据类型?
如何理解值传递和引用传递?Java是值传递还是引用传递?
- 自动类型转换
目标类型>源类型,double是8个字节,int是4个字节。
注意:只能是同类型的转换,两种类型需要兼容。
//低精度向高精度转换可以直接转换不会丢失精度
public static void main(String[] args) {
int i = 5;
double a = i;
System.out.println(a);
}
//高精度转换为低精度需要强制转换,需要注意的是精度丢失
double i = 5.4;
int a = (int)i;
System.out.println(a);
结果是5
强制类型转换应用场景:开发中调用一个方法,返回值是一个Object(是所有类的父类),Object obj = 对象.方法(…) User user = (User)obj;
-
常量
定义:在程序运行中一直不会改变的量称为常量,通常称为“final变量”,常量在整个过程中只能被赋值一次。在为所有对象共享时,常量是非常有用的。 -
注释
/*
**文档注释
** author john
**version 1.0
/ -
运算符 功能控制
a.算数运算符 + - * %
public class helloworld{
public static void main(String[] args) {
int i = 5;
int b = i++;
System.out.println(b);
Systrm.out.println(i);
}
//i++操作显先赋值再自增,把i的值赋值给b,此时b为5,i进行一个自增操作,于是变为了6,
所以输出 b = 5 , i = 6
--------------------------------------------
public class helloworld{
public static void main(String[] args) {
int i = 5;
int b = --i;
System.out.println(b);
System.out.println(i);
}
//--i操作先执行自减,再进行赋值,--i的值为4,再把4赋值给b,所以输出为b = 4,i = 4.
关于++和–的面试题:
int a = 3;
int b = 4;
int c = a++;
int d = --b;
System.out.println("a:" +a);
System.out.println("b:" +b);
System.out.println("c:" +c);
System.out.println("d:" +d);
答案输出什么:4 3 3 3
一开始a = 3,b = 4,进入到a++这一步,先赋值再自增,所以是c = 3,a自增长为4;--b执行的操作是,先自减,b = 4-1为3,再把3赋值给d.
b.赋值运算
如下:=、 +=、 -=、/= 、*=
c.比较运算符
下面四个只支持两边都是数值类型
<
=
<=
下面两个支持引用类型
==
!=
d.逻辑运算符
&& 、& 、||、|
&&:只有当&&左边的为真时,才会执行&&右边的程序;只有左边true右边为true,则结果为true;只要左边为false,则结果为false。
&:不管怎样,都会执行&左右两边的程序;只要左右两边有一个false,则为,false;两边都为true,则为true。
|| :表示或,只要第一个执行条件为真时,后面的条件不再判断
| :要对所有条件进行判断
public class helloworld{
public static void main(String[] args) {
System.out.println(func2());
}
public static boolean func1(){
return true;
}
public static boolean func2(){
return false;
}
----------------------------------------------------