目录

1、Java程序基础

1.1 JDK和JRD

1.2 命令行操作

1.3 pubilic+class

1.4 字节码文件

2、标识符

2.1 标识符的组成

2.2 遵守驼峰命名方式

2.3 类名、接口名:

2.4 变量名、方法名:

2.5 常量名:

3、关键字

4、变量与常量

4.1 变量

4.2 常量

5、boolean类型

5.1 布尔类型的值

5.2 布尔类型占用的字节数

5.3 布尔类型的底层表示和定义

6、byte类型

7、char类型

7.1 char类型占有字节数

7.2 char类型与short类型

8、float类型与double类型

9、类型转换

10、类的定义

10.1 语法结构

10.2 基本数据类型

10.3 引用数据类型

11、逻辑运算符(布尔运算符)

11.1 逻辑与&

11.2 短路与&&

12、运算符

12.1 赋值运算符

12.2 字符串连接运算符

12.3 三元运算符/三目运算符/条件运算符

13、用户控制端输入

13.1 Scanner类中的方法

13.2 System.in和System.out方法

13.3 InputStreamReader和BufferedReader方法

13.4 nextLine( )和next( )的区别

14、方法

14.1 方法的定义,语法结构

14.2 方法在执行过程中,JVM内存的分配和变化

14.3 栈内存的特点

15、方法执行内存分析

16、方法重载(overload)

16.1 什么时候考虑使用方法重载?

16.2 构成方法重载的条件

16.3 方法重载的影响因素

16.4 方法重载的应用

17、方法递归


1、Java程序基础

1.1 JDK和JRD

JDK=JRE+Java开发工具;

JRD=JVM+Java核心类库;

1.2 命令行操作

cd md创建文件目录;

cd rd删除;

cd del删文件;

cd ..返回上一级;

cd /跳转目录;

1.3 pubilic+class

类名-->与文件名一致;

1.4 字节码文件

编译后生成字节码文件(.class)有几个类生成几个;


2、标识符

2.1 标识符的组成

数字、字母、下划线、美元符号(可以是中文),

与C语言相同首字符不能以数字开头;

与C语言相比,标识符的组成多了一个美元符号;

2.2 遵守驼峰命名方式

e.g. SytemService、UserService;

2.3 类名、接口名:

首字母大写,后面每个单词首字母大写;

2.4 变量名、方法名:

首字母小写,后面每个单词首字母大写;

2.5 常量名:

全部大写;

//与C语言的常量不同 字面值(数据)看见字知其数据;

e.g.10.100,3.14,"abc",'a',ture、false(布尔型);


3、关键字

关键字要小写

public、class、static、void......


4、变量与常量

4.1 变量

Java中变量必须声明再赋值才能访问(否则内存未开辟出来);

变量必须初始化

4.2 常量

常量有final关键字修饰;


5、boolean类型

5.1 布尔类型的值

boolean类型只有ture false 没有其他值;

5.2 布尔类型占用的字节数

boolen类型只占用1个字节;

5.3 布尔类型的底层表示和定义

不像C语言有0、1表示假和真;

底层false为0,ture为1;

定义:boolean i = true;


6、byte类型

byte类型表示8位带符号的二进制数


7、char类型

7.1 char类型占有字节数

char类型在java中占2个字节

7.2 char类型与short类型

char和short可表示的种类数量相同,但char可取更大的正整数;


8、float类型与double类型

java中无float类型,定义float类型时,在浮点数后+f

否则认为是double类型,编译失败;


9、类型转换

1、布尔类型无法强制转换;

2、Java:高精度赋值给低精度时需要强制转换,否则编译错误,显示不兼容的类型,高精度到低精度会造成损失精度;e.g.long-->int

3、C语言:高精度赋值给低精度时,会有精度缺失,但不会造成编译失败;

4、Java和C语言:低精度赋值给高精度(小容量-->大容量) 自动转换不存在精度损失;e.g. int-->long

5、当整数字面值未超过byte、short、char的取值范围可以直接赋值给byte、short、char;

6、byte、short、char混合运算时,先各自转换成int;

