JAVA太基础的知识

JAVA基础知识:


前言

我认为Java是开始学习编码的正确编程语言的原因有以下两个。

一.更简单
Java更简单。语法比C,C ++或任何其他语言更具可读性。

使用OOP
Java是学习面向对象程序设计的好方法,但对于过程式程序却不太好。面向对象编程是一项有用的技能,因为它可以很好地处理实际应用程序的复杂性。就类和对象而言更容易思考。

丰富的API
Java具有丰富的API,您可以使用Java做更多的事情,包括图形,声音以及最有可能编写诸如Tic Tac Toe或Tetris之类的小型游戏。

您可以使用其他语言来做到这一点,但是您经常需要下载并安装不同的模块和库,这对于初学者来说是一项艰巨的工作。当您安装Java时,其中大多数功能仅作为安装的一部分。

社区支持
Java拥有强大的社区支持,无论您有什么样的问题,Java论坛和许多其他社区都可以为您提供帮助。

这实际上是我建议初学者学习使用Java进行编程的唯一最大原因,因为当您开始学习编程时,对于编程基础知识和Java都将要面对许多不同种类的问题。

由于周围有数以百万计的Java开发人员,并且有庞大的社区可以为您提供支持,因此您很可能会很快找到答案,而不会感到沮丧和失望。

宽恕
Java是一种强类型语言,它会捕获许多新手错误。在较小程度上也适用于静态类型输入。这是我建议初学者先学习Java然后再学习Python的另一个原因,因为Python是一种动态的键入语言,因此您无需定义类型,这会使学习有些混乱。

垃圾收集
Java附带有一个内置的垃圾收集器,对于一个完整的初学者来说,这是一个很大的优点。在开始学习编程时,处理内存管理是一件大事。

这就是为什么我认为初学者应该首先学习Java而不是其他任何语言的一些原因。我可能是有偏见的,因为我是Java程序员,但是我也知道Python,并且我也从事过C和C ++的专业编程。从那次经验中,我可以说Java无疑是初学者最好的编程语言之一。


提示:以下是本篇文章正文内容,下面案例可供参考

一、java是什么?

一门编程语言(个人认为很伟大)。

二、基础知识

ava数据类型(8个基本数组类型分为4组):
整型:byte、short、int、long。
字符型:char 。
浮点型:float、double 。
布尔型:boolean。
java控制台基本输出:print()不换行输出、println()换行输出
程序块:两个或两个以上的语句组成一组{}->逻辑单元->存在的主要原因:创建逻辑上独立的代码单元
java组成:
空白分隔符:空格、tab键、换行符。
标识符:大写和小写字母、数字、下划线、美元符号的任意顺序组合,不能以数字开头,区分大小写。
注释:多行注释/…/、单行注释//、文档注释/**…*/。
文字
运算符
关键字:48个保留关键字,不能用于变量名、类名或方法名
分隔符:常用分隔符如下
符号 名称 用途
() 圆括号 在定义和调用方法是用来容纳参数表。在控制语句或强制类型转换组成的表达式中用来表示执行或计算的优先权
{} 花括号、大括号 用来包括自动初始化的数组的值。也用来定义程序块、类、方法以及局部范围
[] 方括号、中括号 用来声明数组的类型,也用来表示撤销对数组值的引用
; 分号 用来终止一个语句
, 逗号 在变量声明中,用于分割变量表中的各个变量。在for控制语句中,用来将圆括号内的语句连接起来
. 句号 用来将软件包的名字与它的子包或类分隔。也用来将引用变量与变量或方法分隔
java中三个最基本的元素:数据类型、变量和数组

整数类型的长度是行为而非占用的存储空间

java的自动转换:
-这两种类型是兼容的
-目的类型属的范围比来源类型的大

一维数组定义:第一步定义类型,第二步new分配内存

type var-name[];	
array-var=new type[size];1int month_days[];
month_days=new int[12];2:int month_days=new int[12];

多维数组定义只需指定第一个(最左边)维数的内存即可。

左移运算符 value<<num,高位移出,右边补0.左移一位相当于乘2

右移运算符 value>>num,被移走的最高位由原来最高位的数字补充,每右移一次相当于除2并舍弃余数

标签break语句:break lable;lable是表示代码块的标签,被加标签的代码块必须包围break语句。要指定代码块在其开头加一个标签即可,标签lable可以是任何合法有效的Java标识符后跟一个冒号

