小白学javaDAY1
JAVA基础知识
问答学习:
下列纯属作者根据所学自问自答,欢迎大大们指正
Q java出现的原因
A.java的出现是为解决让编写的程序跨平台运行的难题。
(后续自扯为了了解自己懂些啥东西,望见谅哈,希望游客们指正)
-
实现跨平台需要依赖Java的虚拟机JVM。JVAM是啥,JVM是Java程序运行的容器,同时也是操作系统的一个进程,因此有自己的运行的生命周期,也有自己的代码和数据空间(来自百度,自己除了第一句略懂外,其余只能卖个萌了😵)。
-
说到JVM,就得扯JRE,又来了,JRE是哪位??? JRE是个运行环境,就说没它你没法运行Java程序(没法run)
。JRE=JVM+类库,这个组成不难理解,JVM跨平台运行必备,也必须得是JRE这个运行环境的组成部分,不可分割。出现了个类库,,哈哈哈,待我再查查。 -
什么是核心类库和Java API 呢。API即应用程序编程接口。
Java 语言预先定义好了各种的类库,我们在编写程序时直接导入就可以直接使用这些已经被打包好的接口和类来实现具体的功能,不需要自己重新写,这简直就是开外挂啊。所以说装了JRE,那不仅编写的程序可以运行了,相关的类库也有了,在编写程序时直接开外挂importJRE中的类库,绝佳。这也说明其实运行普通的Java程序不安装JDK,只安装JRE也行。 -
哈哈哈,又来了个新客,JDK。这JDK
可是位大老板,是整个Java的核心,包括了Java运行环境JRE,Java工具和Java基础的类库。它为啥是核心呢,我们熟知的编程工具Eclipse,Netbeans,IDEA……(其实我就只用过这三个java编程工具),你要用Java写程序,就必须得安装JDK,安装好JDK再安装如IDEA、NetBeans之类的平台。 -
安装好JDK好像还有个问题,就得配置java环境。1. 配置JAVA_HOME 新建JAVA_HOME( 变量名
JAVA_HOME\ 变量值 C:\Program Files\Java\jdk1.8.0_131
你的jdk安装地址)2.配置PATH (变量名 Path\变量值 %JAVA_HOME%\bin;)3.配置CLASSPATH
(新建CALSSPATH \变量名 CLASSPATH \变量值
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;(注意的是最前面的".;"
)) 看到一篇棒棒哒的JDK安装和java环境配置的博客 -
JDK与JRE区别在哪?没有JDK的话,无法编译Java程序,若已安装相应的JRE这个可以只运行Java程序。JDK中JRE,只要安装了JDK,就无需管什么JRE了,编译运行都齐活了。
-
JavaSE是为开发普通桌面和商务应用程序提供的解决方案,可以完成一些桌面应用程序的开发。JavaEE(Java Platform Enterprise Edition)企业版主要针对于Web应用程序开发 , 是为开发企业环境下的应用程序提供的一套解决方案,该技术体系中包含的技术如 Servlet、Jsp等。JavaME(Java Platform Micro Edition)小型版是为开发电子消费产品和嵌入式设备提供的解决方案。 JavaSE技术体系是其他两者的基础。
作业区
2.1 使用输出语句打印各类型变量
在主方法中,使用输出语句,输出如下变量
(1)整数变量i1: 88, i2:-88
(2)小数变量d: 88.888
(3)字符变量ch1: ‘A’, ch2:‘8’
(4)布尔变量flag1: true, flag2:false
package homework1;
public class test1 {
public static void main(String[] args){
int i1=88,i2=-88;
double d=88.88;
char ch1='A',ch2='8';
boolean flag1=true, flag2=false;
System.out.println("i1:"+i1+"\n"+"d:"+d);
System.out.println("ch1:"+ch1+"\n"+"ch2:"+ch2);
System.out.println("flag1:"+flag1+"\n"+"flag2:"+flag2);
}
}
结果:
2.2 打印一段话
输出效果如下:
好好学习~
天天向上~
键盘敲烂,月薪过万~~
package homework1;
public class test2 {
public static void main(String args[]){
System.out.println(
"好好学习~"+"\n"+"天天向上~"+"\n"+"键盘敲烂,月薪过万~~键盘敲烂,月薪过万~~"
);
}
}
结果:
2.3 打印菱形
思考:
- 菱形对称图形,用循环先把上半部分打印出来,再打印下半部分。
- 以每行先打印几个空格,再打印几个星号的思路,考虑规律进行编写
- 学习java的for循环语句或python的for循环语句
分析:
- 星星数量自上而下:1,3,5,7,9,7,5,3,1
- 共计9行,自上而下当行号<6时星数以d=2的等差递增,当行号>=6时星数以d=2的等差递减
打印实心菱形
java代码
public class test3 {
public static void main(String[] args) {
int i, j;
for (i = 1; i <= 5; i++) {
for (j = 1; j <= 5 - i; j++) {
System.out.print(" ");
}
for (j = 1; j <= 2 * i - 1; j++) {
System.out.print("*");
}
System.out.println();
}
for (i = 1; i <= 4; i++) {
for (j = 1; j <= i; j++) {
System.out.print(" ");
}
for (j = 1; j <= 9 - 2 * i; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
代码结果:
python代码
for i in range(1,6):
for j in range(5-i):
print(' ',end='')
for j in range(1,2*i):
print('*',end='')
print('\n')
for i in range(1,6):
for j in range(i):
print(' ',end='')
for j in range(9-2*i):
print('*',end='')
print('\n')
代码结果:
打印空心菱形
java代码
public class konglingxing {
public static void main(String[] args) {
int i, j;
//上半部分的代码
for (i = 1; i <= 5; i++) {
for (j = 1; j <= 5 - i; j++) {
System.out.print(" ");
}
//与实心菱形的区别在于在打印*时用了if语句
for (j = 1; j <= 2 * i - 1; j++) {//每行空格后的第一个和最后一个是*,其余都是空心
if (j == 1 || j == 2 * i - 1) { //j==1解释为此次循环的第一次循环,另一个就是最后一次循环
System.out.print("*");
} else {
System.out.print(" ");
}
}
System.out.println("");
}
//下半部分的代码
for (i = 1; i <= 4; i++) {
for (j = 1; j <= i; j++) {
System.out.print(" ");
}
//与实心菱形的区别在于在打印*时用了if语句
for (j = 1; j <= 9 - 2 * i; j++) {
if (j == 1 || j == 9 - 2 * i) {
System.out.print("*"); }
else {
System.out.print(" ");
}
}
System.out.println("");
}
}
}
结果:
python代码:
代码1:
for i in range(1,6):
for j in range(5-i):
print(' ',end='')
for j in range(1,2*i):
#与实心菱形的区别在于在打印*时用了if语句
if j==1 or j==2*i-1:
print('*',end='')#注意一定要用end=''不换行
else:
print(' ',end='')#注意一定要用end=''不换行
print('\n')
for i in range(1,5):
for j in range(i):
print(' ',end='')
for j in range(1,10-2*i):
#与实心菱形的区别在于在打印*时用了if语句
if j==1 or j==9-2*i:
print('*',end='')
else:
print(' ',end='')
print('\n')
代码2:
for i in range(1,6):
for j in range(5-i):
print(' ',end='')
for j in range(2*i-1):#与代码1的区别在range函数中的值,了解range(a)和range(1,a)的区别
if j==0 or j==2*i-2:
print('*',end='')#注意一定要用end=''不换行
else:
print(' ',end='')#注意一定要用end=''不换行
print('\n')
for i in range(1,5):
for j in range(i):
print(' ',end='')
for j in range(9-2*i):
if j==0 or j==8-2*i:
print('*',end='')
else:
print(' ',end='')
print('\n')
结果:
来一个交互打印菱形
再来个好玩的,你想要几行的菱形嘞,随意输哦,作者python代码初学未入门,Java还不会传参,尴尬了。
感觉自己编的这个循环冗杂了,而且计数有问题,欢迎大大们指正!!!!
import time
k=0
while k==0:
round=0
x=int(input('你想打印多少行的菱形:'))
round=round+1
if x%2==0:
print('皮卡丘,很抱歉,此题已超出我的能力范围哩')
time.sleep(0.5)
print('…………')
time.sleep(1)
print('…………')
time.sleep(0.5)
choice1=input('您还继续否,继续回yes,退出回no哦:')
if choice1=='yes':
x=int(input('你想打印多少行的菱形,万万记住不要再是偶数行咯,不然我就随意应付:'))
y=int((x+1)/2 )#所打印的上半部分有几行
for i in range(1,y+1):
for j in range(y-i):
print(' ',end='')
for j in range(1,2*i):
print('*',end='')
print('\n')
for i in range(1,y):
for j in range(i):
print(' ',end='')
for j in range(x-2*i):
print('*',end='')
print('\n')
print('我猜这一定就是你想要的答案')
time.sleep(1)
print('这是您的第'+str(round)+'个菱形哦')
print('-----------------------------------------------')
time.sleep(1)
choice2=input('还再来一轮否??(我在看着你噢,皮卡丘!!!)继续就来个1,不来就随便啦:')
if choice2=='1':
continue
else:
print('亲爱的旅人,您的旅程结束咯')
break
else:
print('拜拜啦')
break
else:
y=int((x+1)/2 )#所打印的上半部分有几行
for i in range(1,y+1):
for j in range(y-i):
print(' ',end='')
for j in range(1,2*i):
print('*',end='')
print('\n')
for i in range(1,y):
for j in range(i):
print(' ',end='')
for j in range(x-2*i):
print('*',end='')
print('\n')
print('我猜这一定就是你想要的答案')
time.sleep(1)
print('这是您的第'+str(round)+'个菱形哦')
print('-----------------------------------------------')
time.sleep(1)
choice2=input('还再来一轮否??(我在看着你噢,皮卡丘!!!)继续就来个1,不来就随便啦:')
if choice2=='1':
continue
else:
print('亲爱的旅人,您的旅程结束咯')
break
ps:哭瞎,熬了几天的作业,就说咋一开始就打印空心菱形了呢,刚再翻开作业题写的是请用输出语句输出如下图形,哎。不说了,继续下一题
2.4 送你一朵rose,来自出题者的浪漫
学会这一招,以后可以省去一大笔送女朋友玫瑰花的钱!!!
public class rose {
public static void main(String[] args) {
System.out.println("{@}");
System.out.println("/"+"|"+"\\");
System.out.println(" "+"|");
}
}
哈哈哈,抱歉啦,这朵玫瑰好像有点不是很能拿得出手😂,得召唤出我强大的想象力
2.5 阿修找茬
问题代码1:
public class Task07_01 {
public static void main(String[] args) {
int a; //无初始值
System.out.println(a);
{
int c = 20;
System.out.println(c);
}
c = 30;//无数据类型
System.out.println(c);
}
}
修正代码:
int a=0;
a=1;
System.out.println(a);
{
int c = 20;
System.out.println(c);
}
int c = 30;
System.out.println(c);
}
Q1:int a;不对,为啥?
A1:必须得记的知识点,变量定义格式(固定格式,万年不变)
数据类型 变量名 = 初始化值;
问题代码2:
byte b1=3,b2=4,b;
b=b1+b2;
b=3+4;
此处有个注意点:
整数默认是int类型,定义long型数据,数据后加L。
浮点数默认是double类型,定义float型数据,数据后加F
<byte b1=3,b2=4,b> 虽是定义为byte数据类型 ,但是整数默认是int类型,故b1,b2是int类型,b是byte类型,java语言对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间,从int类型转换到byte类型会有损失。int数据类型