byte b=10;
b=b+5;
System.out.println(b);

编译报错,因为(b+5自动转换成了int类型,所以要想通过编译,需要加强制转换)

byte b=10;
b=(byte)(b+5);
System.out.println(b);

7、多种数据类型混合运算时,先转换成容量最大的类型;

8、long类型在后面+'L',long 10L,L用来判断是否为long类型;

9、float表示离散、有限、舍入误差、大约、接近不等于、0.1!=0.1,c=c+1;

需要完全避免用浮点数比较大小;

10、

int i = 128;
byte b=(byte) i;

输出为-127(因为有溢出);

11、JDK新特性

数字之间可以用下划线分隔,更清楚分辨位数;

e.g.10_0000_0000


10、类的定义

10.1 语法结构

[修饰符列表] class 类名{

}

String不属于基本数据类型,是一个字符串类型,也是一个引用类型;

引用数据类型还包括:类,接口,数组;

String是SUN在JavaSE中提供的字符串类型;

String.class字节码文件;

重点:

1、属性通常是采用一个变量的形式来完成定义的;

2、在类体当中,方法体之外定义的变量被称为"成员变量",成员变量没有赋值,系统赋默认值:一切向0看齐;

10.2 基本数据类型

byte、short、int、long、float、double、boolean、char;

10.3 引用数据类型

String.class SUN提供的;

System.class SUN提供的;

Student.class 程序员自定义的(是一个类,类型,引用数据类型);


11、逻辑运算符(布尔运算符)

& 逻辑与

| 逻辑或

!逻辑非(取反)

^ 逻辑异或(两边的算子只要不一样,结果就是ture)

&& 短路与

|| 短路或

1、逻辑运算符要求两边的算子都是布尔类型,并且逻辑运算符最终的运算结果也是一个布尔类型;

2、“短路与(或)”和“逻辑与(或)”最终的结果相同,只不过“短路与(或)”存在短路现象

11.1 逻辑与&

&左边无论是true还是flase都会计算右边;

int x=10;
int y=8;
System.out.println(x < y & ++x < y);
System.out.println(x);

运行结果为11

11.2 短路与&&

&&左边若为false则直接短路,右边不再计算(短路现象);

int x=10;
int y=8;
System.out.println(x < y && ++x < y);
System.out.println(x);

运行结果为10

从某个角度来看,短路与更智能,效率更高;


12、运算符

12.1 赋值运算符

+=、-=、*=、/=、%=;

byte、short、char混合运算时,先各自转换成int;

byte b=10;
b=b+5;
System.out.println(b);

编译报错,(b+5自动转换成了int类型,所以要想通过编译,需要加强制转换或者使用b+=5)

byte b=10;
b=(byte)(b+5);
b+=5;
System.out.println(b);

以上述例子为例

b+=5和b=b+5并不等同;

b+=5与b=(byte)(b+5)是等同的;

结论:

扩展类的赋值运算符不改变运算结果类型,假设最初这个变量的类型是byte类型,无论怎么进行追加或追减,最终该变量的数据类型还是byte类型,但有可能会损失;

12.2 字符串连接运算符

关于java中"+"运算符:

1、+运算符在java语言当中有两个作用:

*加法运算,求和;

*字符串的连接运算;

2、"+"两边的数据都是数字的话一定是加法运算;

3、"+"两边的数据只要有一个数据是字符串,一定会进行字符串的连接运算,连接运算之后的结果还是一个字符串类型

静态输出

e.g.System.out.println(10+20);//30

System.out.println(10+20+"30");//"3030"