标签continue语句:continue lable;指定一个标签来说明继续哪个包围的循环。

关于类:给对象引用变量赋值,当你将一个对象引用变量赋值给另一个对象引用时,你并没有创建该对象的一个拷贝,而是仅仅对引用的一个拷贝。

类通常有两个要素组成:实例变量和方法

在类中,当一个实例变量不是被该实例变量所在类的部分代码访问时,tabixv
通过该对象加点运算符来访问。

对于返回值的理解,有两点注意:
a.方法返回的数据类型必须与该方法指定的返回类型相兼容。
b.接受方法返回值的变量也必须与指定方法返回值的类型相兼容

构造函数的任务就是初始化一个对象的内部状态,以便使创建的实例变量能够完全初始化,可以被对象马上使用。

java传递参数的两种方法:
第一种按值传递:将一个参数值复制成为子程序的正式参数。对子程序参数的改变不影响调用它的参数
第二种引用调用:参数的引用被传递给子程序参数。在这种方法中,该引用用来访问调用中指定的实际参数。对子程序参数的改变将会影响调用子程序的参数

递归优点:某些类型的算法采用递归比采用迭代算法要更加清晰和简单

如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象

声明为static的变量实质上就是全局变量

声明为static的方法有以下几条限制
它们仅能调用其他的static方法
它们只能访问static数据
它们不能以任何方式引用this或super

在一个static方法中引用任何实例变量都是非法的

类外访问static方法:classname.method();

final变量:阻止它的内容被修改

一个内部类可以访问外部类成员,反之不成立

String类型的对象是不可改变的;原因有两个:
如果你需要改变一个字符串,你可以创建一个新的字符串,其中包含修改后的字符串即可。
JAVA定义了一个和String类同等的类叫StringBuffer,它允许字符串改变,因此所有正常的字符串操作在Java中还是可用的

在String类中,可以使用charAt()来获得一个字符串指定索引的字符

如果想在运行程序时将信息传递到一个程序中,可以通过将命令行参数传递给main()来实现

在java中,被继承的类超类,继承超类的类叫子类

一个被定义为private的类成员为此类私有,它不能被该类外的所有代码访问,包括子类

当一个子类对象的引用被赋给一个超类引用变量时,只能访问超类定义的对象的那一部分

super的两种通用形式:

第一种调用超类的构造函数:super(parameter-list(超类中构造函数所用到的所有参数))
第二种用来访问被子类的成员隐藏的超类成员: super.member(方法或变量)
super()总是引用子类最接近的超类的构造函数,依次调用
组成层次结构的类的构造函数以派生的顺序被调用
方法重载构成java的一个最强大的概念的基础:动态方法调度。
动态方法调度是一种在运行时而不是编译时调用重载方法的机制。
使用final可以阻止方法重载和继承
Java定义的特殊的类Object。所有其他的类都是Object的子类。Object定义了下面的方法
方法 用途


Object clone()	创建一个和被复制的对象完全一样的新对象
boolean equals(Object object)	判定对象是否相等
void finalize()	在一个不常用的对象被使用前调用
Class getClass()	获取运行时一个对象的类
int hashCode	返回调用对象有关的散列值
void notify	恢复一个等待调用对象线程的执行
void notifyAll	恢复所有等待调用对象线程的执行
String toString()	返回描述对象的一个字符串
void wait()	等待另一个线程的执行
void wait(long milliseconds)	

