GVKun编程网logo

java 设计模式整理(java设计模式总结)

1

在本文中,我们将给您介绍关于java设计模式整理的详细内容,并且为您解答java设计模式总结的相关问题,此外,我们还将为您提供关于4-1如何定义Java中的方法;Java中无参无返回值方法的使用;Ja

在本文中,我们将给您介绍关于java 设计模式整理的详细内容,并且为您解答java设计模式总结的相关问题,此外,我们还将为您提供关于4-1 如何定义 Java 中的方法;Java 中无参无返回值方法的使用;Java 中无参带返回值方法的使用;、5-2 Java 中的 static 使用之静态变量 ;;Java 中的 static 使用之静态方法;;Java 中的 static 使用之静态初始化块、Error:java: Internal compiler error: java.lang.Exception: java.lang.NoClassDefFoundError 解决、Hibernate不从数据库返回第一条记录 User.java Role.java UserRepository.java application.properties UserController.java 错误消息邮差的结果:的知识。

本文目录一览:

java 设计模式整理(java设计模式总结)

java 设计模式整理(java设计模式总结)

package com.ayo.observer;

import java.util.Observable;
import java.util.Observer;

/**
 * java观察者模式
 */
public class ObserverModel {

    /**
     * 被观察者
     */
    static class JavaObservable extends Observable {

        private String str = "上班了!";

        public String getStr() {
            return str;
        }

        public void setStr(String str) {
            this.str = str;
            setChanged();
            notifyObservers();
        }
    }

    /**
     * 观察者
     */
    static class JavaObserver implements Observer{

        @Override
        public void update(Observable o, Object arg) {
            JavaObservable javaObservable = (JavaObservable) o;
            System.out.println("状态变更: " + javaObservable.getStr());
        }
    }

    /**
     * 测试
     * @param args
     */
    public static void main(String[] args) {
        JavaObservable javaObservable = new JavaObservable();
        System.out.println(javaObservable.getStr());
        javaObservable.addObserver(new JavaObserver());
        javaObservable.setStr("下班了!");
    }
}

---------------------------------------------华丽的分割线-----------------------------------------

package com.ayo.strategy;

/**
 * 策略模式上下文
 */
public class Context {

    private Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    public void test(){
        strategy.say();
    }

    public static void main(String[] args) {
        Context context = new Context(new StrategyC());
        context.test();
    }
}

package com.ayo.strategy;

/**
 * 策略接口
 */
public interface Strategy {

    /**
     * 策略方法
     */
    public void say();
}

package com.ayo.strategy;

/**
 * 策略A
 */
public class StrategyA implements Strategy {

    @Override
    public void say() {
        System.out.println("我选A!");
    }
}

package com.ayo.strategy;

/**
 * 策略C
 */
public class StrategyC implements Strategy {

    @Override
    public void say() {
        System.out.println("我选C!");
    }
}

package com.ayo.strategy;

/**
 * 策略B
 */
public class StrategyB implements Strategy {

    @Override
    public void say() {
        System.out.println("我选B!");
    }
}

 

4-1 如何定义 Java 中的方法;Java 中无参无返回值方法的使用;Java 中无参带返回值方法的使用;

4-1 如何定义 Java 中的方法;Java 中无参无返回值方法的使用;Java 中无参带返回值方法的使用;

1.一般情况下,定义一个方法的语法是:

访问修饰符 返回值类型 方法名(参数列表){
方法体
}

1、 访问修饰符:方法允许被访问的权限范围, 可以是 public、protected、private 甚至可以省略 ,其中 public 表示该方法可以被其他任何代码调用,其他几种修饰符的使用在后面章节中会详细讲解滴

2、 返回值类型:方法返回值的类型,如果方法不返回任何值,则返回值类型指定为 void ;如果方法具有返回值,则需要指定返回值的类型,并且在方法体中使用 return 语句返回值

3、 方法名:定义的方法的名字,必须使用合法的标识符

4、 参数列表:传递给方法的参数列表,参数可以有多个,多个参数间以逗号隔开,每个参数由参数类型和参数名组成,以空格隔开 

根据方法是否带参、是否带返回值,可将方法分为四类:

Ø 无参无返回值方法

Ø 无参带返回值方法

Ø 带参无返回值方法

Ø 带参带返回值方法

public class HelloWorld {
    
    //定义了一个方法名为 print 的方法,实现输出信息功能
    public void print() {
        System.out.println("Hello World");
    }
    
    public static void main(String[] args){
        
        //在 main 方法中调用 print 方法
        HelloWorld test=new HelloWorld();
        test.print();
    }
}