System.out.println(10+(20+"30");//"102030"

System.out.println("10+20="+a+b);

"10+20="是字符串;

"10+20="+a先运算字符串+a等于个字符串"10+20=10";

"10+20="+a+b再运算+b等于个字符串"10+20=1020";

System.out.println("10+20="+(a+b));

此时先运算(a+b)=30,在进行字符串"10+20="+30="10+20=30";

动态输出

System.out.println(a+"+"+b+"="+(a+b));

12.3 三元运算符/三目运算符/条件运算符

e.g.1

10,'男'不是一个完整的java语句;

boolean sex=false;
sex ? '男' : '女';

编译会报错;

修改如下:

boolean sex=false;
char c = sex ? '男' : '女';
System.out.println(c);

e.g.2

boolean sex=false;
char c = sex ? "男" : '女';
System.out.println(c);

编译报错,类型不兼容,但可以直接用

System.out.println(sex ? "男" : '女');

13、用户控制端输入

第一步:创建键盘扫描器对象

java.util.scanner s = new java.util.Scanner(System.in);

第二步:调用Scanner对象的next()方法开始接收用户键盘输入

敲完回车键 键入的信息会自动赋值给标识符

String userInputContent = s.next();【以字符串的形式接收】

int num = s.nextInt();【以整型的形式接收】

//标识符的命名规范:见名知意

13.1 Scanner类中的方法

  • 优点一: 可以获取键盘输入的字符串 ;

  • 优点二: 有现成的获取int,float等类型数据,非常强大,也非常方便;

Scanner s = new Scanner(System.in);
System.out.println("ScannerTest, Please Enter Name:");
String name = sc.nextLine();  //读取字符串型输入 
Scanner s = new Scanner(System.in);
System.out.println("ScannerTest, Please Enter Age:");
int age = sc.nextInt();    //读取整型输入 
Scanner s = new Scanner(System.in);
System.out.println("ScannerTest, Please Enter Salary:");
float salary = sc.nextFloat(); //读取float型输入 
Scanner s = new Scanner(System.in); System.out.println("Your Information is as below:");
System.out.println("Name:" + name +"\n" + "Age:"+age + "\n"+"Salary:"+salary); 

13.2 System.in和System.out方法

  • 缺点一: 该方法能获取从键盘输入的字符,但只能针对一个字符的获取

  • 缺点二: 获取的只是char类型的。如果想获得int,float等类型的输入,比较麻烦。

try{ System.out.print("Enter a Char:"); char i = (char)System.in.read(); System.out.println("Yout Enter Char is:" + i);
}
catch(IOException e){ e.printStackTrace();
} 

13.3 InputStreamReader和BufferedReader方法

  • 优点: 可以获取键盘输入的字符串

  • 缺点: 如何要获取的是int,float等类型的仍然需要转换

System.out.println("ReadTest, Please Enter Data:");
InputStreamReader is = new InputStreamReader(System.in); //new构造InputStreamReader对象
BufferedReader br = new BufferedReader(is); //拿构造的方法传到BufferedReader中
try{ //该方法中有个IOExcepiton需要捕获 String name = br.readLine(); System.out.println("ReadTest Output:" + name);
}
catch(IOException e){ e.printStackTrace();
} 

13.4 nextLine( )和next( )的区别

nextLine( )方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。 next( )会自动消去有效字符前的空格,只返回输入的字符,不能得到带空格的字符串。


14、方法

14.1 方法的定义,语法结构

[修饰符列表] 返回值类型 方法名(形式参数列表){

方法体;

}

注意:

1)修饰符列表可选项,不是必须的,目前统一写成public static;

2)方法内的修饰符列表当中有static关键字时,调用方法:类名.方法名(实际参数列表);当方法在该类中时,"类名."可以省略;

3)方法名:首字母小写,后面每个字母大写,遵循驼峰规则;

4)建议一个源文件当中只定义一个class,比较清晰;

14.2 方法在执行过程中,JVM内存的分配和变化

14.2.1 方法的定义和执行:

方法只定义,不调用是不会执行的,并且在JVM中也不会给该方法分配"运行所属"的内存空间;只有调用的时候才会分配所属的内空间;

14.2.2 JVM内存划分上主要的内存空间:

方法区内存、堆内存、栈内存(还有其他的内存空间);

14.2.3 栈数据结构 :

*栈:stack,是一种数据结构;

*数据结构是数据的存储形态;

*常见的数据结构:数组、队列、栈、链表、二叉树、哈希表/散列表;

14.2.4 方法代码文件的存储位置,内存的分配位置:

