Java学习笔记-基础语法Ⅱ
成员变量:类中方法外的变量
局部变量:方法中的变量
注意,成员变量有默认初始值,而局部变量需要赋初始值
Java中虽然没有明确规定类必须首字母大写,但为了规范最好大写(因为自己刚刚写的时候就没看清写错了)
有时候不想在创造对象时,直接赋值,可以使用private关键字,并且加上get和set方法,来进行调用修改,注意这里即使变量首字母无论大写小写,get和set方法后面跟的变量名首字母都是大写
同时,可以在set方法中加入判断语句等功能
this代表所在类的对象引用,方法被哪个对象调用,this就代表哪个对象
封装:面向对象三大特征之一(封装、继承、多态),是面向对象编程语言对客观世界的模拟,客观世界成员变量都是隐藏在对象内部的,外界无法直接操作
将类的某些信息隐藏在类内部,不允许外部直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问成员变量private,提供对应的getXxx()/setXxx()方法
封装好处:
通过方法来控制成员变量的操作,提高了代码的安全性
把代码用方法来进行封装,提高了代码的复用性
构造方法:特殊方法,作用是创建对象,完成对象数据的初始化
成员方法:类中的方法,注意,成员方法不要加static 可以加static,但是静态方法只能调静态方法和静态变量
// 格式
// 修饰符 类名(参数){}
public 类名(){}
当创建类的时候,如果没有构造方法,系统会给出默认的构造方法,建议创建类的时候,手动加上无参构造方法,那么再自己创建新的构造方法,调用时不容易出错。因为自定义构造方法,那么系统将不再提供默认的构造方法
public class Student {
private int age;
private String name;
public Student() {
}
public Student(int age) {
this.age = age;
}
public Student(String name) {
this.name = name;
}
public Student(String name, int age) {
this.age = age;
this.name = name;
}
public void show() {
System.out.println(name + " " + age);
}
}
public class StudentDemo {
public static void main(String[] args) {
Student st1 = new Student();
st1.show();
Student st2 = new Student(30);
st2.show();
Student st3 = new Student("林青霞");
st3.show();
Student st4 = new Student("林青霞", 40);
st4.show();
}
}
尽量在创建类的时候,包含无参、带参构造方法,get方法、set方法
Java帮助文档使用:索引
,包
,描述
,构造方法
,成员方法
注意,在查看成员方法时,要注意其参数、返回值
Java的==是比较两个变量的地址值是否相同,equals才是比较两个值是否相同
而python中的==是比较两个值是否相同,is才是比较两个地址值是否相同
public class String2 {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
String s4 = new String("abc");
// System.out.println(s3);
System.out.println(s3==s1);
System.out.println(s3.equals(s1));
System.out.println(s1==s2);
System.out.println(s3==s4);
}
}
false
true
true
false
String类在Java帮助文档的这句话:字符串是常量,它们的值不能被创建后改变。支持可变字符串字符串缓冲区。因为字符串对象是不可改变的,所以它们可以被共享
,按我的理解,类似python的元组,给定之后就不能改变,但是可以重新赋值,Java里面应该是指向堆的地址不同
上述代码还需注意一点,每次new出来的String,地址都会不一样,虽然他们可以指向相同的值。如果是直接双引号的字符串,那么地址是相同的
public class String2 {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
String s4 = new String("abc");
// System.out.println(s3);
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
System.out.println(s3.hashCode());
System.out.println(s4.hashCode());
System.out.println("--------------");
System.out.println(s3==s1);
System.out.println(s3.equals(s1));
System.out.println(s1==s2);
System.out.println(s3==s4);
}
}
// 这里的4个变量的hashCode全部相同
这里也看了下equals和hashCode,在String类中重写了,现在我需要记住的东西是:
equals就是看内容是否相同
equals相同的东西,hashCode一定相同,equals不同的东西,hashCode也可能相同
Java的遍历字符串,和C语言很像,和python不像,不要搞混了
public class Shuzu {
public static void main(String[] args) {
String line = "Hello World!";
for(int i = 0;i<line.length();i++){
System.out.println(line.charAt(i));
}
}
}
public class Int_shuzu {
public static void main(String[] args) {
int [] arr = {1,2,3,4};
for(int i = 0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
上面的数组,是可以直接通过索引来进行输出或者操作,字符数组则不能够,猜测与String创建之后不能进行修改有关数组也是不能修改的
String在进行字符串拼接时,容易造成堆内存浪费的情况,所以有StringBuilder这个类
StringBuilder是一个可变的字符串类
public class StringBuilder_1 {
public static void main(String[] args) {
StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = sb1.append("Hello");
StringBuilder sb3 = sb2.append("World");
System.out.println("sb1:"+sb1);
System.out.println("sb2:"+sb2);
System.out.println("sb3:"+sb3);
System.out.println(sb1==sb2);
System.out.println(sb1==sb3);
System.out.println(sb3==sb2);
}
}
StringBuilder和String相互转换,为什么要做这个转换,因为String创建的字符串不能修改,且String中方法不是很多,StringBuilder中方法很多如append
方法和reverse
方法,所以需要做这个转换
怎么转换:
String到StringBuilder:直接StringBuilder创建时传入String
StringBuilder到String:toString方法
public class StringBuilder_2 {
public static void main(String[] args) {
String s = "Hello";
StringBuilder sb = new StringBuilder(s);
System.out.println(sb);
System.out.println("---------------");
StringBuilder ssb = new StringBuilder("World");
String st = ssb.toString();
System.out.println(st);
}
}
集合:提供一种存储空间可变的存储模型,存储的数据容量可以发生改变
ArrayList<E>:可调整大小的数组实现,其中<E>是一种特殊的数据类型,泛型
ArrayList中有集中常用方法:add
、remove
、get
、set
、size
add
方法很普遍,remove
方法需要稍微注意下,remove
删除不存在的东西返回false,和python不一样
import java.util.ArrayList;
public class ArrayList_1 {
public static void main(String[] args) {
ArrayList<String> arr1 = new ArrayList<>();
arr1.add("hello");
System.out.println(arr1);
arr1.add("hello");
arr1.add("world");
arr1.add("java");
System.out.println(arr1);
System.out.println(arr1.remove("hello"));
System.out.println(arr1);
System.out.println(arr1.remove("javaee"));
System.out.println(arr1);
ArrayList<Integer> arr2 = new ArrayList();
arr2.add(11);
System.out.println(arr2);
}
}
[hello]
[hello, hello, world, java]
true
[hello, world, java]
false
[hello, world, java]
[11]
python列表不能删除列表中不存在的元素
a = ["hello",1,'world','python',2]
b = a.remove("hello")
print(b)
# c = a.remove("java")
python的集合也不可以删除集合中不存在的元素
a = set([1,2,3,4,5])
a.remove(6)
print(a)
# 报错
简单复习一下python的列表常用删除函数:
del删除指定列表位置的值
remove删除指定值
pop不指定则删除末尾元素,也可以删除指定位置元素,同时会返回该值
同时注意一下,Java的ArrayList的5个基本函数已给出,那么在遍历,或者查找等要求下,都是使用上述5中方法实现
import java.util.ArrayList;
public class ArrayList_2 {
public static void main(String[] args) {
ArrayList<String> arr = new ArrayList<>();
arr.add("hello");
arr.add("world");
arr.add("java");
for(int i=0;i<arr.size();i++){
System.out.println(arr.get(i));
}
}
}
请千万注意,这里获取长度用size
函数,遍历使用get
函数
length是对应数组的属性
length()是对应String的方法
size()是集合的方法
JVM虚拟机退出:
System.exit(0);
Java学习笔记-基础语法Ⅱ的更多相关文章
- Java学习笔记-基础语法Ⅳ
多态:同一个对象,在不同时刻表现出来的不同形态 例如: 猫 cat = new 猫(); 动物 animal = new 猫(); 这里的猫在不同时刻表现出来不同的形态,这就是多态 多态的前提和体现: ...
- Java学习笔记-基础语法
Java基础包含关键字,标识符,注释,常量和变量,运算符 关键字 关键字的定义和特点 定义:被Java语言赋予了特殊含义的单词 特点:关键字中所有字母都为小写 Java的关键字 用于定义数据类型的关键 ...
- Java学习笔记-基础语法Ⅹ-进程线程
学习快一个月了,现在学到了黑马Java教程的300集 打印流的特点: 只负责输出数据,不负责读取数据 有自己的特有方法 字节打印流:PrintStream,使用指定的文件名创建新的打印流 import ...
- Java学习笔记-基础语法Ⅷ-泛型、Map
泛型 泛型本质上是参数化类型,也就是说所操作的数据类型被指定为一个参数,即将类型由原来的具体的类型参数化,然后在使用/调用时传入具体的类型,这种参数类型可以用在类.方法和接口中,分别为泛型类.泛型方法 ...
- Java学习笔记-基础语法Ⅴ
学习一些Java常用的API Math:包含执行基本数字运算的方法 如果没有构造方法,一般类的成员都是静态的,通过类名可以直接调用 Java中有两种random函数,Math.Random()函数能够 ...
- JAVA 学习笔记 - 基础语法 2
---恢复内容开始--- 1.数组的申明和应用 数据类型 数组名称[] = null; //在堆栈中申明变量名称 数组名称 = new 数据类型[10]; // ...
- JAVA 学习笔记 - 基础语法1
1. 类的定义 public class 与 class的区别 一个java文件只有一个public class, 而且类名必须与文件名一致. 一个java文件可以有多个class定义,javac ...
- Java学习笔记-基础语法ⅩⅠ-UDP、TCP
网络编程 三要素:IP地址.端口.协议 IP地址:使用ipconfig查看,如果装了VM的话,会有VMnet1.VMnet8和WLAN,net1不能从虚拟机到主机,net8不能从主机到虚拟机,net0 ...
- Java学习笔记-基础语法Ⅸ-文件
File File是文件和路径名的抽象表示,File封装的并不是一个真正存在的文件,是一个路径名,可以存在也可以不存在 常用方法: 创建文件:createNewFile() 创建目录:mkdir() ...
- Java学习笔记-基础语法Ⅶ-集合
集合 集合类特点:提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变 这里需要回顾一下,因为数组和字符串一旦创建,就不可改变,需要区分一下 import java.util.ArrayLi ...
随机推荐
- int 和 Integer 哪个会占用更多的内存?
Integer 对象会占用更多的内存.Integer 是一个对象,需要存储对象的元数据. 但是 int 是一个原始类型的数据,所以占用的空间更少.
- ubuntu 安装 mysql mariadb
本教程面向Ubuntu服务器,适用于Ubuntu的任何LTS版本,包括Ubuntu 14.04,Ubuntu 16.04,Ubuntu 18.04,甚至非LTS版本(如Ubuntu 17.10和其他基 ...
- s函数中积分程序更改
function [sys,x0,str,ts,simStateCompliance] = int_hyo(t,x,u,flag) switch flag, case 0, [sys,x0,str,t ...
- electron制作聊天界面(仿制qq)
效果图: 样式使用scss和flex布局 这也是制作IM系统的最后一个界面了!在制作之前参考了qq和千牛 需要注意的点 qq将滚动条美化了 而且在无操作的情况下是不会显示的 滚动条美化 ::-webk ...
- Python简单文件读写
''' 用文件存储账户信息 使用列表存储多个账户信息,每个账户为一个字典对象 ''' users=[] #创建一个空列表 users.append({'id':'admin','pwd':'1235@ ...
- FastAPI(六十七)实战开发《在线课程学习系统》接口开发--用户登陆接口开发
接上一篇文章FastAPI(六十六)实战开发<在线课程学习系统>接口开发--用户注册接口开发.这次我们分享实际开发--用户登陆接口开发. 我们先来梳理下逻辑 1.查询用户是否存在2.校验密 ...
- WIN进程注入&BypassUAC&令牌窃取
WIN进程注入&BypassUAC&令牌窃取 本地提权-win令牌窃取 假冒令牌可以假冒一个网络中的另一个用户进行各类操作. 所以当一个攻击者需要域管理员的操作权限时候,需通过假冒域管 ...
- CTFHUB之gopher协议实现SSRF
介绍 解题思路: 利用302协议(重定向)的跳转ssrf.可以访问与服务器相连的内网 ①什么是gopher协议 Gopher是Internet上一个信息查找系统,它将Internet上的文件组织成某种 ...
- Spring Boot-场景启动器
分析上文快速入门 1.查看pom文件导入的依赖(starter的父项目) <parent> <artifactId>spring-boot-starter-parent< ...
- oracle各种用户登录的方式
Oracle有3种用户: system.sys.scott 1.system和sys的差别在与是否能创建数据库2.sys用户登录创建数据库,3.scott是给刚開始学习的人学习的用户.学习者能够用Sc ...