java源程序可以包含下面的四个内部部分的任何一个(或所有)
单个接口声明(可选)
任意数目的引入语句(可选)
单个公共类声明(必选)
对包来说是私有的任意数目的类(可选)
当实现一个借口方法时,它必须声明成public。
如果一个类包含一个接口但是不完全实现接口定义的方法,那么该类必须定义成abstract型。
接口中的变量:可以使用接口来引入多个类的共享变量,这样做只需要简单的声明包含变量初始化想要的值的接口就可以了。
接口通过运用关键字extends被其他接口继承。
线程优先级是详细说明线程间优先关系的整数。
线程的优先级是用来决定何时从一个运行的线程切换到另一个 ——上下文转换。
决定上下文转换发生的规则:
线程可以自动放弃控制,在I/O未决定的情况下,睡眠或阻塞由明确的让步来完成。在这种假定下,所有其他的线程被检测,准备运行的最高优先级线程被授予CPU。
线程可以被高优先级线程抢占。在这种情况下,低优先级线程不主动放弃,处理器只是被先占——无论它在干什么——处理器被高优先级的线程占据。基本上一旦高优先级线程要运行,它就执行,这叫做有优先级的多任务处理。
管程:可以用来防止共享的资源被多个线程操纵
管理线程的方法
方法 意义
getName 获得线程名称
getPriority 获得线程优先级
jsAlive 判定线程是否仍在运行
join 等待一个线程终止
run 线程的入口点
sleep 在一段时间内挂起线程
start 通过调用运行方法来启动线程
当java程序启动时,一个线程立刻运行,该线程通常叫做程序的主线程。
主线程的重要性体现在两方面:
它是产生其他子线程的线程
通常它必须最后完成执行,因为它执行各种关闭动作
主线程可以由Thread对象控制:通过调用方法currentThread()获得它的一个引用。s attic Thread currentThread( ),该方法返回一个调用它的线程的引用,一旦获得主线程的引用,就可以控制主线程。
一个线程组是一种将线程作为一个整体集合的状态哦更值得数组结构。这个过程由专有的运行时环境来处理。
大多数情况通过实例化一个thread对象来创建一个线程,Java定义了两种方式:
实现Runnable接口
可以继承Thread类
实现Runnable接口,一个类仅需实现一个run()的简单方法:public void run( )。在run()中可以定义代码来构建新的线程,不同的是run()在程序中确立另一个并发的线程执行入口。当run()返回时,该线程结束。
当一个类继承Thread时,它必须重载run()方法,作为新线程的入口。
判定一个线程是否结束有两种方法:第一种,可以在线程中调用isAlive():final boolean isAlive()。如果所调用线程仍在运行,返回true,否则返回false。第二种,调用join(),该方法更常用:final void join()throws InterruptedException。该方法等待所调用线程结束。
线程优先权level值必须在MIN_PRIORITY到MAX_PRIOIRITY范围内,通常分别是1和10。
Java获得跨平台的线程行为的方法是自动放弃对cpu的控制。
同步:当两个或两个以上的线程需要共享资源,他们需要某种方法来确定资源在某一刻仅被一个线程占用。
java中的同步方法:调用被synchronized关键字修饰的方法。或使用synchronized语句。
为避免轮询,java包含了通过wait(),notify(),notifyAll()方法实现的一个进程间通信,这三个方法仅在synchronized方法中才能被调用。
wait()告知被调用的线程放弃管程进入睡眠直到其他线程进入相同管程并且调用notify()。
notify()恢复相同对象中第一个调用wait()的线程
notifyAll()恢复相同对象中所有调用wait()的线程,最优最高优先级的线程最先运行。
java定义了两种类型的流:字节类和字符类
字节流类:在顶层有两个抽象类:InputStream和OutputStream。
字符流类:顶层有两个抽象类:Reader和Writer
键盘输入:BufferReader br=new BufferedReader(new InputStreamReader(System.in)); String c=br.read();
从键盘读取字符串使用readLine()。
print()和println()是由PrintStream(System.out引用的对象类型)定义。
PrintWriter是基于字符的类,支持所有类型(包括Object)的print()和println()方法
PrintWriter(OutputStream outputStream,boolean flushOnNewline);
// outputStream是OutputStream的类的对象,flushOnNewline控制java是否在println()方法被调用时刷新输出流。
e.g. PrintWriter pw=new PrintWriter(System.out,true);
1
2
3
当从一个数组创建一个String对象时,数组的的内容将被复制,在字符串被创建以后,如果改变数组的内容,String将不会随之改变。
重载toString方法会被自动调用
charAt():字符串截取一个字符
getChars(int start, int end, char target[],int targetstart):截取从start—end的多个字符存在target[]中。必须确保数组target应该足够大以确保能容纳被指定子字符串中的字符
getBytes():实现将字符存放于字节数组中的getChars()的替代,它适用平台提供的默认的字符到字节的转换:byte[] getBytes();
regionMatches()方法将一个字符串中指定的区间和另一个字符串中指定的区间进行比较。它的重载形式允许比较时忽略大小写。
equals()方法比较字符串对象中的字符,==运算符比较两个对象引用看他们是否引用相同的实例。
在StringBuffer中,length()方法可以得到当前的长度,capacity()可以得到总的分配容量。ensureCapacity()设置缓冲区大小。insert()插入字符串。deleteCharAt()删除单个字符。
抽象类Number定义了一个由包装数字类型字节型、短整型、整型、长整型、浮点型和双精度型的类实现的超类。
浮点对象可以由类型float或类型double的值创建,也能由浮点数的字符串表达式创建
原文链接:https://blog.csdn.net/qq_41866813/article/details/90520268

双等号:判断字符串的地址是否相同,即使字符串内容相同,但是对象不同,返回值仍是false
整型
整型
S1.equals(“S2”);
2.3.1算术运算符:
为了完成基本的数值或字符串运算,Java定义了一套算术运算符,分为一元运算符和二元运算符。
(1)一元运算符有:正(+)、负(-)、自增(++)和自减(–)4个。需要注意的是,自增和自减运算符只允许用于数值类型的变量,不允许用于表达式中。该运算符既可放在变量之前(如++i),也可放在变量之后(如i++),两者的差别是:如果是++i运算,则变量值先加1,然后进行其他相应的操作;如果是i++运算,则先进行其他相应的操作,然后再进行变量值加1。
(2)二元运算符有:加(+)、减(-)、乘()、除(/)、求余运算(%)。其中+、-、、/完成加、减、乘、除四则运算,%是求两个操作数相除后的余数。需要注意的是,求余运算的两个操作数可以是整数也可以是浮点数,可以是正数也可以是负数,其计算结果的符号与求余运算符左侧的操作数符号一致。
下面根据几个具体的例题来说明运算符的运算规则。

2.5.1数组

使用new函数创建对象,数组先声明再创建才能存储数据。

 1)声明:int array[];创建:array=new int[5];
2)声明并创建:int array[]=new int[5];
3)声明并初始化数组  char name[]=(‘a’,’b’,’c’,’d’);
4)声明,创建并初始化: float number[]=new float[]{23.5,6734,99.8};

典型例子:

float number[]=new    float[]{23.5,67.4,99.8};   
float[0]=23.5
float[1]=67.4
float[2]=99.8

数组的 下标从零开始,数组的最后一个元素的下标是数组的长度-1
冒泡:典例第六行:
12 23 45…………
12 23 24 45 …………
12 23 24 45 87 65 12………
12 23 24 45 87 12 ………
由小到大,两替换
6初始化
7下标环用
8输出的话
9~10行输出数组函数\t是空格
11外层循环(范围)!
12内层循环(范围)
13两个元素位置

PS:
//1、数组的声明

int[] a;
int[] b;


//2、数组的创建:直接new
a = new int[3];//此处new int[3]必须指定长度,假如new int[]这样写会编译不过去
 
//3、数组的初始化:3种方式
//3.1、默认初始化:数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被隐士初始化
//数组的元素相当于对象的成员变量,默认值跟成员变量的初始化规则一样。比如数字:0,布尔:false,char:\u0000 ,引用类型:null
int[] arr = new int[4];//1、直接这样new的话数组已经默认初始化了,
//3.2、静态初始化:在定义数字的同时就为数组元素分配空间并赋值
int[] arr2 = new int[] {1,2,3,4};
int[] arr3 =  {1,2,3,4};
 
//3.3、动态初始化:数组定义与为数组分配空间和赋值的操作分开进行
//静态初始化 完整写法
int[] arr4 = new int[] {1,2,3,4,5,6};
int[] arr5 =null;
arr4 =new int[]{1,2,3};
 
//简写 推荐 必须 声明与赋值同时进行
int[] arr6 = {1,2,34,6};
int[] arr7 =null;
//arr7 ={1,2,3,4}; //错误:简写不能与声明分开
 
//int[] arr8 = new int[5] {1,2,3,4,5,6};//错误:指定了长度
 
int[] arr9 =null;
arr9 = new int[6];
arr[9] =1;
//循环动态初始化
int[] arr10 = new int[3];
for (int i=0;i<arr10.length; i++ ) {
    arr10[i] = i;
}

总结

提示:这里对文章进行总结:
学习Java还是其他语言,都像应该像是我们学习母语一样,多读多写多练习,持之以恒,一定有很大的收获。

这个链接也可以帮助你,这个博主写的也很不错。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值