1)方法代码片段属于.class字节码文件的一部分,字节码文件在类的加载的时候,将其放到了方法区当中。所以JVM中的三块主要的内存空间中方法区内存最先有数据。存在了代码片段;

2)代码片段虽然在方法区当中只要一份,但是可以重复调用。每一次调用这个方法的时候,需要给该方法分配独立的活动场所,在栈内存中分配【栈内存中分配方法运行的所属空间】;

3)方法在调用的瞬间会给该方法分配独立的内存空间,在栈中发生压栈动作,方法执行结束之后,给该方法分配独立的内存空间全部释放,此时发生弹栈动作。

压栈:给方法分配内存;

弹栈:释放该方法的内存空间;

4)局部变量在在“方法体”中声明,在栈中存储,运行时在栈中分配

e.g.下列程序模型就是一个压栈、弹栈的过程;

main begin
m1 begin
m2 begin
m3 begin
m3 over
m2 over
m3 over
main over

14.3 栈内存的特点

1)栈帧永远指向栈顶元素

2)栈顶元素处于活跃状态,其他元素静止

3)术语: 压栈/入栈/push

弹栈/出栈/pop

4)栈数据结构存储数据的特点:

先进后出;

后进先出;


15、方法执行内存分析

public class MethodTest01
{public static void main(String[] args){int a = 10;int b = 20;int restValue = sumInt(a,b);System.out.println("retValue = "+ retvalue);}public ststic int sumInt(int i,int j){int result = i + j;int num = 3;int reValue = divide (result,num);return retValue;}public static int divide (int x,int y){int z = x / y;return z;}
}


16、方法重载(overload)

优点:

功能不相同但相似,像是在使用同一个方法一样,程序员编写代码更加方便,也不需要记忆更多的方法名,代码更美观;

(javascript不支持方法重载机制)

public class MethodTest01
{public static void main(String[] args){System.out.println(sum(1,2));System.out.println(sum(1.0,2.0));System.out.println(sum(1L,2L));}public static int sum(int a,int b){return a + b;}public static long sum(long a,long b){return a + b;}public static double sum(double a,double b){return a + b;}
}

参数的类型不同,对应调用的方法也不同。此时区分方法不再依靠方法名了,依靠的是实参的数据类型。

16.1 什么时候考虑使用方法重载?

*功能相似的时候,尽可能让方法名相同;

【功能不同/不相似的时候,尽可能让方法名不同】;

16.2 构成方法重载的条件

1)在同一个类中

2)方法名相同

3)参数列表不同

(数量不同、顺序不同、类型不同)

16.3 方法重载的影响因素

1)方法重载和方法名+参数列表有关;

2)方法重载和返回值类型无关;

3)方法重载和修饰符列表无关;

16.4 方法重载的应用

用户自定义封装一段代码,使得在使用时更加便捷快速调用;

public class helloworld
{public static void main(String[] args){U.v(2.0);}
}
class U
{public static void v(long b){System.out.println(b);}public static void v(double b){System.out.println(b);}public static void v(short b){System.out.println(b);}public static void v(char b){System.out.println(b);}public static void v(String b){System.out.println(b);}public static void v(byte b){System.out.println(b);}
}

17、方法递归

缺点:

耗费栈内存,调用一次方法栈内存就会新分配一块所属的内存空间;

当没有结束条件时,栈内存溢出错误,错误无法挽回,只要一个结果,就是JVM停止工作;

