引言
大家应该都知道,写Java程序首先应该配置环境变量,然后建立包和类,才能去写Java程序,本文就不去介绍如何做这些东西了。直接介绍Java语言的一些基本语法。
第一行代码
可以这么说,所有的程序语言的第一行代码都是“Hello + 语言”,拿Java来举例子,Java的第一行代码就是“Hello Java”。
下面附上代码:
public class HelloJava{
static String s1="你好";
public static void main(String [] args){
//第一行代码
String word = "Hello Java!";
System.out.println(word);
}
}
for循环
循环语法在C语言里面介绍得很清楚,很详细,在Java里面和C差不多。
在这里要重点介绍一下foreach语句,foreach语句是for语句的特殊简化版本,不能完全取代for语句,但是任何foreach语句都可以改写成for语句。
foreach语句
int arr[] = {7,10,1}; /声明一维数组
System.out.println("一维数组中的元素分别为:");
for(int x: arr){
/foreach语句,int x 引用的变量,arr指定要循环遍历数组,最后将x输出
System.out.println(x);
}
for语句
for(int i=0;i<=100;i++) // for循环
{
System.out.println(i);
if(i==6)
break;
}
String的各种骚操作
String真的是太牛逼了,不管是在Java还是在c++里面都真的是太秀了,陈独秀都比不过。不多说,直接上代码!!!! 对这种大佬,只能膜拜。。不敢多说!!
String s5 = new String("qinjiahao"); //定义String类型的字符
String s4 = new String("is so stupid!");
String s = s5 + " " + s4;
System.out.println(s);
// // 字符串的替换 replace的应用
String str = "address";
String newstr = str.replace("a","A"); //
System.out.println(newstr);
/ 判断字符串的开始与结尾 startsWith的应用
/*String num1 = "22045612";
String num2 = "21304578";
boolean b = num1.startsWith("22");
boolean b2 = num1.endsWith("78");
boolean b3 = num2.startsWith("22");
boolean b4 = num2.endsWith("78");
System.out.println("字符串num1是以‘22’开始的吗?" + b);
System.out.println("字符串num1是以‘78’结束的吗?" + b2);
System.out.println("字符串num2是以‘22’开始的吗?" + b3);
System.out.println("字符串num2是以‘78’结束的吗?" + b4);*/
判断字符串是否相等 equals的应用
String s1 = new String ("abc");
String s2 = new String("ABC");
String s3 = new String("abc");
boolean b = s1.equals(s2);
boolean b2 = s1.equalsIgnoreCase(s2);
System.out.println(s1 + " equals " + s2 + ":" + b);
System.out.println(s1 + " equalsIsIgnoreCase " + s2 + ":" + b2);
续更……
-
基本数据类型:byte、int、long、short、float、double、char、boolean
-
逻辑运算符: &、|、^、&&、||
在这里介绍一下异或(^):和或有点不一样
两边结果一样就为false
两边结果不一样为true -
位运算符: << >> >>>(无符号右移)
练习————高效的计算出2*8
2*8 = 2<<3; //将2左移三位即为2*8 = 16;
- 重载的定义:
在同一个类中,如果出现了两个或两个以上的同名函数,只要他们的参数个数或者参数类型不同,就可以称之为函数重载了。
如何区分重载和重写
** 重载 **:当函数同名时,只看它们参数列表,和他们的返回值没有关系!
** 重写 **:父类与子类之间的多态性,对父类函数的重新定义。如果子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写,返回值必须是父类的类型或者是子类的类型
5. Java内存管理
Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。
对于从事C和C++程序开发的开发人员来说,在内存管理领域,他们既是拥有最高权力的皇帝,又是从事最基础工作的劳动人民—既拥有每一个对象的"所有权",又担负着每一个对象生命开始到终结的维护责任。
对于Java程序员来说,在虚拟机的自动内存管理机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码,而且不容易出现内存泄漏和内存溢出问题,看起来由虚拟机管理内存一切都很美好。不过,也正是因为Java程序员把内存控制的权力交给了Java虚拟机,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那排查错误将会成为一项异常艰难的工作。
6.构造函数:
1. 该函数的名称和所在的类的名称相同
2. 不需要定义返回值类型
3. 该函数没有具体的返回值
4. Attention: 所有对象创建时都需要初始化才能使用。
5. 注意事项:一个类在定义时如果没有定义过构造函数,那么该类会自动生成一个空参数的构造函数,为了方便该类创建对象,完成初始化。如果该类自定义了构造函数,那么默认的构造函数就没有了。
6. 一个类中,可以有多个构造函数,因为它们的函数名称都相同,所以只能通过参数列表来区分。所以,一个类中如果出现多个构造函数。它们的存在是以重载体现的。
7.创建一个对象在内存中都做了什么?
Person p = new Person();
1.先将硬盘上指定位置的Person.class文件加载内存。
2.执行main方法时,在栈内存中开辟了main方法的空间(压栈——> 进栈),然后再main方法的栈区分配了一个变量p
3.在堆内存中开辟一个实体空间,分配了一个内存的首地址值。new
4.在实体空间进行属性的空间分配,并进行默认初始化。
5.对空间的属性进行显示初始化。
6.进行实体的构造代码块初始化。
7.调用该实体对应的构造函数,进行构造函数初始化。
8.将首地址赋值给p,p变量就引用了该实体。
8.静态方法
< 静态方法可以通过类名调用,任何的实例也都可以调用,因此静态方法中不能使用this和super关键字,不能直接访问所属类的实例变量和实例方法
(就是不带static的成员变量和成员方法),只能访问所属类的静态成员变量和成员方法。因此实例成员和特定的对象关联!
9. 抽象类和接口的区别
1. 抽象类只能被继承,而且只能被单继承;接口需要被实现,而且可以多实现。
2. 抽象类可以定义非抽象方法,子类可以直接使用;接口中都是抽象方法,需要子类去实现。
3. 抽象类使用的是is a关系;接口是like a关系。
4. 抽象类的成员修饰符可以自定义;接口中必须是public。