JAVA基础语法
注释,标识符与关键字
1,注释
2,标识符
标识符也就是在java中的名字(变量名,方法名,文件名等)
- 由数字,字母,下划线和美元符号组成
- 不能以数字开头
- 关键字不能作为标识符
- 中文也可以作为标识符
- 一般不要用拼音会显得很廉价
- 命名规则:见名知意
3,关键字
java中所有关键词
数据类型
基本数据类型
引用数据类型
数据类型的拓展
类型转换
java是强语言类型,在基于一些运算时,需要用到类型转换
-
在运算中不同类型的数据需要先转换为同一类型,然后再进行运算 -
强制类型转换
-
自动类型转换
-
不能把布尔值进行转换 -
不能把对象类型转换成不相干的类型 -
高转低,强制类型转换 -
在转换时,要注意内存溢出,或者精度问题(也就是把小数点后面的省略掉) -
JDK7的新特性,数字之间可以使用下划线进行分割10_0000_0000
变量,常量,作用域
1,变量
type varName [=value][{,varName[=value]}];
2,常量
3,作用域
-
类变量:从属于类 -
实例变量:从属于对象 -
局部变量:从属于方法
基本运算符 (优先级)
-
算术运算符:+ ,-,*,/,%.++,– i++,i--
//先赋值,后自增,自减
++i,--i
//先自增,自减,后赋值
-
赋值运算符:= -
关系运算符:>, <, >=, <=, ==, != -
逻辑运算符:&&,||, !
-
位运算符:&, |,^, ~, >>, <<, >>>
<< 表示*2 >>表示/2
-
条件运算符 :(三元运算符)?: x ? y : z
-
拓展赋值运算符:+=,-=,*=,/= -
字符串连接符: + 在加好的两侧,只要有一侧出现字符串类型,就会将其凭借i起来 System.out.println(" "+a+b);
System.out.ptrintln(a+b+" ");
-
幂运算:使用math方法 double pow = Math.pow(3,2);
包机制
-
便于更好的管理
JavaDoc生成文档
使用idea生成javadoc文档
https://blog.csdn.net/qq_42658739/article/details/102531538
java流程控制
用户交互Scanner
用来或取用户输入,进行人机交互
import java.util.Scanner;
public class Demo1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("使用nextLine方法接收:");
if(scanner.hasNext()){
String str = scanner.nextLine();
System.out.println("输出内容为:"+str);
}
scanner.close();
}
}
顺序结构
从上而下执行
选择结构
1,if
if(条件){
语句;
}else if(条件){
语句;
}
else{
语句;
}
2,switch
switch(expression){
case value :
break;
case value :
break;
default:
}
循环结构
while(条件){
}
do{
}while(条件)
for(i=0;i<=100;i++){
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vsINnmC9-1638778128364)(C:\Users\86187\Desktop\JSP速成\images\流程控制\for语句.png)]
-
增强型for循环
public class Demo1{
public static void main(String[] args){
int[] number = {10,20,30,40,50};
for(int x:number){
System.out.println(x)
}
}
}
跳出循环
-
break:跳出整个循环,不再循环,直接执行循环结束后的语句 -
continue:跳出本次循环,继续下一次循环 -
goto语句 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fc393Y2H-1638778128365)(C:\Users\86187\Desktop\JSP速成\images\流程控制\goto关键字.png)]
练习
? 。
package com.zhihui.base;
public class Demo4 {
public static void main(String[] args){
for(int i=1;i<=5;i++){
for(int j=5;j>=i;j--){
System.out.print(" ");
}
for(int j=1;j<=i;j++){
System.out.print("*");
}
for(int j=1;j<i;j++){
System.out.print("*");
}
System.out.println();
}
for(int k=2;k<=5;k++){
for(int y=1;y<=k;y++){
System.out.print(" ");
}
for(int x=5;x>=k;x--){
System.out.print("*");
}
for(int z=5;z>k;z--){
System.out.print("*");
}
System.out.println();
}
}
}
JAVA方法
什么是方法
1,方法的定义
-
方法也就是一段用来完成特定功能的代码片段 -
方法包含在类中 -
注意:main方法时刻保持干净整洁,尽量将公共的模块都通过方法调用的方式放在外面
public class Demo5{
public static void main(String[] args){
int sum = add(3,5);
System.out.println(sum);
}
public static int add(int a,int b){
return a+b;
}
}
-
方法包括:一个方法头和一个方法体
public static int max(int num1,int num2){
int result = 0;
if(num1>num2){
result=num1;
}else if(num1==num2){
System.out.println(num1+"与"+num2+"相等");
return 0;
}else{
result=num2;
}
return result;
}
}
2,方法的调用
- 调用方法:对象名.方法名(实参列表)
- 方法返回值时:方法调用通常被当作一个值
- 方法返回void,则方法调用一定是一条语句
方法重载
-
再一个类中,有相同的函数名称 -
规则
-
方法名称相同 -
参数列表必须不同(参数个数不同或者类型不同,参数排列顺序不同等) -
方法返回类型可相同也可以不同 -
仅仅返回类型不相同不构成方法重载
public static int add(int a,int b){
return a+b;
}
public static int add(int a,int b,int c){
return a+b+c;
}
public static double add(double a,double b){
return a+b;
}
public static int add(int b,int a){
return b+a;
}
}
命令行传参(了解)
- 在运行一个程序时再传递消息给他,这需要靠传递命令行参数main()函数实现
public class Demo6{
public static void main(String[] args){
for(int i=0;i<args.length;i++){
System.out.prntln("args["+ i +"]:" + args[i]);
}
}
}
可变参数
-
不定向参数 -
一个方法中只能指定一个可变参数,且他必须是方法的最后一个参数
public static int add(int...args){
int result =0;
for(int i = 0;i<args.length;i++){
result += args[i];
}
return result;
}
package com.zhihui.base;
public class Demo6 {
public static void main(String args[]){
printMax(34,3,3,2,56.5);
printMax(new double[]{1,2,3});
}
public static void printMax(double... numbers){
if(numbers.length == 0){
System.out.println("No argument passed");
return;
}
double result = numbers[0];
for(int i =1;i<numbers.length;i++){
if(numbers[i] > result){
result = numbers[i];
}
}
System.out.println("The max value is "+ result);
}
}
递归
递归就是自己调用自己
数组
数组的概述
- 相同类型的有序集合
- 每个数据称作一个数组元素,每个数组元素可以通过一个下表来访问他们
数组的使用
package com.kuang.zhihui;
public tatic void main(String args[]){
int[] nums = new int[10];
nums[0] = 1;
nums[1] = 2;
nums[5] = 4;
System.out.println(nums[9]);
System.out.println(nums[5]);
}
1,JAVA内存分析
-
堆:new的对象和数组 -
栈:存放基本变量类型和引用对象的变量 -
方法区 :包含所有的class和static变量
2,三种初始化状态
多维数组(了解)
-
也就是数组的数组 -
int[][] array ={2,5}
int[][] arrays ={(2,3),(3,4),(4,5),(5,6)}
Arrays类
- 数组的工具类java.util.Arrays,都是人写的
- Arrays.toString(数组名):这个方法可以直接打印出数组
- Arrays.sore(数组名):这个方法可以把数组升序排列
- Arrays.fill(数组名):数组填充
冒泡排序
时间复杂度为O(n2)
package com.zhihui.base;
import java.util.Arrays;
public class Demo11 {
public static void main(String[] args) {
int[] array={1,11,2,34,54,4,8};
for(int i=0;i<array.length-1;i++){
boolean result = true;
for(int j=0;j<array.length-1;j++){
int temp =0;
if(array[j]>array[j+1]){
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
result = false;
}
}
if(result){
break;
}
}
System.out.println(Arrays.toString(array));
}
稀疏数组(数据结构)
- 当数组中大部分元素是0,或者为同一值的数组时,可以使用稀疏数组来保存该数组
- 稀疏数组的处理方式
- 记录数组一共有几行几列
- 把具有不同值的数组和行列以及值记录在一个小规模的数组中,从而缩小程序的规模
package com.zhihui.base;
import java.util.Arrays;
public class Demo12 {
public static void main(String[] args) {
int[][] array1 = new int[11][11];
array1[1][2] = 1;
array1[2][3] = 2;
System.out.println("输出原始数组");
for(int[] ints :array1){
for (int anInt :ints){
System.out.print(anInt+"\t");
}
System.out.println();
}
int sum=0;
for(int i=0;i<11;i++){
for(int j=0;j<11;j++){
if(array1[i][j]!=0){
sum++;
}
}
}
System.out.println("有效值的个数:"+sum);
int[][] array2 = new int[sum+1][3];
array2[0][0] = 11;
array2[0][1] = 11;
array2[0][2] = sum;
int count=0;
for (int i =0;i<array1.length;i++){
for (int j=0;j<array1[i].length;j++){
if (array1[i][j]!=0){
count++;
array2[count][0] = i;
array2[count][1] = j;
array2[count][2] = array1[i][j];
}
}
}
System.out.println("稀疏数组");
for(int i=0;i<array2.length;i++){
System.out.println(array2[i][0]+"\t"+array2[i][1]+"\t"+array2[i][2]+"\t");
}
System.out.println("=====================");
System.out.println("还原");
int[][] array3 = new int[array2[0][0]][array2[0][1]];
for(int i=1;i<array2.length;i++){
array3[array2[i][0]][array2[i][1]] = array2[i][2];
}
System.out.println("输出还原数组");
for(int[] ints :array3){
for (int anInt :ints){
System.out.print(anInt+"\t");
}
System.out.println();
}
}
}
java面向对象
java的核心思想就是OOP
什么是面向对象
- 面向过程:步骤清晰,注重第一步做什么,第二步做什么…,适合处理一些比较简单的问题
- 面向对象:注重将要解决的问题分类,
- 本质:以类的方式组织代码,以对象的方式组织(封装)对象
- 三大特征:
- 对于处理复杂的事物,可以使用面向对象来分析整个系统,但涉及到具体的微观操作,任然需要面向过程的思路去处理
方法的加深
- 方法的调用:
- 静态方法 static:类名.方法名();
- 非静态方法 void:实例化类 :对象类型 对象名 = 对象值
- 值传递与引用传递:
对象的创建与分析
*构造器(构造方法)
小结
OOP的三大特性
封装
-
高内聚,低耦合 -
作用
- 提高程序的安全性,保护数据
- 隐藏代码的实现细节
- 统一接口
- 系统可维护增加了
-
属性私有private,get/set import com.oop.Student;
public class Application{
public static void main(String[] args){
Student s1 = new Student();
s1.setName("智慧");
System.out.println(s1.getName());
}
}
public class Student{
private String name;
private int id;
private char sex;
public String getName(){
return this.name;
}
public void setNmae(){
this.name=name;
}
}
继承
-
继承就是类与类之间的关系 -
extands 子类可以继承父类的所有方法 具有 is a的关系 -
ctrl + H 继承树 -
在java中只有单继承,没有多继承(一个儿子只能有一个爸爸,但一个爸爸可以有多个儿子)
public class Person{
public void say(){
System.out.println("说了一句话!")
}
}
public class Student extends Person{
Student student = new Student();
student.say();
}
1,object类
在java中所有的类都默认或者直接间接继承object类
2,super
public class Person{
protected String name = "zhihui";
public void print(){
System.out.println("Person");
}
}
public class Student extends Person{
private String name = "Jiangzhihui";
public void print(){
System.out.println("Student");
}
public void test1(){
print();
this.print();
super.print();
}
public void test(String name){
System.out.println(name);
System.out.println(this.name);
System.out.println(super.name);
}
}
public class Applicaton{
public static void main(String[] args){
Student student = new Student();
student.test(name:"江智慧");
student.test1()
}
}
3,方法重写
public class A extends B{
@Override
public void test(){
System.out.println("A=>test");
}
}
public class B{
public void test(){
System.out.println("B=>test");
}
}
public class Application{
public static void main(String[] args){
A a = new A();
a.test();
B b = new A();
b.test();
}
}
- 小结
多态
-
同一方法可以根据发送对象的不同而采取多种不同的行为方式 -
一个对象的实际类型是确定的,但可以指向对象的引用类型有很多种 -
可以实现动态编译:类型:可扩展性 public class Person{
}
public class Student extends Person{
@Override
public void run(){
System.out.println("son");
}
}
public class Application{
public static void main(String[] args){
Student s1 = new Student();
Person s2 = new Student();
Object s3 = new Student();
s2.run();
s1.run();
}
}
-
多态注意事项
- 多态是方法的多态,属性没有多态性
- 父类与子类,有联系 类型转换异常
- 多态存在条件
- 有继承关系
- 子类重写父类方法
- 不能重写的方法,也就不能实现多态,如下三种
- static 方法,属于类,不属于实例
- final 常量
- private方法
- 父类引用子类对象 father f1 = new son();
-
instanceof 类型转换 引用类型之间的转换
-
小结
- 父类引用指向子类的对象
- 把子类转换为父类,向上转型
- 父类转换为子类,向下转型,强制转换
- 方便方法的调用,减少重复的代码,简介
- 封装 继承 多态 抽象类 接口:比抽象类更抽象的
***static关键字
public class Student{
private static int age;
private double score;
public void run(){
}
public static void go(){
}
}
public class Person{
{
System.out.println("匿名代码块")
}
static{
System.out.println("静态代码块")
}
public Person(){
System.out.println("构造方法")
}
}
*抽象类与接口
1,抽象类
- abstract修饰的类
- java的类是单继承的,没有多继承,但java中的接口可以多继承
- 也就是说抽象类只能通过extends去继承,是单继承的
public abstract class Action{
public abstract void doSomething();
}
2, 接口
-
普通类:只有具体的实现 -
抽象类:具体实现的规范(抽象方法)都有! -
接口:只有规范,自己无法写方法专业的约束,可以实现约束和显示分离:面向接口编程 -
接口都需要有实现类,实现类的名字一般都是用impl -
接口也就是规范,定义的是一组准则,其本质是契约,面向对象的精髓就是对对象的抽象,最能体现这一点的就是接口 -
声明类的关键字是class 声明接口的关键字是interface -
类 可以实现接口 implements -
实现了接口的类,就要重写接口的方法
public interface UserService,TimeService{
int age =99;
void add(String name);
void delete(String name);
void update(String name);
void query(String name);
}
public interface TimeService{
void timer();
}
public class UserServiceImpl implements UserService{
}
-
小小结
内部类
一个java类中可以有多个class类,但只能有一个public class
public class Outer{
private int id;
public void out(){
System.out.println("这是外部类的方法");
}
class Inner{
public void in(){
System.out.println("这是内部类的方法");
}
public void getID(){
System.out.println(id);
}
}
}
异常机制(Exception)
1,什么是异常
异常就是在完成一件事时,能够可预见会发生的错误,我们可以通过这种可预见性,来准备相应的解决措施,来防范该异常的发生
- 检查性异常
- 运行时异常
- 错误error:不是异常,是脱离程序员控制的问题
异常体系结构
java异常处理机制
-
抛出异常try -
捕获异常catch -
如果需要捕获多个异常:从小到大 -
ctrl+alt+t -
throw 主动抛出异常,假设方法中处理不了异常,在方法上抛出异常 public class Text{
public static void main(String[] args){
int a = 1;
int b = 0;
try{
System.out.println(a/b);
}catch(ArithmeticException e){
System.out.println("程序中变量b作为分母不能为0");
}finally{
System.out.println("finally");
}
}
}
-
异常处理五个关键字 try,catch,finally,throw,throws
自定义异常
|