【超硬核】Java SE 基础语法知识点 (C语言快速转Java)相关推荐

  1. 【java学习之路】(java SE篇)002.java SE基础语法

    IDE使用 IDE:集成开发环境 HelloWorld的输出 public class Hello {public static void main(String[] args) {System.ou ...

  2. 【java学习之路】(java SE篇)003.java SE基础语法之数组

    数组 1.数组初识 表示存储相同数据类型数据的有序集合 特点 数组中存放的数据必须是同一个数据类型,可以使基本数据类型也可以是引用数据类型 数组在定义的时候必须给定大小,而且大小不可以改变 可以通过下 ...

  3. 超硬核Java工程师学习指南,真正的从入门到精通,众多粉丝亲测已拿offer!

    最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都是站在Java后端的全局上进行思 ...

  4. 超硬核!兔兔阿里p7学长给的面试知识库

    一个阿里p7学长给的nosql面试知识库,绝对真实,学会了去面呀. 最近整理了一下超硬核系列的文章和面经系列的文章,可以持续关注下: 超硬核系列历史文章:(我保证每篇文章都有值得学习的地方,并且对小白 ...

  5. 超硬核!!!一篇文章搞定TCP、UDP、Socket、HTTP(详细网络编程内容+现实解释三次握手四次挥手+代码示例)【网络编程 1】

    TCP.UDP.Socket 一天面试的经验: 什么是网络编程 网络编程中两个主要的问题 网络协议是什么 为什么要对网络协议分层 计算机网络体系结构 1 TCP / UDP 1.1 什么是TCP/IP ...

  6. Phython基础语法知识点汇集

    Phython基础语法知识点汇集 原创 辰兮要努力 最后发布于2020-03-29 18:42:24 阅读数 3506 收藏 原力计划 发布于2020-03-29 18:42:24 分类专栏: Phy ...

  7. JAVA SE基础知识总结

    JAVA基础篇 1_JAVA语言概述 1.1 JAVA的总体概述 1.2 JAVA语言概述 1.2.1 基础常识 1.2.2 计算机语言的发展迭代史 1.2.3 Java语言版本迭代概述 1.2.4 ...

  8. 面试必会系列 - 1.1 Java SE 基础

    本文已收录至 github,完整图文:https://github.com/HanquanHq/MD-Notes Java SE 基础 面向对象 Java 按值调用还是引用调用? 按值调用指方法接收调 ...

  9. Java复习总结(二)Java SE基础知识

    Java SE面试题 目录 Java SE基础 基本语法 数据类型 关键字 面向对象 集合 集合类概述 Collection接口 进阶 线程 锁 JDK 反射 JVM GC io操作和NIO,AIO ...

最新文章

  1. python写byte数组到文件_这可能是写过最详细的Python文件操作。网友:收藏备用(中篇)...
  2. 需求调研计划_干货!如何做好一个BI项目的规划和需求定义?
  3. map 循环_被问到Spring循环依赖怎么解决?秀给面试官看!内附图解
  4. Java短类的compareTo()方法和示例
  5. 用Python批量更改图片大小
  6. jdk1.7 tomcat7 centos 安装
  7. 大乐透python预测程序_Python生成随机验证码,大乐透号码
  8. react native 处理iOS和安卓系统文字
  9. net core上传文件异常:Multipart body length limit 16384 exceeded.
  10. Openstack之路(四)计算服务Nova
  11. 计算机硬盘坏道解决办法
  12. 精通Javascript之引用
  13. CodeBlocks-20.03下载安装及中文教程
  14. php查重,知网查重时检测php之类的源码吗?【干货分享】
  15. box-sizing概述
  16. I Squared Capital投资AGP City Gas
  17. 夜曲歌词 拼音_矢野真纪《夜曲》罗马拼音歌词
  18. 测试功能点----方法
  19. android 网易新闻 详情页面实现,Android实现网易新闻客户端首页效果
  20. 光纤信号衰减的原理及分析

热门文章

  1. Android 蓝牙 IOS ANCE协议介绍 - 史上最详细
  2. Windows下查看显卡型号及所支持的CUDA版本
  3. 韩国这双开了挂的袜子,整个秋冬天脚后跟不干、不裂,3天就见效!!
  4. iPhone在App Store里下载应用很慢解决方法
  5. 超频到3200最佳时序_XPG 龙耀 D50 重装铠甲RGB内存 来了超频颗粒、1.95mm加厚散热...
  6. 【转载】把aspx文件编译成DLL文件-.NET教程,Asp.Net开发
  7. str.trim() 解决字符串全角空格的问题
  8. ​IBM董事长称北京污染已可找到原因;万达IBM签订战略合作协议 | IoT黑板报
  9. 【技术教程】EasyCVR视频融合云服务平台云端录像展示优化
  10. [js高手之路]html5 canvas动画教程 - 下雪效果