2.Java 中无参无返回值方法的使用(如果方法不包含参数,且没有返回值,称为无参无返回值的方法。

方法的使用分两步

例如:下面代码定义了一个方法名为 show ,没有参数,且没有返回值的方法,执行的操作为输出 “ welcome to imooc. ”

注意:

1、 方法体放在一对大括号中,实现特定的操作

2、 方法名主要在调用这个方法时使用,需要注意命名的规范,一般采用第一个单词首字母小写,其它单词首字母大写的形式

第二步,调用方法

当需要调用方法执行某个操作时,可以先创建类的对象,然后通过  对象名.方法名();  来实现(关于类和对象的概念在后面章节中会详细讲解滴,先熟悉语法,表着急哦~~)

例如:在下面的代码中,我们创建了一个名为 hello 的对象,然后通过调用该对象的 show( ) 方法输出信息

运行结果为:  welcome to imooc.

3.Java 中无参带返回值方法的使用

如果方法不包含参数,但有返回值,我们称为无参带返回值的方法。

例如:下面的代码,定义了一个方法名为 calSum ,无参数,但返回值为 int 类型的方法,执行的操作为计算两数之和,并返回结果

     在 calSum( ) 方法中,返回值类型为 int 类型,因此在方法体中必须使用 return 返回一个整数值。

运行结果为: 两数之和为:17

不容忽视的“小陷阱”:

1、 如果方法的返回类型为 void ,则方法中不能使用 return 返回值!

2、 方法的返回值最多只能有一个,不能返回多个值

3、 方法返回值的类型必须兼容,例如,如果返回值类型为 int ,则不能返回 String 型值

 

 

 

 

 

 

 

 

5-2 Java 中的 static 使用之静态变量 ;;Java 中的 static 使用之静态方法;;Java 中的 static 使用之静态初始化块

5-2 Java 中的 static 使用之静态变量 ;;Java 中的 static 使用之静态方法;;Java 中的 static 使用之静态初始化块

1.Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。当然,鉴于他作用的特殊性更推荐用类名访问

使用 static 可以修饰变量、方法和代码块。

    

2. 与静态变量一样,我们也可以使用 static 修饰方法,称为静态方法或类方法。其实之前我们一直写的 main 方法就是静态方法。静态方法的使用如:

         

注意:

1、 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。如:

    

如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量。如:

2、 在普通成员方法中,则可以直接访问同类的非静态变量和静态变量,如下所示:

3、 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。如:

          

3.Java 中的 static 使用之静态初始化块

Java 中可以通过初始化块进行数据赋值。如:

   在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。如果使用 static 修饰初始化块,就称为静态初始化块。

注意:静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量  

 

 

 

 

 

 

Error:java: Internal compiler error: java.lang.Exception: java.lang.NoClassDefFoundError 解决

Error:java: Internal compiler error: java.lang.Exception: java.lang.NoClassDefFoundError 解决

Error:java: Internal compiler error: java.lang.Exception: java.lang.NoClassDefFoundError 解决

IDEA 发现一个奇怪的错误
今天用 IDEA2018.1 运行 SpringBoot 项目报错如下:
Error:java: Internal compiler error: java.lang.Exception: java.lang.NoClassDefFoundError: org/springframework/boot/configurationprocessor/metadata/ConfigurationMetadata at org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.handleProcessor(RoundDispatcher.java:169)
解决方案:
分下看这个跟 Eclipse 有关,可是这个不是 Eclipse 项目(没有 Eclipse 的 Workspeace 信息),后来查找发现跟 Eclipse 有关设置就是之前自己设置锅编译器,改过来问题得到解决。解决步骤:IDEA 中 File-->settings-->Bulid Execution Deloyment-->Complier-->Java Complier 中的 user complier 有原来的 Eclipse 改为 javac 即可

Hibernate不从数据库返回第一条记录 User.java Role.java UserRepository.java application.properties UserController.java 错误消息邮差的结果:

Hibernate不从数据库返回第一条记录 User.java Role.java UserRepository.java application.properties UserController.java 错误消息邮差的结果:

如何解决Hibernate不从数据库返回第一条记录 User.java Role.java UserRepository.java application.properties UserController.java 错误消息邮差的结果:

我用Oracle 19c作为数据库构建了一个Spring Boot应用程序。我已经使用Spring Data Rest和JPA基于数据库中的表和一些简单的端点创建了实体,但是当为所有记录调用数据库时,它从第二条记录开始返回数据,并且当我尝试访问以id为路径的端点时变量以检索单个对象,发生错误。

我用Postman测试我的休息控制器。带有users / 1的Spring Data Rest没有返回任何内容,并且返回404状态。输入URL的EntityManager也不返回任何值,但状态为200。当我尝试从控制器中的JpaRepository findById()调用该方法时,它显示错误500。

User.java

@Entity
@Table(name = "USER")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID")
    private int id;

    @Column(name = "NAME")
    private String name;

    @Column(name = "USERNAME")
    private String username;

    @Column(name = "PASSWORD")
    private String password;

    @ManyToMany(cascade = {CascadeType.DETACH,CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH},fetch = FetchType.LAZY)
    @JoinTable(name = "USER_ROLE",joinColumns = @JoinColumn(name = "USER_ID"),inverseJoinColumns = @JoinColumn(name = "ROLE_ID"))
    private List<Role> roles;

    public User() {
    }

    public User(String name,String username,String password) {
        this.name = name;
        this.username = username;
        this.password = password;
    }

   // setters/getters
}

