java诞生过程:1972年诞生c语言,因为指针和内存管理复杂,难以移植性。1982年产生了改进后的c++但是还是很复杂,于是在1995年就建立了java语言。
java优点:
语法有点像c
没有指针
没有内存管理
运行在jvm上,实现了真正的一次编译到处运行
面向对象
类型安全
……
java三大版本:
jdk,jre,jvm的关系:
编译型和解释型:
都是翻译程序的意思,将一种语言翻译成另一种机器语言。
编译:编译成一个字节码文件,保存。
解释:执行一句翻译一句,不生成字节码文件。
1.注释,标识符,关键字
注释:注释不会被计算机执行,是给编程人员看的,为了方便阅读代码。
java中的三种注释:
单行注释://
多行注释:/* ……*/
文档注释:/**…… */
/**
* @author panglili
* @create 2022-07-13-8:36
*/
public class HelloWorld {
public static void main(String[] args) {
System.out.println("HelloWorld");
//单行注释
/*
多行注释
多行注释
多行注释
*/
/**
* 文档注释
* 文档注释
*/
}
}
标识符
java所有的组成部分都是有名字的。如类名,变量名,方法名等都被称为标识符。
关键字
系统定义的有特殊含义的标识符,不可再被用户定义为类名,变量名,方法名……
2.数据类型
java八大类型:
int:4字节
short:2字节
byte:1字节
long:8字节
以上为整数类型
float:4字节
double:8字节
以上为浮点类型
char:2字节
以上为字符类型
boolean:1
以上为布尔类型
/**
* @author panglili
* @create 2022-07-13-9:04
*/
public class NumType {
public static void main(String[] args) {
int a=1;
byte b=127;
String c="123";
long d=1276543223999999999L;//long类型后面加L区别
char e='a';
float f=1.2F;//float类型后面加F
double g=2.22;
boolean fa=false;
boolean tr=true;
}
}
扩展:进制
二进制:0b
十进制:正常
八进制:0
十六进制:0x
int i=0; //十进制
int i0=0b101; //二进制
int i1=077; //八进制
int i2=0xA1; //十六进制
浮点数使用小tips:

尽量不要用浮点数进行比较
3.类型转换
byte,short,char->int->long->float->double
由高字节到低字节转换需要强制类型转换:可能会产生内存溢出或者精度溢出
由低字节到高字节转换会自动类型转换
/**
* @author panglili
* @create 2022-07-13-10:02
*/
public class TypeTransfer {
public static void main(String[] args) {
int i=128;
byte b=(byte)i;
System.out.println(i); //强制转换,int到byte
System.out.println(b); //强制转换,内存溢出
float f=3.14f;
System.out.println((int)f);//强制转换,精度丢失
int a=b;
System.out.println(a);//自动转换,byte到int
}
}
4.变量,常量
变量:java中初始化后依旧可以变化的量。
常量:java中初始化后不可变化的量。使用final定义。
/**
* @author panglili
* @create 2022-07-13-10:15
*/
public class VariableConstant {
public static void main(String[] args) {
//定义变量赋初值
int a=1;
String name="tata";
System.out.println(a);
System.out.println(name);
//改变变量的值
a=2;
name="panglili";
System.out.println(a);
System.out.println(name);
//常量
final int B=3;
// b=4; 报错不可改变其值
System.out.println(b);
}
}
5.运算符
算术运算符:+,-,*,/,%,++,--……
赋值运算符:+=,=,-=……
关系运算符:>,<,>=……
逻辑运算符:&&,||,
位运算符:|,&,^,~,>>,<<
条件运算符: ?:
扩展赋值运算符:
6.包机制
相当于一个文件夹,方便分类管理。
在公司中一般就是公司域名倒置,用来建包。
阿里巴巴开发手册,都是java基础的规范约定,可以看看规范自己的编码!!!
1.用户交互scanner
扫描用户输入,进行操作。
package com.javase.grammer;
import java.util.Scanner;
/**
* @author panglili
* @create 2022-07-13-11:17
*/
public class ScannerUse {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入输入s:");
String s = scanner.next();
System.out.println("输入的结果如下:");
System.out.println(s);
scanner.close();
}
}
scanner进阶使用:判断输入的是否是整数,同理可判断其他数据类型。
package com.javase.grammer;
import java.util.Scanner;
/**
* @author panglili
* @create 2022-07-13-11:17
*/
public class ScannerUse {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入:");
if(scanner.hasNextInt()){
System.out.println("输入了整数");
}else{
System.out.println("输入的不是整数");
}
}
}
输入n个整数以非整数结束,计算输入的整数和。
package com.javase.grammer;
import java.util.Scanner;
/**
* @author panglili
* @create 2022-07-13-11:40
*/
public class ScannerCalculate {
public static void main(String[] args) {
int sum=0;
Scanner scanner = new Scanner(System.in);
System.out.println("请输入:");
while(scanner.hasNextInt()){
sum+=scanner.nextInt();
}
System.out.println(sum);
}
scanner.close();
}
2.顺序结构
最基本的结构,按照顺序一条一条的执行。
System.out.println("1");
System.out.println("2");
System.out.println("3");
System.out.println("4");
System.out.println("5");
会按照顺序一条一条输出1,2,3,4,5
3.选择结构
if单选择
if多选择
嵌套if
switch多选择
package com.javase.grammer;
import com.sun.org.apache.xml.internal.res.XMLErrorResources_tr;
/**
* @author panglili
* @create 2022-07-13-11:52
*/
public class Structure {
public static void main(String[] args) {
//if单选
int a=1;
int b=2;
if(a==1){
System.out.println("正确");
}else
System.out.println("错误");
//if多选
if(a>1){
System.out.println("大于");
}
if(a<1){
System.out.println("小于");
}
if(a==1){
System.out.println("等于");
}
//嵌套
if(a==1){
if(b>1){
System.out.println("b>a");
}
else
System.out.println("b<a");
}else
System.out.println("条件1不成立,未进入嵌套");
int a=3;
switch (a){
case 1:
System.out.println("1");
break;
case 2:
System.out.println("2");
break;
case 3:
System.out.println("3");
break;
case 4:
System.out.println("4");
break;
default:
System.out.println("未匹配到");
}
}
}
4.循环结构
for:写结束条件
while:表达式为true就会一直循环。
do……while:先循环一次再判断。
package com.javase.grammer;
/**
* @author panglili
* @create 2022-07-13-12:10
*/
public class Circle {
public static void main(String[] args) {
//for 循环输出1到100
for(int i=1;i<=100;i++){
System.out.println(i);
}
//while循环输出1-100
int i=0;
while(i<100){
i++;
System.out.println(i);
}
}
}
九九乘法表打印
package com.javase.grammer;
/**
* @author panglili
* @create 2022-07-13-15:48
*/
public class MultiplicationTable {
public static void main(String[] args) {
for(int a=1;a<10;a++){ //a控制行数
for(int b=1;b<=a;b++){ //b控制列数,应该等于行数
System.out.print(a+"*"+b+"="+a*b);
System.out.print("\t");
}
System.out.println("");
}
}
}
java5新特性:for(变量:表达式),常用于遍历数组和集合。
package com.javase.grammer;
/**
* @author panglili
* @create 2022-07-13-15:58
*/
public class ForNum {
public static void main(String[] args) {
int [] nums={1,2,3,4,5,6};
for(int i:nums){
System.out.println(i);
}
}
}
5.break,continue的使用
break :会强制退出循环,不执行剩余的循环。
continue:跳过这次循环,剩余的循环继续执行。
package com.javase.grammer;
/**
* @author panglili
* @create 2022-07-13-16:03
*/
public class BreakContinue {
public static void main(String[] args) {
//使用了break,在打印到30的时候就会退出打印,控制台只打印了1-29
for(int i=0;i<100;i++){
if(i==30){
break;
}else
System.out.println(i);
}
System.out.println("***************");
//使用了continue,在打印到30的时候就会跳过,控制只是没有打印30
for(int j=0;j<100;j++){
if(j==30){
continue;
}else
System.out.println(j);
}
}
}
我脑子里浮现出一些关于一种新编程语言的想法,所以我想我会尝试实现它。一位friend建议我尝试使用Treetop(Rubygem)来创建一个解析器。Treetop的文档很少,我以前从未做过这种事情。我的解析器表现得好像有一个无限循环,但没有堆栈跟踪;事实证明很难追踪到。有人可以指出入门级解析/AST指南的方向吗?我真的需要一些列出规则、常见用法等的东西来使用像Treetop这样的工具。我的语法分析器在GitHub上,以防有人希望帮助我改进它。class{initialize=lambda(name){receiver.name=name}greet=lambda{IO.puts("He
所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择
在Ruby类中,我重写了三个方法,并且在每个方法中,我基本上做同样的事情:classExampleClassdefconfirmation_required?is_allowed&&superenddefpostpone_email_change?is_allowed&&superenddefreconfirmation_required?is_allowed&&superendend有更简洁的语法吗?如何缩短代码? 最佳答案 如何使用别名?classExampleClassdefconfirmation_required?is_a
可能已经问过了,但我找不到它。这里有2个常见的情况(对我来说,在编程Rails时......)用ruby编写是令人沮丧的:"astring".match(/abc(.+)abc/)[1]在这种情况下,我得到一个错误,因为字符串不匹配,因此在nil上调用[]运算符。我想找到的是比以下内容更好的替代方法:temp="astring".match(/abc(.+)abc/);temp.nil??nil:temp[1]简而言之,如果不匹配,则简单地返回nil而不会出错第二种情况是这样的:var=something.very.long.and.tedious.to.writevar=some
我正在学习Ruby的基础知识(刚刚开始),我遇到了Hash.[]method.它被引入a=["foo",1,"bar",2]=>["foo",1,"bar",2]Hash[*a]=>{"foo"=>1,"bar"=>2}稍加思索,我发现Hash[*a]等同于Hash.[](*a)或Hash.[]*一个。我的问题是为什么会这样。是什么让您将*a放在方括号内,是否有某种规则可以在何时何地使用“it”?编辑:我的措辞似乎造成了一些困惑。我不是在问数组扩展。我明白了。我的问题基本上是:如果[]是方法名称,为什么可以将参数放在括号内?这看起来几乎——但不完全是——就像说如果你有一个方法Foo.d
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear
我正在尝试使用ruby编写一个双线程客户端,一个线程从套接字读取数据并将其打印出来,另一个线程读取本地数据并将其发送到远程服务器。我发现的问题是Ruby似乎无法捕获线程内的错误,这是一个示例:#!/usr/bin/rubyThread.new{loop{$stdout.puts"hi"abc.putsefsleep1}}loop{sleep1}显然,如果我在线程外键入abc.putsef,代码将永远不会运行,因为Ruby将报告“undefinedvariableabc”。但是,如果它在一个线程内,则没有错误报告。我的问题是,如何让Ruby捕获这样的错误?或者至少,报告线程中的错误?
这个问题在这里已经有了答案:WhatisRuby'sdouble-colon`::`?(12个答案)关闭8年前。什么是::?@song||=::TwelveDaysSong.new