Role.java

@Entity
@Table(name = "ROLE")
public class Role {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID")
    private int id;

    @Column(name = "NAME")
    private String name;

    @ManyToMany(mappedBy = "roles")
    private List<User> users;


    public Role() {
    }

    public Role(String name) {
        this.name = name;
    }

    // setters/getters
}

UserRepository.java

@Repository
public interface UserRepository extends JpaRepository<User,Integer> {
}

application.properties

spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:placeholder
spring.datasource.username=placeholder
spring.datasource.password=placeholder

spring.jpa.show-sql=true
hibernate.dialect=org.hibernate.dialect.Oracle12cDialect

UserController.java

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private EntityManager entityManager;

    @Transactional
    @GetMapping("/")
    public List<User> getAll() {
        List<User> users = entityManager.createquery("from User",User.class).getResultList();
        System.out.println(users);
        return users;
    }

    @Transactional
    @GetMapping("/{userId}")
    public User getUser(@PathVariable("userId") Integer userId) {
        System.out.println("Sended id: " + userId);
        return userRepository.findById(userId).get();
    }
}

错误消息

Sended id: 1
Hibernate: select user0_.id as id1_2_0_,user0_.name as name2_2_0_,user0_.password as password3_2_0_,user0_.username as username4_2_0_ from user_table user0_ where user0_.id=?
2020-09-19 15:48:27.350 ERROR 18860 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing Failed; nested exception is java.util.NoSuchElementException: No value present] with root cause

java.util.NoSuchElementException: No value present
    at java.base/java.util.Optional.get(Optional.java:141) ~[na:na]
    at springboot.resources.UserController.getUser(UserController.java:41) ~[classes/:na]
    at springboot.resources.UserController$$FastClassBySpringcglib$$344055f.invoke(<generated>) ~[classes/:na]
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.aop.framework.cglibAopProxy$DynamicAdvisedInterceptor.intercept(cglibAopProxy.java:687) ~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at springboot.resources.UserController$$EnhancerBySpringcglib$$a0145449.getUser(<generated>) ~[classes/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:567) ~[na:na]
    at org.springframework.web.method.support.invocableHandlerMethod.doInvoke(invocableHandlerMethod.java:190) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.web.method.support.invocableHandlerMethod.invokeForRequest(invocableHandlerMethod.java:138) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.ServletinvocableHandlerMethod.invokeAndHandle(ServletinvocableHandlerMethod.java:105) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.web.servlet.dispatcherServlet.dodispatch(dispatcherServlet.java:1040) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.web.servlet.dispatcherServlet.doService(dispatcherServlet.java:943) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.37.jar:4.0.FR]
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.37.jar:4.0.FR]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.37.jar:9.0.37]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1589) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
    at org.apache.tomcat.util.net.socketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.37.jar:9.0.37]
    at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]

邮差的结果:

UserController.java:

https://imgur.com/f56A1Ln

https://imgur.com/52fBKS4

https://imgur.com/9Xo5PuO

从Spring Data Rest自动创建的端点:

https://imgur.com/TIGe1Q9

https://imgur.com/1FN4geC

https://imgur.com/klBJLZb

数据库中的数据:https://imgur.com/q4oH9O7

有解决此问题的建议吗?

解决方法

删除@Transaction,希望它能工作。

,

我还是java的新手程序员,但是我会根据我的经验尝试回答

存储库findById返回Optional,因此,当您直接使用userRepository.findById(userId).get()并且对应的userId不存在时,就会发生异常java.util.NoSuchElementException

使用Optional时,请确保先检查该值是否存在,然后再使用get。将getUser方法更改为

@Transactional
@GetMapping("/{userId}")
public User getUser(@PathVariable("userId") Integer userId) {
 
Optional<User> user = userRepository.findById(userId);
return user.ifPresent() ? user : null;
}

在不存在Response的情况下,我建议使用HttpStatus 404对象返回特定的userId,这是查询byId操作的标准方式。

今天关于java 设计模式整理java设计模式总结的讲解已经结束,谢谢您的阅读,如果想了解更多关于4-1 如何定义 Java 中的方法;Java 中无参无返回值方法的使用;Java 中无参带返回值方法的使用;、5-2 Java 中的 static 使用之静态变量 ;;Java 中的 static 使用之静态方法;;Java 中的 static 使用之静态初始化块、Error:java: Internal compiler error: java.lang.Exception: java.lang.NoClassDefFoundError 解决、Hibernate不从数据库返回第一条记录 User.java Role.java UserRepository.java application.properties UserController.java 错误消息邮差的结果:的相关知识,请在本站搜索。

本文标签: